diff --git a/src/me/ByteEdit/main/Assembler.java b/src/me/ByteEdit/main/Assembler.java new file mode 100644 index 0000000..619baa8 --- /dev/null +++ b/src/me/ByteEdit/main/Assembler.java @@ -0,0 +1,1351 @@ +package me.ByteEdit.main; + +import java.awt.Color; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.swing.text.BadLocationException; + +import org.apache.commons.lang3.StringEscapeUtils; +import org.objectweb.asm.Handle; +import org.objectweb.asm.Label; +import org.objectweb.asm.Type; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.AnnotationNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.FrameNode; +import org.objectweb.asm.tree.IincInsnNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.InvokeDynamicInsnNode; +import org.objectweb.asm.tree.JumpInsnNode; +import org.objectweb.asm.tree.LabelNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.LineNumberNode; +import org.objectweb.asm.tree.LocalVariableNode; +import org.objectweb.asm.tree.LookupSwitchInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.MultiANewArrayInsnNode; +import org.objectweb.asm.tree.TableSwitchInsnNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.VarInsnNode; + +public class Assembler { + + public static ClassNode assemble(String input) { + Main.textArea.removeAllLineHighlights(); + CustomBufferedReader read = null; + try { + ClassNode clazz = new ClassNode(); + read = new CustomBufferedReader(new StringReader(input)); + String s; + + while (!(s = read.readLine()).startsWith("// #Class v:")) { + if (clazz.visibleAnnotations == null) { + clazz.visibleAnnotations = new ArrayList<>(); + } + clazz.visibleAnnotations.add(parseAnnotation(s)); + } + + clazz.version = Integer.parseInt(s.substring(12)); + + while (!(s = read.readLine()).startsWith("// #SourceFile: ")) { + s = s.substring(0, s.length() - 2); + if (s.contains(" implements ")) { + String interfaces = s.substring(s.indexOf(" implements ") + 12); + clazz.interfaces = new ArrayList<>(); + for (String interf : interfaces.split(", ")) { + clazz.interfaces.add(interf); + } + s = s.substring(0, s.indexOf(" implements ")); + } + clazz.superName = s.substring(s.indexOf(" extends ") + 9); + s = s.substring(0, s.indexOf(" extends ")); + + String[] split = s.split(" "); + clazz.name = split[split.length - 1]; + + clazz.access = ClassUtil.ACC_SUPER; + + switch (split[split.length - 2]) { + case "class": + break; + case "enum": + clazz.access ^= ClassUtil.ACC_ABSTRACT; + clazz.access ^= ClassUtil.ACC_ENUM; + break; + case "interface": + clazz.access ^= ClassUtil.ACC_ABSTRACT; + clazz.access ^= ClassUtil.ACC_INTERFACE; + break; + case "@interface": + clazz.access ^= ClassUtil.ACC_ABSTRACT; + clazz.access ^= ClassUtil.ACC_ANNOTATION; + break; + } + + if (split.length > 2) { + String cons = consolidateStrings(split, 0, split.length - 2); + if (cons.contains("public")) { + clazz.access ^= ClassUtil.ACC_PUBLIC; + } + if (cons.contains("final")) { + clazz.access ^= ClassUtil.ACC_FINAL; + } + if (cons.contains("synthetic")) { + clazz.access ^= ClassUtil.ACC_SYNTHETIC; + } + if (cons.contains("abstract")) { + clazz.access ^= ClassUtil.ACC_ABSTRACT; + } + } + + } + + clazz.sourceFile = s.substring(16).equals("null") ? null : s.substring(16); + + while (!(s = read.readLine()).equals("// #Fields")) { + } + + clazz.fields = new ArrayList<>(); + clazz.methods = new ArrayList<>(); + + ArrayList annotationsForNext = new ArrayList<>(); + while (!(s = read.readLine()).equals("// #Methods")) { + s = s.trim(); + if (s.isEmpty()) + continue; + if (s.startsWith("@")) { + annotationsForNext.add(s); + } else { + String[] split = s.split(" "); + boolean hasValue = false; + if (s.contains(" = ")) { + hasValue = true; + } + Object value = hasValue ? split[split.length - 1] : null; + if (hasValue) { + split = s.substring(0, s.indexOf(" = ")).split(" "); + } + String name = split[split.length - 1]; + String desc = split[split.length - 2]; + + value = getValue((String) value, desc); + + int access = 0; + + if (split.length > 2) { + String cons = consolidateStrings(split, 0, split.length - 2); + if (cons.contains("public")) { + access ^= ClassUtil.ACC_PUBLIC; + } + if (cons.contains("private")) { + access ^= ClassUtil.ACC_PRIVATE; + } + if (cons.contains("protected")) { + access ^= ClassUtil.ACC_PROTECTED; + } + if (cons.contains("static")) { + access ^= ClassUtil.ACC_STATIC; + } + if (cons.contains("final")) { + access ^= ClassUtil.ACC_FINAL; + } + if (cons.contains("synchronized")) { + access ^= ClassUtil.ACC_SYNCHRONIZED; + } + if (cons.contains("bridge")) { + access ^= ClassUtil.ACC_BRIDGE; + } + if (cons.contains("varargs")) { + access ^= ClassUtil.ACC_VARARGS; + } + if (cons.contains("native")) { + access ^= ClassUtil.ACC_NATIVE; + } + if (cons.contains("interface")) { + access ^= ClassUtil.ACC_INTERFACE; + } + if (cons.contains("abstract")) { + access ^= ClassUtil.ACC_ABSTRACT; + } + if (cons.contains("strictfp")) { + access ^= ClassUtil.ACC_STRICTFP; + } + if (cons.contains("synthetic")) { + access ^= ClassUtil.ACC_SYNTHETIC; + } + if (cons.contains("annotation")) { + access ^= ClassUtil.ACC_ANNOTATION; + } + if (cons.contains("enum")) { + access ^= ClassUtil.ACC_ENUM; + } + if (cons.contains("mandated")) { + access ^= ClassUtil.ACC_MANDATED; + } + } + FieldNode node = new FieldNode(access, name, desc, null, value); + if (!annotationsForNext.isEmpty()) { + if (node.visibleAnnotations == null) { + node.visibleAnnotations = new ArrayList<>(); + } + for (String anno : annotationsForNext) { + node.visibleAnnotations.add(parseAnnotation(anno)); + } + annotationsForNext.clear(); + } + clazz.fields.add(node); + } + } + + HashMap> classLabelMap; + if ((classLabelMap = Main.labels.get(clazz.name)) == null) { + classLabelMap = new HashMap>(); + Main.labels.put(clazz.name, classLabelMap); + } else { + classLabelMap.clear(); + } + HashMap methodLabelMap = null; + + annotationsForNext.clear(); + MethodNode node = null; + String temp = ""; + + ArrayList localVarsToParse = new ArrayList<>(); + + while ((s = read.readLine()) != null) { + if (s.trim().isEmpty() || s.equals("}")) + continue; + s = s.substring(1); + if (s.startsWith("@")) { + annotationsForNext.add(s.trim()); + } else { + if (s.startsWith("// #Max: ")) { + node = new MethodNode(); + node.exceptions = new ArrayList<>(); + node.tryCatchBlocks = new ArrayList<>(); + node.localVariables = new ArrayList<>(); + node.instructions = new InsnList(); + s = s.substring(11); + node.maxLocals = Integer.parseInt(s.split(" ")[0]); + node.maxStack = Integer.parseInt(s.split(" ")[1].substring(2)); + localVarsToParse.clear(); + } else if (s.equals("// #LocalVars:")) { + } else if (s.startsWith("// ")) { // LocalVars + s = s.substring(3); + localVarsToParse.add(s); + } else if (s.equals("}")) { + if (!annotationsForNext.isEmpty()) { + if (node.visibleAnnotations == null) { + node.visibleAnnotations = new ArrayList<>(); + } + for (String anno : annotationsForNext) { + node.visibleAnnotations.add(parseAnnotation(anno)); + } + annotationsForNext.clear(); + } + + for (String st : localVarsToParse) { + String[] sp = st.split(":"); + int start = Integer.parseInt(sp[3].substring(0, sp[3].length() - 2)); + int end = Integer.parseInt(sp[4]); + LabelNode _start = null; + LabelNode _end = null; + for (Entry entry : methodLabelMap.entrySet()) { + if (entry.getValue() == start) { + _start = new LabelNode(entry.getKey()); + } + if (entry.getValue() == end) { + _end = new LabelNode(entry.getKey()); + } + } + node.localVariables.add(new LocalVariableNode(sp[0], sp[1].substring(1, sp[1].length() - 2), + null, _start, _end, Integer.parseInt(sp[2].substring(0, sp[2].length() - 2)))); + } + clazz.methods.add(node); + } else if (!s.startsWith("\t")) { + s = s.substring(0, s.length() - 2); + if (s.contains(" throws ")) { + String exceptions = s.substring(s.indexOf(" throws ") + 8); + for (String excp : exceptions.split(", ")) { + node.exceptions.add(excp); + } + s = s.substring(0, s.indexOf(" throws ")); + } + String[] split = s.split(" "); + node.desc = split[split.length - 1]; + node.name = split[split.length - 2]; + int access = 0; + if (split.length > 2) { + String cons = consolidateStrings(split, 0, split.length - 2); + if (cons.contains("public")) { + access ^= ClassUtil.ACC_PUBLIC; + } + if (cons.contains("private")) { + access ^= ClassUtil.ACC_PRIVATE; + } + if (cons.contains("protected")) { + access ^= ClassUtil.ACC_PROTECTED; + } + if (cons.contains("static")) { + access ^= ClassUtil.ACC_STATIC; + } + if (cons.contains("final")) { + access ^= ClassUtil.ACC_FINAL; + } + if (cons.contains("synchronized")) { + access ^= ClassUtil.ACC_SYNCHRONIZED; + } + if (cons.contains("bridge")) { + access ^= ClassUtil.ACC_BRIDGE; + } + if (cons.contains("varargs")) { + access ^= ClassUtil.ACC_VARARGS; + } + if (cons.contains("native")) { + access ^= ClassUtil.ACC_NATIVE; + } + if (cons.contains("interface")) { + access ^= ClassUtil.ACC_INTERFACE; + } + if (cons.contains("abstract")) { + access ^= ClassUtil.ACC_ABSTRACT; + } + if (cons.contains("strictfp")) { + access ^= ClassUtil.ACC_STRICTFP; + } + if (cons.contains("synthetic")) { + access ^= ClassUtil.ACC_SYNTHETIC; + } + if (cons.contains("annotation")) { + access ^= ClassUtil.ACC_ANNOTATION; + } + if (cons.contains("enum")) { + access ^= ClassUtil.ACC_ENUM; + } + if (cons.contains("mandated")) { + access ^= ClassUtil.ACC_MANDATED; + } + } + node.access = access; + if ((methodLabelMap = classLabelMap.get(node.name + "|" + node.desc)) == null) { + methodLabelMap = new HashMap(); + classLabelMap.put(node.name + "|" + node.desc, methodLabelMap); + } + } else { + s = s.substring(1); + if (!temp.isEmpty()) { + if (s.equals("]")) { + temp += s; + node.instructions.add(getNode(temp, methodLabelMap)); + temp = ""; + } else { + temp += s + "\n"; + } + } else { + if (s.endsWith("[")) { + temp += s + "\n"; + } else { + node.instructions.add(getNode(s, methodLabelMap)); + } + } + } + } + } + + return clazz; + } catch (Throwable e) { + System.err.println("Error at line: " + read.currentLine); + try { + Main.textArea.addLineHighlight(read.currentLine, Color.RED.darker()); + } catch (BadLocationException e1) { + System.err.println("Can't show line!"); + } + e.printStackTrace(); + return null; + } finally { + try { + read.close(); + } catch (Exception e) { + } + } + } + + public static AnnotationNode parseAnnotation(String s) { + s = s.substring(1); + String[] split = s.split(" "); + AnnotationNode node = new AnnotationNode(split[0]); + if (split.length > 1) { + if (node.values == null) { + node.values = new ArrayList<>(); + } + s = consolidateStrings(split, 1); + s = s.substring(1, s.length() - 1); + + split = s.split("\\], "); + + for (int i = 0; i < split.length; i++) { + String[] split2 = split[i].split(" = \\["); + node.values.add(split2[0]); + String value = split2[1]; + if (value.endsWith("]")) + value = value.substring(0, value.length() - 1); + if (value.startsWith("{ ")) { + String split3[] = value.substring(2, value.length() - 2).split(", "); + List list = new ArrayList<>(); + for (String rofl : split3) { + if (!rofl.startsWith("(")) { + int index = rofl.indexOf(";"); + list.add(new String[] { rofl.substring(0, index) + ";", + rofl.substring(index).substring(2) }); + } else { // anderer typ mit casten + list.add(ClassUtil.getCastedValue(rofl.split(" ")[1], rofl.split("\\) ")[0].substring(1))); + } + } + } else { + if (!value.startsWith("(")) { + int index = value.indexOf(";"); + node.values.add( + new String[] { value.substring(0, index) + ";", value.substring(index).substring(2) }); + } else { // anderer typ mit casten + node.values.add( + ClassUtil.getCastedValue(value.split(" ")[1], value.split("\\) ")[0].substring(1))); + } + } + } + } + return node; + } + + public static String consolidateStrings(String[] args, int start) { + if (args.length == 0) { + return null; + } + String ret = args[start]; + if (args.length > start + 1) { + for (int i = start + 1; i < args.length; i++) { + ret = ret + " " + args[i]; + } + } + return ret; + } + + public static String consolidateStrings(String[] args, int start, int end) { + if (end == 0) { + return null; + } + String ret = args[start]; + if (end > start + 1) { + for (int i = start + 1; i < end; i++) { + ret = ret + " " + args[i]; + } + } + return ret; + } + + public static Object getValue(String s, String to) { + if (s == null) { + return null; + } + switch (to) { + case "B": + return Byte.parseByte(s); + case "Z": + return Boolean.parseBoolean(s); + case "I": + return Integer.parseInt(s); + case "J": + return Long.parseLong(s.substring(0, s.length() - 1)); + case "C": + return (char) Integer.parseInt(s); + case "D": + return Double.parseDouble(s); + case "F": + return Float.parseFloat(s.substring(0, s.length() - 1)); + case "S": + return Short.parseShort(s); + case "Ljava/lang/String;": + return StringEscapeUtils.unescapeJava(s.substring(1, s.length() - 1)).replace("\\n", "\n").replace("\\r", + "\r"); + default: { + return null; + } + } + } + + public static AbstractInsnNode getNode(String s, HashMap labels) throws Exception { + if (s.startsWith("// label ")) { + int labelNr = Integer.parseInt(s.substring(9)); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new LabelNode(entry.getKey()); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new LabelNode(l); + } else if (s.startsWith("// line ")) { + s = s.substring(8); + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new LineNumberNode(Integer.parseInt(s.split(" ")[0]), new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new LineNumberNode(Integer.parseInt(s.split(" ")[0]), new LabelNode(l)); + } else if (s.startsWith("// frame ")) { + String str1 = s.substring(9); + String str = str1.substring(2); + Object[] local; + Object[] stack; + ArrayList arr = new ArrayList<>(); + if (str.startsWith("l:null")) { + local = new Object[0]; + } else { + String l = str.substring(3, str.indexOf("s:") - 2); + for (String asd : l.split(", ")) { + if (!asd.startsWith("(")) { + arr.add(asd); + } else { // anderer typ mit casten + arr.add(ClassUtil.getCastedValue(asd.split(" ")[1], asd.split("\\) ")[0].substring(1))); + } + } + local = new Object[arr.size()]; + int c = 0; + for (Object o : arr) { + local[c] = o; + c++; + } + } + arr.clear(); + if (str.endsWith("s:null")) { + stack = new Object[0]; + } else { + String st = str.substring(str.indexOf("s:") + 3, str.length() - 1); + for (String asd : st.split(", ")) { + if (!asd.startsWith("(")) { + arr.add(asd); + } else { // anderer typ mit casten + arr.add(ClassUtil.getCastedValue(asd.split(" ")[1], asd.split("\\) ")[0].substring(1))); + } + } + stack = new Object[arr.size()]; + int c = 0; + for (Object o : arr) { + stack[c] = o; + c++; + } + } + return new FrameNode(Integer.parseInt(str1.split(" ")[0]), local != null ? local.length : 0, local, + stack != null ? stack.length : 0, stack); + } else { + String[] split = s.split(" "); + String command = split[0]; + switch (command) { + case "nop": + return new InsnNode(0); + case "aconst_null": + return new InsnNode(1); + case "iconst_m1": + return new InsnNode(2); + case "iconst_0": + return new InsnNode(3); + case "iconst_1": + return new InsnNode(4); + case "iconst_2": + return new InsnNode(5); + case "iconst_3": + return new InsnNode(6); + case "iconst_4": + return new InsnNode(7); + case "iconst_5": + return new InsnNode(8); + case "lconst_0": + return new InsnNode(9); + case "lconst_1": + return new InsnNode(10); + case "fconst_0": + return new InsnNode(11); + case "fconst_1": + return new InsnNode(12); + case "fconst_2": + return new InsnNode(13); + case "dconst_0": + return new InsnNode(14); + case "dconst_1": + return new InsnNode(15); + case "bipush": { + return new IntInsnNode(16, Integer.parseInt(split[1])); + } + case "sipush": { + return new IntInsnNode(17, Integer.parseInt(split[1])); + } + case "ldc": { + String str = consolidateStrings(split, 1); + Object val; + try { + if (str.startsWith("Type: ")) { + str = str.substring(8, str.length() - 2); + String[] split2 = str.split("\n\t"); + Constructor constr = Type.class.getDeclaredConstructor(int.class, char[].class, int.class, + int.class); + constr.setAccessible(true); + val = constr.newInstance(new Object[] { Integer.parseInt(split2[0].substring(7)), + split2[3].substring(6, split2[3].length() - 1).toCharArray(), + Integer.parseInt(split2[1].substring(5)), Integer.parseInt(split2[2].substring(5)) }); + } else if (str.startsWith("\"") && str.endsWith("\"")) { + val = StringEscapeUtils.unescapeJava(str.substring(1, str.length() - 1)).replace("\\n", "\n") + .replace("\\r", "\r"); + } else if (str.endsWith("l")) { + val = Long.parseLong(str.substring(0, str.length() - 1)); + } else if (str.endsWith("f")) { + val = Float.parseFloat(str.substring(0, str.length() - 1)); + } else if (str.contains(".")) { + val = Double.parseDouble(str); + } else { + val = Integer.parseInt(str); + } + } catch (Exception e) { + val = null; + throw e; + } + return new LdcInsnNode(val); + } + case "iload": { + return new VarInsnNode(21, Integer.parseInt(split[1])); + } + case "lload": { + return new VarInsnNode(22, Integer.parseInt(split[1])); + } + case "fload": { + return new VarInsnNode(23, Integer.parseInt(split[1])); + } + case "dload": { + return new VarInsnNode(24, Integer.parseInt(split[1])); + } + case "aload": { + return new VarInsnNode(25, Integer.parseInt(split[1])); + } + case "iaload": { + return new InsnNode(46); + } + case "laload": { + return new InsnNode(47); + } + case "faload": { + return new InsnNode(48); + } + case "daload": { + return new InsnNode(49); + } + case "aaload": { + return new InsnNode(50); + } + case "baload": { + return new InsnNode(51); + } + case "caload": { + return new InsnNode(52); + } + case "saload": { + return new InsnNode(53); + } + case "istore": { + return new VarInsnNode(54, Integer.parseInt(split[1])); + } + case "lstore": { + return new VarInsnNode(55, Integer.parseInt(split[1])); + } + case "fstore": { + return new VarInsnNode(56, Integer.parseInt(split[1])); + } + case "dstore": { + return new VarInsnNode(57, Integer.parseInt(split[1])); + } + case "astore": { + return new VarInsnNode(58, Integer.parseInt(split[1])); + } + case "iastore": { + return new InsnNode(79); + } + case "lastore": { + return new InsnNode(80); + } + case "fastore": { + return new InsnNode(81); + } + case "dastore": { + return new InsnNode(82); + } + case "aastore": { + return new InsnNode(83); + } + case "bastore": { + return new InsnNode(84); + } + case "castore": { + return new InsnNode(85); + } + case "sastore": { + return new InsnNode(86); + } + case "pop": { + return new InsnNode(87); + } + case "pop2": { + return new InsnNode(88); + } + case "dup": { + return new InsnNode(89); + } + case "dup_x1": { + return new InsnNode(90); + } + case "dup_x2": { + return new InsnNode(91); + } + case "dup2": { + return new InsnNode(92); + } + case "dup2_x1": { + return new InsnNode(93); + } + case "dup2_x2": { + return new InsnNode(94); + } + case "swap": { + return new InsnNode(95); + } + case "iadd": { + return new InsnNode(96); + } + case "ladd": { + return new InsnNode(97); + } + case "fadd": { + return new InsnNode(98); + } + case "dadd": { + return new InsnNode(99); + } + case "isub": { + return new InsnNode(100); + } + case "lsub": { + return new InsnNode(101); + } + case "fsub": { + return new InsnNode(102); + } + case "dsub": { + return new InsnNode(103); + } + case "imul": { + return new InsnNode(104); + } + case "lmul": { + return new InsnNode(105); + } + case "fmul": { + return new InsnNode(106); + } + case "dmul": { + return new InsnNode(107); + } + case "idiv": { + return new InsnNode(108); + } + case "ldiv": { + return new InsnNode(109); + } + case "fdiv": { + return new InsnNode(110); + } + case "ddiv": { + return new InsnNode(111); + } + case "irem": { + return new InsnNode(112); + } + case "lrem": { + return new InsnNode(113); + } + case "frem": { + return new InsnNode(114); + } + case "drem": { + return new InsnNode(115); + } + case "ineg": { + return new InsnNode(116); + } + case "lneg": { + return new InsnNode(117); + } + case "fneg": { + return new InsnNode(118); + } + case "dneg": { + return new InsnNode(119); + } + case "ishl": { + return new InsnNode(120); + } + case "lshl": { + return new InsnNode(121); + } + case "ishr": { + return new InsnNode(122); + } + case "lshr": { + return new InsnNode(123); + } + case "iushr": { + return new InsnNode(124); + } + case "lushr": { + return new InsnNode(125); + } + case "iand": { + return new InsnNode(126); + } + case "land": { + return new InsnNode(127); + } + case "ior": { + return new InsnNode(128); + } + case "lor": { + return new InsnNode(129); + } + case "ixor": { + return new InsnNode(130); + } + case "lxor": { + return new InsnNode(131); + } + case "iinc": { + return new IincInsnNode(Integer.parseInt(split[1]), Integer.parseInt(split[3])); + } + case "i2l": { + return new InsnNode(133); + } + case "i2f": { + return new InsnNode(134); + } + case "i2d": { + return new InsnNode(135); + } + case "l2i": { + return new InsnNode(136); + } + case "l2f": { + return new InsnNode(137); + } + case "l2d": { + return new InsnNode(138); + } + case "f2i": { + return new InsnNode(139); + } + case "f2l": { + return new InsnNode(140); + } + case "f2d": { + return new InsnNode(141); + } + case "d2i": { + return new InsnNode(142); + } + case "d2l": { + return new InsnNode(143); + } + case "d2f": { + return new InsnNode(144); + } + case "i2b": { + return new InsnNode(145); + } + case "i2c": { + return new InsnNode(146); + } + case "i2s": { + return new InsnNode(147); + } + case "lcmp": { + return new InsnNode(148); + } + case "fcmpl": { + return new InsnNode(149); + } + case "fcmpg": { + return new InsnNode(150); + } + case "dcmpl": { + return new InsnNode(151); + } + case "dcmpg": { + return new InsnNode(152); + } + case "ifeq": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(153, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(153, new LabelNode(l)); + } + case "ifne": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(154, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(154, new LabelNode(l)); + } + case "iflt": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(155, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(155, new LabelNode(l)); + } + case "ifge": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(156, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(156, new LabelNode(l)); + } + case "ifgt": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(157, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(157, new LabelNode(l)); + } + case "ifle": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(158, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(158, new LabelNode(l)); + } + case "if_icmpeq": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(159, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(159, new LabelNode(l)); + } + case "if_icmpne": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(160, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(160, new LabelNode(l)); + } + case "if_icmplt": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(161, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(161, new LabelNode(l)); + } + case "if_icmpge": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(162, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(162, new LabelNode(l)); + } + case "if_icmpgt": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(163, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(163, new LabelNode(l)); + } + case "if_icmple": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(164, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(164, new LabelNode(l)); + } + case "if_acmpeq": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(165, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(165, new LabelNode(l)); + } + case "if_acmpne": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(166, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(166, new LabelNode(l)); + } + case "goto": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(167, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(167, new LabelNode(l)); + } + case "tableswitch": { + String str = s.substring(14, s.length() - 2).replace("\t", ""); + String split2[] = str.split("\n"); + HashMap labelMap = new HashMap<>(); + + for (int i = 4; i < split2.length - 1; i++) { + labelMap.put(Integer.parseInt(split2[i]), null); + } + + LabelNode dflt = null; + int labelNr = Integer.parseInt(split2[2].substring(9)); + for (Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + dflt = new LabelNode(entry.getKey()); + } + if (labelMap.containsKey(entry.getValue())) { + labelMap.replace(entry.getValue(), new LabelNode(entry.getKey())); + } + } + if (dflt == null) { + Label l = new Label(); + labels.put(l, labelNr); + dflt = new LabelNode(l); + } + + LabelNode[] arr = new LabelNode[labelMap.size()]; + + int counter = 0; + for (Entry entry : labelMap.entrySet()) { + LabelNode ln; + if (entry.getValue() == null) { + Label l = new Label(); + labels.put(l, labelNr); + ln = new LabelNode(l); + } else { + ln = entry.getValue(); + } + arr[counter] = ln; + counter++; + } + + return new TableSwitchInsnNode(Integer.parseInt(split2[0].substring(5)), + Integer.parseInt(split2[1].substring(5)), dflt, arr); + } + case "lookupswitch": { + String str = s.substring(15, s.length() - 2).replace("\t", ""); + String split2[] = str.split("\n"); + ArrayList keys = new ArrayList<>(); + HashMap labelMap = new HashMap<>(); + + int stage = 0; + for (int i = 2; i < split2.length; i++) { + String spl = split2[i]; + if (spl.equals("]")) { + stage = 1; + } else if (spl.equals("labels: [")) { + stage = 2; + } else if (stage == 0) { + keys.add(Integer.parseInt(spl)); + } else if (stage == 2) { + labelMap.put(Integer.parseInt(spl), null); + } + } + + LabelNode dflt = null; + int labelNr = Integer.parseInt(split2[0].substring(9)); + for (Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + dflt = new LabelNode(entry.getKey()); + } + if (labelMap.containsKey(entry.getValue())) { + labelMap.replace(entry.getValue(), new LabelNode(entry.getKey())); + } + } + if (dflt == null) { + Label l = new Label(); + labels.put(l, labelNr); + dflt = new LabelNode(l); + } + + LabelNode[] arr = new LabelNode[labelMap.size()]; + + int counter = 0; + for (Entry entry : labelMap.entrySet()) { + LabelNode ln; + if (entry.getValue() == null) { + Label l = new Label(); + labels.put(l, labelNr); + ln = new LabelNode(l); + } else { + ln = entry.getValue(); + } + arr[counter] = ln; + counter++; + } + + int[] _keys = new int[keys.size()]; + counter = 0; + + for (int i : keys) { + _keys[counter] = i; + counter++; + } + + return new LookupSwitchInsnNode(dflt, _keys, arr); + } + case "ireturn": { + return new InsnNode(172); + } + case "lreturn": { + return new InsnNode(173); + } + case "freturn": { + return new InsnNode(174); + } + case "dreturn": { + return new InsnNode(175); + } + case "areturn": { + return new InsnNode(176); + } + case "return": { + return new InsnNode(177); + } + case "getstatic": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new FieldInsnNode(178, target.substring(0, index), target.substring(index + 1), split[1]); + } + case "putstatic": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new FieldInsnNode(179, target.substring(0, index), target.substring(index + 1), split[1]); + } + case "getfield": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new FieldInsnNode(180, target.substring(0, index), target.substring(index + 1), split[1]); + } + case "putfield": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new FieldInsnNode(181, target.substring(0, index), target.substring(index + 1), split[1]); + } + case "invokevirtual": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new MethodInsnNode(182, target.substring(0, index), target.substring(index + 1), split[1], + split.length == 4); + } + case "invokespecial": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new MethodInsnNode(183, target.substring(0, index), target.substring(index + 1), split[1], + split.length == 4); + } + case "invokestatic": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new MethodInsnNode(184, target.substring(0, index), target.substring(index + 1), split[1], + split.length == 4); + } + case "invokeinterface": { + String target = split[2]; + int index = target.lastIndexOf("/"); + return new MethodInsnNode(185, target.substring(0, index), target.substring(index + 1), split[1], + split.length == 4); + } + case "invokedynamic": { + String str = s.substring(16, s.length() - 2).replace("", ""); + String sp[] = str.split("\n\t"); + ArrayList args = new ArrayList<>(); + + ArrayList vals = new ArrayList<>(); + + int stage = 0; + for (int i = 10; i < sp.length - 1; i++) { + String st = sp[i].substring(1); + if (st.equals("]")) { + if (stage == 1) { + try { + Constructor constr = Type.class.getDeclaredConstructor(int.class, char[].class, + int.class, int.class); + constr.setAccessible(true); + args.add(constr.newInstance(new Object[] { Integer.parseInt(vals.get(0).substring(6)), + vals.get(3).substring(6, vals.get(3).length() - 1).toCharArray(), + Integer.parseInt(vals.get(1).substring(5)), + Integer.parseInt(vals.get(2).substring(5)) })); + } catch (Exception e) { + throw e; + } + } else if (stage == 2) { + args.add(new Handle(Integer.parseInt(vals.get(4).substring(5)), vals.get(1).substring(7), + vals.get(0).substring(6), vals.get(2).substring(6), + Boolean.parseBoolean(vals.get(3).substring(13)))); + vals.clear(); + } + stage = 0; + } else if (st.equals("Type: [")) { + stage = 1; + } else if (stage == 1) { + st = st.substring(1); + vals.add(st); + } else if (st.equals("Handle: [")) { + vals.clear(); + stage = 2; + } else if (stage == 2) { + st = st.substring(1); + vals.add(st); + } + } + + Object[] _args = new Object[args.size()]; + + stage = 0; + for (Object o : args) { + _args[stage] = o; + stage++; + } + + return new InvokeDynamicInsnNode(sp[0].substring(7), sp[1].substring(6), + new Handle(Integer.parseInt(sp[7].substring(6)), sp[4].substring(8), sp[3].substring(7), + sp[5].substring(7), Boolean.parseBoolean(sp[6].substring(14))), + _args); + } + case "new": { + return new TypeInsnNode(187, split[1]); + } + case "newarray": { + return new IntInsnNode(188, Integer.parseInt(split[1])); + } + case "anewarray": { + return new TypeInsnNode(189, split[1]); + } + case "arraylength": { + return new InsnNode(190); + } + case "athrow": { + return new InsnNode(191); + } + case "checkcast": { + return new TypeInsnNode(192, split[1]); + } + case "instanceof": { + return new TypeInsnNode(193, split[1]); + } + case "monitorenter": { + return new InsnNode(194); + } + case "monitorexit": { + return new InsnNode(195); + } + case "multianewarray": { + return new MultiANewArrayInsnNode(split[1], Integer.parseInt(split[2])); + } + case "ifnull": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(198, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(198, new LabelNode(l)); + } + case "ifnonnull": { + int labelNr = Integer.parseInt(s.split(" ")[1]); + for (Map.Entry entry : labels.entrySet()) { + if (entry.getValue() == labelNr) { + return new JumpInsnNode(199, new LabelNode(entry.getKey())); + } + } + Label l = new Label(); + labels.put(l, labelNr); + return new JumpInsnNode(199, new LabelNode(l)); + } + default: + throw new IllegalArgumentException("Illegal Instruction: " + s); + } + } + } +} \ No newline at end of file diff --git a/src/me/ByteEdit/main/ClassUtil.java b/src/me/ByteEdit/main/ClassUtil.java new file mode 100644 index 0000000..4998077 --- /dev/null +++ b/src/me/ByteEdit/main/ClassUtil.java @@ -0,0 +1,441 @@ +package me.ByteEdit.main; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import org.apache.commons.lang3.StringEscapeUtils; + +public class ClassUtil { + + public static final int ACC_PUBLIC = 0x0001; + public static final int ACC_PRIVATE = 0x0002; + public static final int ACC_PROTECTED = 0x0004; + public static final int ACC_STATIC = 0x0008; + public static final int ACC_FINAL = 0x0010; + public static final int ACC_SYNCHRONIZED = 0x0020; + public static final int ACC_SUPER = 0x0020; + public static final int ACC_BRIDGE = 0x0040; + public static final int ACC_VARARGS = 0x0080; + public static final int ACC_NATIVE = 0x0100; + public static final int ACC_INTERFACE = 0x0200; + public static final int ACC_ABSTRACT = 0x0400; + public static final int ACC_STRICTFP = 0x0800; + public static final int ACC_SYNTHETIC = 0x1000; + public static final int ACC_ANNOTATION = 0x2000; + public static final int ACC_ENUM = 0x4000; + public static final int ACC_MANDATED = 0x8000; + + public static String getAccessFlagsClass(int access) { + String s = ""; + if ((ACC_PUBLIC & access) != 0) { + s += "public "; + } + if ((ACC_FINAL & access) != 0) { + s += "final "; + } + if ((ACC_ABSTRACT & access) != 0 && (ACC_ANNOTATION & access) == 0 && (ACC_ENUM & access) == 0 + && (ACC_INTERFACE & access) == 0) { + s += "abstract "; + } + if ((ACC_SYNTHETIC & access) != 0) { + s += "synthetic "; + } + if ((ACC_ANNOTATION & access) != 0) { + s += "@interface "; + } else if ((ACC_INTERFACE & access) != 0) { + s += "interface "; + } else if ((ACC_ENUM & access) != 0) { + s += "enum "; + } else { + s += "class "; + } + return s; + } + + public static String getAccessFlagsFull(int access) { + String s = ""; + if ((ACC_PUBLIC & access) != 0) { + s += "public "; + } + if ((ACC_PRIVATE & access) != 0) { + s += "private "; + } + if ((ACC_PROTECTED & access) != 0) { + s += "protected "; + } + if ((ACC_STATIC & access) != 0) { + s += "static "; + } + if ((ACC_FINAL & access) != 0) { + s += "final "; + } + if ((ACC_SYNCHRONIZED & access) != 0) { + s += "synchronized "; + } + if ((ACC_VARARGS & access) != 0) { + s += "varargs "; + } + if ((ACC_NATIVE & access) != 0) { + s += "native "; + } + if ((ACC_INTERFACE & access) != 0) { + s += "interface "; + } + if ((ACC_ABSTRACT & access) != 0) { + s += "abstract "; + } + if ((ACC_STRICTFP & access) != 0) { + s += "strictfp "; + } + if ((ACC_SYNTHETIC & access) != 0) { + s += "synthetic "; + } + if ((ACC_BRIDGE & access) != 0) { + s += "bridge "; + } + if ((ACC_ANNOTATION & access) != 0) { + s += "annotation "; + } + if ((ACC_ENUM & access) != 0) { + s += "enum "; + } + if ((ACC_MANDATED & access) != 0) { + s += "mandated "; + } + return s; + } + + /** + * @return { JavaType, Import } + */ + public static String[] reverseDescField(String desc) { + String type; + String importName = null; + int arrSize = 0; + while (desc.startsWith("[")) { + arrSize++; + desc = desc.substring(1); + } + switch (desc.substring(0, 1)) { + case "B": + type = "byte"; + break; + case "Z": + type = "boolean"; + break; + case "I": + type = "int"; + break; + case "J": + type = "long"; + break; + case "C": + type = "char"; + break; + case "D": + type = "double"; + break; + case "F": + type = "float"; + break; + case "S": + type = "short"; + break; + case "V": + type = "void"; + break; + case "L": { + importName = desc.substring(1, desc.length() - 1).replace("/", "."); + if (!importName.contains(".")) { + type = importName; + importName = null; + } else { + type = importName.split("\\.")[importName.split("\\.").length - 1]; + } + break; + } + default: + type = "ERROR"; + break; + } + for (int i = 0; i < arrSize; i++) { + type += "[]"; + } + return new String[] { type, importName }; + } + + /** + * @return { ReturnValue, ParameterValues, Imports } getrennt durch ";" + */ + public static String[] reverseDescMethod(String desc) { + HashSet imports = new HashSet<>(); + String[] returnType = reverseDescField(desc.split("\\)")[1]); + if (returnType[1] != null) { + imports.add(returnType[1]); + } + ArrayList parameters = new ArrayList<>(); + String parameterType = desc.split("\\)")[0].substring(1); + + while (!parameterType.isEmpty()) { + String type = ""; + int arrSize = 0; + while (parameterType.startsWith("[")) { + arrSize++; + parameterType = parameterType.substring(1); + } + + switch (parameterType.substring(0, 1)) { + case "B": + type = "byte"; + parameterType = parameterType.substring(1); + break; + case "Z": + type = "boolean"; + parameterType = parameterType.substring(1); + break; + case "I": + type = "int"; + parameterType = parameterType.substring(1); + break; + case "J": + type = "long"; + parameterType = parameterType.substring(1); + break; + case "C": + type = "char"; + parameterType = parameterType.substring(1); + break; + case "D": + type = "double"; + parameterType = parameterType.substring(1); + break; + case "F": + type = "float"; + parameterType = parameterType.substring(1); + break; + case "S": + type = "short"; + parameterType = parameterType.substring(1); + break; + case "V": + type = "void"; + parameterType = parameterType.substring(1); + break; + case "L": { + String rofl = ""; + while (!parameterType.startsWith(";")) { + rofl += parameterType.substring(0, 1); + parameterType = parameterType.substring(1); + } + rofl += parameterType.substring(0, 1); + parameterType = parameterType.substring(1); + String importName = rofl.substring(1, rofl.length() - 1).replace("/", "."); + if (!importName.contains(".")) { + type = importName; + importName = null; + } else { + type = importName.split("\\.")[importName.split("\\.").length - 1]; + } + if (importName != null) { + imports.add(importName); + } + break; + } + default: + type = "ERROR"; + break; + } + + for (int i = 0; i < arrSize; i++) { + type += "[]"; + } + parameters.add(type); + } + + String importStr = ""; + for (String s : imports) { + if (importStr.isEmpty()) { + importStr += s; + } else { + importStr += ";" + s; + } + } + String parameterStr = ""; + for (String s : parameters) { + if (parameterStr.isEmpty()) { + parameterStr += s; + } else { + parameterStr += ";" + s; + } + } + return new String[] { returnType[0], parameterStr, importStr }; + } + + public static int countMethodParams(String desc) { + int count = 0; + String parameterType = desc.split("\\)")[0].substring(1); + + while (!parameterType.isEmpty()) { + while (parameterType.startsWith("[")) { + parameterType = parameterType.substring(1); + } + + switch (parameterType.substring(0, 1)) { + case "B": + case "Z": + case "I": + case "J": + case "C": + case "D": + case "F": + case "S": + case "V": + parameterType = parameterType.substring(1); + count++; + break; + case "L": { + while (!parameterType.startsWith(";")) { + parameterType = parameterType.substring(1); + } + parameterType = parameterType.substring(1); + count++; + break; + } + default: + break; + } + } + return count; + } + + public static String getDecompiledValue(Object o, String desc) { + switch (o.getClass().getName()) { + case "java.lang.String": { + return "\"" + StringEscapeUtils.escapeJava((String) o).replace("\n", "\\n").replace("\r", "\\r") + "\""; + } + case "java.lang.Integer": { + if (desc.equals("Z")) { + return ((int) o) == 0 ? "false" : "true"; + } + return o.toString(); + } + case "java.lang.Long": { + return o.toString() + "l"; + } + case "java.lang.Float": { + return o.toString() + "f"; + } + // case "java.util.ArrayList": { + // ArrayList list = (ArrayList) o; + // for (Object obj : list) { + // System.out.println(obj.getClass().getName()); + // } + // } + + default: + return o.toString(); + } + } + + public static Object getCastedValue(String o, String className) { + switch (className) { + case "java/lang/String": { + return o; + } + case "java/lang/Integer": { + return Integer.parseInt(o); + } + case "java/lang/Long": { + return Long.parseLong(o); + } + case "java/lang/Float": { + return Float.parseFloat(o); + } + case "java/lang/Double": { + return Double.parseDouble(o); + } + case "java/lang/Boolean": { + return Boolean.parseBoolean(o); + } + case "java/lang/Short": { + return Short.parseShort(o); + } + case "java/lang/Byte": { + return Byte.parseByte(o); + } + default: + return o.toString(); + } + } + + public static String getSimpleDesc(String type) { + String desc = ""; + + for (int i = 0; i < countArraySize(type); i++) { + desc += "["; + } + + type = type.replace("[]", ""); + + if (VARS.containsKey(type)) { + desc += VARS.get(type); + } else { + desc += "L" + type + ";"; + } + + return desc; + } + + private static int countArraySize(String type) { + int size = 0; + + for (byte b : type.getBytes()) { + if (b == ']') { + size++; + } + } + + return size; + } + + public static final HashMap VARS = new HashMap<>(); + + static { + VARS.put("byte", "B"); + VARS.put("char", "C"); + VARS.put("double", "D"); + VARS.put("float", "F"); + VARS.put("int", "I"); + VARS.put("long", "J"); + VARS.put("short", "S"); + VARS.put("boolean", "Z"); + VARS.put("void", "V"); + } + + public static int externalArrayTypeDimensionCount(String s) { + int i = 0; + int j = "[]".length(); + int k = s.length() - j; + while (s.regionMatches(k, "[]", 0, j)) { + i++; + k -= j; + } + return i; + } + + public static String internalMethodDescriptor(String returnType, String methodArgs) { + returnType = returnType.replace(".", "/"); + methodArgs = methodArgs.replace(".", "/"); + StringBuffer buf = new StringBuffer(); + buf.append('('); + ExternalTypeEnumeration type = new ExternalTypeEnumeration(methodArgs); + while (type.hasMoreTypes()) { + buf.append(getSimpleDesc(type.nextType())); + } + buf.append(')'); + buf.append(getSimpleDesc(returnType)); + + return buf.toString(); + } +} diff --git a/src/me/ByteEdit/main/CustomBufferedReader.java b/src/me/ByteEdit/main/CustomBufferedReader.java new file mode 100644 index 0000000..883e86e --- /dev/null +++ b/src/me/ByteEdit/main/CustomBufferedReader.java @@ -0,0 +1,21 @@ +package me.ByteEdit.main; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; + +public class CustomBufferedReader extends BufferedReader { + + public int currentLine = 0; + + public CustomBufferedReader(Reader in) { + super(in); + } + + @Override + public String readLine() throws IOException { + currentLine++; + return super.readLine(); + } + +} \ No newline at end of file diff --git a/src/me/ByteEdit/main/Disassembler.java b/src/me/ByteEdit/main/Disassembler.java new file mode 100644 index 0000000..d4966ba --- /dev/null +++ b/src/me/ByteEdit/main/Disassembler.java @@ -0,0 +1,522 @@ +package me.ByteEdit.main; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import org.objectweb.asm.Handle; +import org.objectweb.asm.Label; +import org.objectweb.asm.Type; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.AnnotationNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.FrameNode; +import org.objectweb.asm.tree.IincInsnNode; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.IntInsnNode; +import org.objectweb.asm.tree.InvokeDynamicInsnNode; +import org.objectweb.asm.tree.JumpInsnNode; +import org.objectweb.asm.tree.LabelNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.LineNumberNode; +import org.objectweb.asm.tree.LocalVariableNode; +import org.objectweb.asm.tree.LookupSwitchInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.MultiANewArrayInsnNode; +import org.objectweb.asm.tree.TableSwitchInsnNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.VarInsnNode; + +public class Disassembler { + + public static String disassemble(ClassNode classNode) { + if (classNode == null) { + return "ClassNode is null! This is not a valid java class file!"; + } + try { + HashMap> classLabelMap; + if ((classLabelMap = Main.labels.get(classNode.name)) == null) { + classLabelMap = new HashMap>(); + Main.labels.put(classNode.name, classLabelMap); + } else { + classLabelMap.clear(); + } + String s = ""; + s += "// #Annotations\n"; + if (classNode.visibleAnnotations != null && !classNode.visibleAnnotations.isEmpty()) { + for (AnnotationNode annotationNode : classNode.visibleAnnotations) { + s += "@" + annotationNode.desc; + if (annotationNode.values != null && !annotationNode.values.isEmpty()) { + s += " ("; + boolean valBefore = true; + for (Object o : annotationNode.values) { + if (valBefore) { + s += o + " = ["; + valBefore = false; + continue; + } else { + if (o instanceof String[]) { + String[] arr = (String[]) o; + boolean w8ing = false; + for (String rofl : arr) { + if (!w8ing) { + s += rofl + "/"; + w8ing = true; + } else { + s += rofl + "]"; + } + } + s += ", "; + } else if (o instanceof List) { + List list = (List) o; + s += "{ "; + for (Object obj : list) { + String[] arr = (String[]) obj; + boolean w8ing = false; + for (String rofl : arr) { + if (!w8ing) { + s += rofl + "/"; + w8ing = true; + } else { + s += rofl; + } + } + s += ", "; + } + s = s.substring(0, s.length() - 2); + s += " }]"; + } else { + s += "(" + o.getClass().getName().replace(".", "/") + ") " + o + "], "; + } + valBefore = true; + } + } + if (s.endsWith(", ")) + s = s.substring(0, s.length() - 2); + s += ")"; + } + s += "\n"; + } + } + s += "// #Class v:" + classNode.version + "\n"; + s += ClassUtil.getAccessFlagsClass(classNode.access) + classNode.name + " "; + s += "extends " + classNode.superName + " "; + if (classNode.interfaces != null && !classNode.interfaces.isEmpty()) { + String interfaceStr = ""; + for (String interfc : classNode.interfaces) { + if (interfaceStr.isEmpty()) { + interfaceStr += interfc; + } else { + interfaceStr += ", " + interfc; + } + } + if (!interfaceStr.isEmpty()) + s += "implements " + interfaceStr + " "; + } + s += "{\n// #SourceFile: " + (classNode.sourceFile == null ? "null" : classNode.sourceFile) + + "\n\n// #Fields\n"; + + for (FieldNode fn : classNode.fields) { + if (fn.visibleAnnotations != null && !fn.visibleAnnotations.isEmpty()) { + for (AnnotationNode annotationNode : fn.visibleAnnotations) { + s += "\t@" + annotationNode.desc; + if (annotationNode.values != null && !annotationNode.values.isEmpty()) { + s += " ("; + boolean valBefore = true; + for (Object o : annotationNode.values) { + if (valBefore) { + s += o + " = ["; + valBefore = false; + continue; + } else { + if (o instanceof String[]) { + String[] arr = (String[]) o; + boolean w8ing = false; + for (String rofl : arr) { + if (!w8ing) { + s += rofl + "/"; + w8ing = true; + } else { + s += rofl + "]"; + } + } + s += ", "; + } else if (o instanceof List) { + List list = (List) o; + s += "{ "; + for (Object obj : list) { + String[] arr = (String[]) obj; + boolean w8ing = false; + for (String rofl : arr) { + if (!w8ing) { + s += rofl + "/"; + w8ing = true; + } else { + s += rofl; + } + } + s += ", "; + } + s = s.substring(0, s.length() - 2); + s += " }]"; + } else { + s += "(" + o.getClass().getName().replace(".", "/") + ") " + o + "], "; + } + valBefore = true; + } + } + if (s.endsWith(", ")) + s = s.substring(0, s.length() - 2); + s += ")"; + } + s += "\n"; + } + } + s += "\t" + ClassUtil.getAccessFlagsFull(fn.access) + fn.desc + " " + fn.name; + if (fn.value != null) { + s += " = " + ClassUtil.getDecompiledValue(fn.value, fn.desc); + } + s += "\n"; + } + + s += "\n// #Methods\n"; + + for (MethodNode mn : classNode.methods) { + try { + HashMap methodLabelMap; + if ((methodLabelMap = classLabelMap.get(mn.name + "|" + mn.desc)) == null) { + methodLabelMap = new HashMap(); + classLabelMap.put(mn.name + "|" + mn.desc, methodLabelMap); + } + s += "\t// #Max: l:" + mn.maxLocals + " s:" + mn.maxStack + "\n"; + + String[] dis = disassembleMethod(classNode.name, mn, methodLabelMap); + s += dis[1]; + + if (mn.visibleAnnotations != null && !mn.visibleAnnotations.isEmpty()) { + for (AnnotationNode annotationNode : mn.visibleAnnotations) { + s += "\t@" + annotationNode.desc; + if (annotationNode.values != null && !annotationNode.values.isEmpty()) { + s += " ("; + boolean valBefore = true; + for (Object o : annotationNode.values) { + if (valBefore) { + s += o + " = ["; + valBefore = false; + continue; + } else { + if (o instanceof String[]) { + String[] arr = (String[]) o; + boolean w8ing = false; + for (String rofl : arr) { + if (!w8ing) { + s += rofl + "/"; + w8ing = true; + } else { + s += rofl + "]"; + } + } + s += ", "; + } else if (o instanceof List) { + List list = (List) o; + s += "{ "; + for (Object obj : list) { + String[] arr = (String[]) obj; + boolean w8ing = false; + for (String rofl : arr) { + if (!w8ing) { + s += rofl + "/"; + w8ing = true; + } else { + s += rofl; + } + } + s += ", "; + } + s = s.substring(0, s.length() - 2); + s += " }]"; + } else { + s += "(" + o.getClass().getName().replace(".", "/") + ") " + o + "], "; + } + valBefore = true; + } + } + if (s.endsWith(", ")) + s = s.substring(0, s.length() - 2); + s += ")"; + } + s += "\n"; + } + } + s += "\t" + ClassUtil.getAccessFlagsFull(mn.access) + mn.name + " " + mn.desc + " "; + if (mn.exceptions != null && !mn.exceptions.isEmpty()) { + String exceptionStr = ""; + for (String exc : mn.exceptions) { + if (exceptionStr.isEmpty()) { + exceptionStr += exc; + } else { + exceptionStr += ", " + exc; + } + } + if (!exceptionStr.isEmpty()) + s += "throws " + exceptionStr + " "; + } + s += "{\n"; + s += dis[0]; + s += "\t}\n\n"; + } catch (Exception e) { + s += "\t\t// Method couldn't be disassembled:\n\t\t// " + + e.getClass().getName() + ": " + e.getMessage() + "\n" + Arrays.toString(e.getStackTrace()) + .replace(", ", "\n\t\t// \tat ").replace("[", "\t\t// \tat ").replace("]", "") + + "\n\t}\n\n"; + } + } + + s += "}\n"; + return s; + } catch (Throwable e) { + return "Class couldn't be decompiled:\n" + e.getClass().getName() + ": " + e.getMessage() + "\n" + + Arrays.toString(e.getStackTrace()).replace(", ", "\n\tat ").replace("[", "\tat ").replace("]", "") + + "\n"; + } + } + + private static String[] disassembleMethod(String className, MethodNode mn, HashMap labels) { + String s = ""; + String localVarTable = "\t// #LocalVars:\n"; + for (AbstractInsnNode n : mn.instructions.toArray()) { + if (n instanceof LabelNode) { + labels.put(((LabelNode) n).getLabel(), labels.size() + 1); + } + } + if (mn.localVariables != null) + for (LocalVariableNode lvn : mn.localVariables) { + localVarTable += "\t// " + lvn.name + ": " + lvn.desc + " i:" + lvn.index + " s:" + + labels.get(lvn.start.getLabel()) + " e:" + labels.get(lvn.end.getLabel()) + "\n"; + } + for (AbstractInsnNode n : mn.instructions.toArray()) { + switch (n.getClass().getSimpleName()) { + case "FieldInsnNode": { + FieldInsnNode node = (FieldInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(node.getOpcode()) + " " + node.desc + " " + node.owner + "/" + + node.name + "\n"; + break; + } + case "LabelNode": { + LabelNode node = (LabelNode) n; + s += "\t\t// label " + labels.get(node.getLabel()) + "\n"; + break; + } + case "FrameNode": { + FrameNode node = (FrameNode) n; + s += "\t\t// frame " + node.type + " l:"; + ArrayList arr = new ArrayList<>(); + if (node.local != null) { + for (Object o : node.local) { + if (o == null) { + arr.add(null); + } else { + if (o instanceof String) { + arr.add((String) o); + } else { + arr.add("(" + o.getClass().getName().replace(".", "/") + ") " + o); + } + } + } + s += arr.toString(); + } else { + s += "null"; + } + arr.clear(); + s += " s:"; + if (node.stack != null) { + for (Object o : node.stack) { + if (o == null) { + arr.add(null); + } else { + if (o instanceof String) { + arr.add((String) o); + } else { + arr.add("(" + o.getClass().getName().replace(".", "/") + ") " + o); + } + } + } + s += arr.toString(); + } else { + s += "null"; + } + s += "\n"; + break; + } + case "LineNumberNode": { + LineNumberNode node = (LineNumberNode) n; + s += "\t\t// line " + node.line + " " + labels.get(node.start.getLabel()) + "\n"; + break; + } + case "InvokeDynamicInsnNode": { + InvokeDynamicInsnNode node = (InvokeDynamicInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(node.getOpcode()) + " [\n\t\t\tname: " + node.name + + "\n\t\t\tdesc: " + node.desc + "\n\t\t\tHandle: [\n\t\t\t\tname: " + node.bsm.getName() + + "\n\t\t\t\towner: " + node.bsm.getOwner() + "\n\t\t\t\tdesc: " + node.bsm.getDesc() + + "\n\t\t\t\tisInterface: " + node.bsm.isInterface() + "\n\t\t\t\ttag: " + node.bsm.getTag() + + "\n\t\t\t]\n\t\t\targs: [\n"; + for (Object l : node.bsmArgs) { + if (l.getClass().getName().equals("org.objectweb.asm.Type")) { + Type type = (Type) l; + int off = 0; + int len = 0; + char[] buf = null; + try { + Field f_off = Type.class.getDeclaredField("off"); + f_off.setAccessible(true); + off = f_off.getInt(type); + Field f_len = Type.class.getDeclaredField("len"); + f_len.setAccessible(true); + len = f_len.getInt(type); + Field f_buf = Type.class.getDeclaredField("buf"); + f_buf.setAccessible(true); + buf = (char[]) f_buf.get(type); + } catch (Exception e) { + } + s += "\t\t\t\tType: [\n\t\t\t\t\tsort: " + type.getSort() + "\n\t\t\t\t\toff: " + off + + "\n\t\t\t\t\tlen: " + len + "\n\t\t\t\t\tbuf: " + + ClassUtil.getDecompiledValue(new String(buf), ""); + s += "\n\t\t\t\t]\n"; + } else if (l.getClass().getName().equals("org.objectweb.asm.Handle")) { + Handle h = (Handle) l; + s += "\t\t\t\tHandle: [\n\t\t\t\t\tname: " + h.getName() + "\n\t\t\t\t\towner: " + h.getOwner() + + "\n\t\t\t\t\tdesc: " + h.getDesc() + "\n\t\t\t\t\tisInterface: " + h.isInterface() + + "\n\t\t\t\t\ttag: " + h.getTag(); + s += "\n\t\t\t\t]\n"; + } else { + s += "\t\t\t\t" + ClassUtil.getDecompiledValue(l, "") + "\n"; + } + } + s += "\t\t\t]\n\t\t]\n"; + break; + } + case "MethodInsnNode": { + MethodInsnNode node = (MethodInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(node.getOpcode()) + " " + node.desc + " " + node.owner + "/" + + node.name + (node.itf ? " true" : "") + "\n"; + break; + } + case "TypeInsnNode": { + TypeInsnNode node = (TypeInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " " + node.desc + "\n"; + break; + } + case "MultiANewArrayInsnNode": { + MultiANewArrayInsnNode node = (MultiANewArrayInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(node.getOpcode()) + " " + node.desc + " " + node.dims + "\n"; + break; + } + case "LdcInsnNode": { + LdcInsnNode node = (LdcInsnNode) n; + switch (node.cst.getClass().getSimpleName()) { + case "String": + case "Double": + case "Integer": + case "Float": + case "Long": { + s += "\t\t" + OpcodesReverse.reverseOpcode(node.getOpcode()) + " " + + ClassUtil.getDecompiledValue(node.cst, "") + "\n"; + break; + } + case "Type": { + Type type = (Type) node.cst; + int off = 0; + int len = 0; + char[] buf = null; + try { + Field f_off = Type.class.getDeclaredField("off"); + f_off.setAccessible(true); + off = f_off.getInt(type); + Field f_len = Type.class.getDeclaredField("len"); + f_len.setAccessible(true); + len = f_len.getInt(type); + Field f_buf = Type.class.getDeclaredField("buf"); + f_buf.setAccessible(true); + buf = (char[]) f_buf.get(type); + } catch (Exception e) { + } + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " Type: [\n\t\t\tsort: " + + type.getSort() + "\n\t\t\toff: " + off + "\n\t\t\tlen: " + len + "\n\t\t\tbuf: " + + ClassUtil.getDecompiledValue(new String(buf), ""); + s += "\n\t\t]\n"; + break; + } + default: { + s += "\t\tUNRESOLVED TYPE! " + OpcodesReverse.reverseOpcode(node.getOpcode()) + " " + + node.cst.getClass().getName().replace(".", "/") + " " + node.cst + "\n"; + break; + } + } + break; + } + case "VarInsnNode": { + VarInsnNode node = (VarInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " " + node.var + "\n"; + break; + } + case "InsnNode": { + InsnNode node = (InsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + "\n"; + break; + } + case "IntInsnNode": { + IntInsnNode node = (IntInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " " + node.operand + "\n"; + break; + } + case "JumpInsnNode": { + JumpInsnNode node = (JumpInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " " + labels.get(node.label.getLabel()) + + "\n"; + break; + } + case "TableSwitchInsnNode": { + TableSwitchInsnNode node = (TableSwitchInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " [\n\t\t\tmin: " + node.min + + "\n\t\t\tmax: " + node.max + "\n\t\t\tdefault: " + labels.get(node.dflt.getLabel()) + + "\n\t\t\tlabels: [\n"; + for (LabelNode l : node.labels) { + s += "\t\t\t\t" + labels.get(l.getLabel()) + "\n"; + } + s += "\t\t\t]\n\t\t]\n"; + break; + } + case "LookupSwitchInsnNode": { + LookupSwitchInsnNode node = (LookupSwitchInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " [\n\t\t\tdefault: " + + labels.get(node.dflt.getLabel()) + "\n\t\t\tkeys: [\n"; + for (Integer l : node.keys) { + s += "\t\t\t\t" + l + "\n"; + } + s += "\t\t\t]" + "\n\t\t\tlabels: [\n"; + for (LabelNode l : node.labels) { + s += "\t\t\t\t" + labels.get(l.getLabel()) + "\n"; + } + s += "\t\t\t]\n\t\t]\n"; + break; + } + case "IincInsnNode": { + IincInsnNode node = (IincInsnNode) n; + s += "\t\t" + OpcodesReverse.reverseOpcode(n.getOpcode()) + " " + node.var + " -> " + node.incr + "\n"; + break; + } + default: + s += "\t\tNOT HANDLED! " + OpcodesReverse.reverseOpcode(n.getOpcode()) + " " + + n.getClass().getSimpleName() + "\n"; + break; + } + } + return new String[] { s, localVarTable }; + } + +} \ No newline at end of file diff --git a/src/me/ByteEdit/main/ExternalTypeEnumeration.java b/src/me/ByteEdit/main/ExternalTypeEnumeration.java new file mode 100644 index 0000000..70d1cc3 --- /dev/null +++ b/src/me/ByteEdit/main/ExternalTypeEnumeration.java @@ -0,0 +1,48 @@ +package me.ByteEdit.main; + +public class ExternalTypeEnumeration { + private String descriptor; + private int index; + + public ExternalTypeEnumeration(String paramString) { + setDescriptor(paramString); + } + + ExternalTypeEnumeration() { + } + + void setDescriptor(String paramString) { + this.descriptor = paramString; + + reset(); + } + + public void reset() { + this.index = (this.descriptor.indexOf('(') + 1); + if (this.index < 1) { + throw new IllegalArgumentException("Missing opening parenthesis in descriptor [" + this.descriptor + "]"); + } + } + + public boolean hasMoreTypes() { + return this.index < this.descriptor.length() - 1; + } + + public String nextType() { + int i = this.index; + + this.index = this.descriptor.indexOf(',', i); + if (this.index < 0) { + this.index = this.descriptor.indexOf(')', i); + if (this.index < 0) { + throw new IllegalArgumentException( + "Missing closing parenthesis in descriptor [" + this.descriptor + "]"); + } + } + return this.descriptor.substring(i, this.index++).trim(); + } + + public String methodName() { + return this.descriptor.substring(0, this.descriptor.indexOf('(')).trim(); + } +} diff --git a/src/me/ByteEdit/main/JavaAssemblyTokenMaker.java b/src/me/ByteEdit/main/JavaAssemblyTokenMaker.java new file mode 100644 index 0000000..921c59f --- /dev/null +++ b/src/me/ByteEdit/main/JavaAssemblyTokenMaker.java @@ -0,0 +1,3256 @@ +/* The following code was generated by JFlex 1.4.1 on 11/21/13 7:23 PM */ + +/* + * 11/13/2004 + * + * JavaTokenMaker.java - Scanner for the Java programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package me.ByteEdit.main; + +import java.io.IOException; +import java.io.Reader; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexCTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + +/** + * Scanner for the Java programming language. + *

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost completely + * removed to be competitive with the handwritten lexers (subclasses of + * AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). We can + * achieve this because RText always scans exactly 1 line of tokens at a time, + * and hands the scanner this line as an array of characters (a Segment really). + * Since tokens contain pointers to char arrays instead of Strings holding their + * contents, there is no need for allocating new memory for Strings. + *

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified. + *

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated JavaTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. You + * should hand-delete the second of each definition (the ones generated by the + * lexer), as these generated methods modify the input buffer, which we'll never + * have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT be + * initialized. This is a needless memory allocation for us since we will be + * pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would with + * any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + * + */ + +public class JavaAssemblyTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 3; + public static final int DOCCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = "\11\0\1\23\1\11\1\0\1\23\1\20\22\0\1\23\1\53\1\16" + + "\1\21\1\22\1\53\1\55\1\10\2\77\1\25\1\46\1\45\1\34" + "\1\35\1\24\1\4\1\5\2\17\1\122\1\7\1\121\1\7\2\3" + + "\1\56\1\45\1\47\1\50\1\52\1\54\1\76\1\101\1\27\1\6" + + "\1\67\1\33\1\32\1\116\1\107\1\104\1\124\1\1\1\26\1\111" + + "\1\112\1\113\1\115\1\120\1\74\1\102\1\105\1\106\1\110\1\117" + + "\1\31\1\1\1\123\1\77\1\12\1\77\1\51\1\2\1\0\1\41" + "\1\30\1\63\1\61\1\40\1\15\1\72\1\57\1\65\1\114\1\75" + + "\1\42\1\66\1\14\1\60\1\62\1\103\1\37\1\43\1\36\1\13" + + "\1\71\1\70\1\64\1\73\1\100\1\125\1\51\1\44\1\54\uff81\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 = "\4\0\1\1\1\2\2\3\1\2\1\4\1\5\2\2" + + "\1\6\1\1\1\7\2\10\5\2\1\10\7\2\1\11" + "\1\2\5\10\11\2\1\12\16\2\1\13\1\14\5\13" + + "\1\15\10\13\1\16\3\13\1\1\2\17\1\20\1\3" + "\1\17\1\20\2\17\1\21\2\17\5\2\1\4\1\22" + + "\1\0\1\4\7\2\2\6\1\23\1\24\1\25\41\2" + "\1\0\1\10\1\2\1\26\10\2\1\26\14\2\1\12" + + "\57\2\2\0\1\27\4\0\1\30\2\0\1\31\22\0" + "\1\1\1\3\1\20\1\0\2\21\1\3\1\21\10\2" + + "\1\4\1\32\2\4\1\22\1\4\5\2\1\6\1\33" + "\1\6\1\34\62\2\1\35\17\2\1\1\10\2\1\36" + + "\45\2\1\36\24\2\37\0\1\1\2\17\12\2\1\4" + "\3\2\1\6\1\37\1\36\3\2\1\36\5\2\1\36" + + "\2\2\1\35\4\2\2\36\6\2\1\40\37\2\1\1" + "\56\2\1\0\31\2\2\0\1\41\2\0\1\42\10\0" + + "\1\43\17\0\1\44\1\1\2\2\1\36\11\2\1\4" + "\1\26\1\6\37\2\1\26\27\2\1\1\11\2\1\36" + + "\31\2\1\36\11\2\1\0\31\2\35\0\1\1\15\2" + "\1\4\1\2\1\6\1\36\5\2\1\36\27\2\1\45" + + "\16\2\1\36\1\1\11\2\1\36\30\2\1\36\13\2" + "\1\0\2\2\1\36\10\2\1\36\12\2\22\0\15\2" + + "\1\0\4\2\1\0\34\2\1\36\2\2\1\1\43\2" + "\1\0\14\2\1\0\23\2\1\36\6\2\2\0\1\43" + + "\6\0\1\36\12\2\4\0\4\2\2\0\75\2\2\0" + "\11\2\1\0\20\2\1\36\12\2\12\0\4\2\1\36" + + "\4\2\4\0\3\2\1\0\3\2\1\36\10\2\1\36" + "\6\2\1\36\45\2\2\0\10\2\1\36\30\2\5\0" + + "\4\2\1\0\2\2\1\36\4\0\1\2\1\0\3\2" + "\1\0\53\2\2\0\33\2\5\0\3\2\2\0\1\2" + + "\4\0\3\2\1\0\1\36\11\2\1\36\10\2\1\36" + "\5\2\1\36\12\2\2\0\15\2\1\36\6\2\2\0" + + "\2\2\2\0\1\2\4\0\3\2\1\0\5\2\1\36" + "\3\2\1\0\1\2\1\36\2\2\1\36\2\2\1\0" + + "\1\36\15\2\1\0\14\2\1\36\3\2\1\36\5\2" + "\2\0\1\2\3\0\2\2\1\0\2\2\1\36\6\2" + + "\1\0\2\2\2\0\12\2\1\0\23\2\2\0\1\2" + "\2\0\2\2\1\0\4\2\1\36\1\2\1\0\2\2" + + "\2\0\12\2\1\0\15\2\1\36\2\2\2\0\1\2" + "\2\0\2\2\1\0\3\2\1\0\1\2\1\0\1\2" + + "\5\0\11\2\1\0\12\2\1\0\2\2\1\0\1\2" + "\2\0\1\2\1\0\2\2\1\0\1\2\5\0\10\2" + + "\1\0\6\2\1\0\1\2\3\0\1\2\1\0\1\2" + "\1\0\1\2\5\0\5\2\1\0\3\2\1\36\1\2" + + "\1\0\1\36\4\0\1\2\1\0\1\2\1\0\1\2" + "\4\0\3\2\1\0\3\2\1\0\1\36\4\0\1\2" + + "\1\0\1\2\4\0\2\2\1\0\2\2\6\0\1\2" + "\1\0\1\2\4\0\1\2\7\0\1\2\1\0\1\2" + "\30\0\1\36\37\0"; + + private static int[] zzUnpackAction() { + int[] result = new int[1885]; + 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; + } + + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\126\0\254\0\u0102\0\u0158\0\u01ae\0\u0204\0\u025a" + + "\0\u02b0\0\u0306\0\u035c\0\u03b2\0\u0408\0\u045e\0\u035c\0\u04b4" + + "\0\u050a\0\u0560\0\u05b6\0\u060c\0\u0662\0\u06b8\0\u070e\0\u0764" + + "\0\u07ba\0\u0810\0\u0866\0\u08bc\0\u0912\0\u0968\0\u09be\0\u035c" + + "\0\u035c\0\u0a14\0\u0a6a\0\u0ac0\0\u035c\0\u0b16\0\u0b6c\0\u0bc2" + + "\0\u0c18\0\u0c6e\0\u0cc4\0\u0d1a\0\u0d70\0\u0dc6\0\u0e1c\0\u0e72" + + "\0\u0ec8\0\u0f1e\0\u0f74\0\u0fca\0\u1020\0\u1076\0\u10cc\0\u1122" + + "\0\u1178\0\u11ce\0\u1224\0\u127a\0\u12d0\0\u1326\0\u137c\0\u035c" + + "\0\u13d2\0\u1428\0\u147e\0\u14d4\0\u152a\0\u035c\0\u1580\0\u15d6" + + "\0\u162c\0\u1682\0\u16d8\0\u172e\0\u1784\0\u17da\0\u035c\0\u1830" + + "\0\u1886\0\u18dc\0\u1932\0\u1988\0\u19de\0\u1988\0\u1988\0\u1a34" + + "\0\u1a8a\0\u1ae0\0\u1b36\0\u1b8c\0\u1be2\0\u1c38\0\u1c8e\0\u1ce4" + + "\0\u1d3a\0\u1d90\0\u1de6\0\u1e3c\0\u035c\0\u1e92\0\u1ee8\0\u1f3e" + + "\0\u1f94\0\u1fea\0\u2040\0\u2096\0\u20ec\0\u2142\0\u2198\0\u21ee" + + "\0\u035c\0\u035c\0\u2244\0\u229a\0\u22f0\0\u2346\0\u239c\0\u23f2" + + "\0\u2448\0\u249e\0\u24f4\0\u254a\0\u25a0\0\u25f6\0\u264c\0\u26a2" + + "\0\u26f8\0\u274e\0\u27a4\0\u27fa\0\u2850\0\u28a6\0\u28fc\0\u2952" + + "\0\u29a8\0\u29fe\0\u2a54\0\u2aaa\0\u2b00\0\u2b56\0\u2bac\0\u2c02" + + "\0\u2c58\0\u2cae\0\u2d04\0\u2d5a\0\u0560\0\u2db0\0\u2e06\0\u2e5c" + + "\0\u2eb2\0\u2f08\0\u2f5e\0\u2fb4\0\u300a\0\u3060\0\u30b6\0\u310c" + + "\0\u01ae\0\u3162\0\u31b8\0\u320e\0\u3264\0\u32ba\0\u3310\0\u3366" + + "\0\u33bc\0\u3412\0\u3468\0\u34be\0\u3514\0\u356a\0\u35c0\0\u3616" + + "\0\u366c\0\u36c2\0\u3718\0\u376e\0\u37c4\0\u381a\0\u3870\0\u38c6" + + "\0\u391c\0\u3972\0\u39c8\0\u3a1e\0\u3a74\0\u3aca\0\u3b20\0\u3b76" + + "\0\u3bcc\0\u3c22\0\u3c78\0\u3cce\0\u3d24\0\u3d7a\0\u3dd0\0\u3e26" + + "\0\u3e7c\0\u3ed2\0\u3f28\0\u3f7e\0\u3fd4\0\u402a\0\u4080\0\u40d6" + + "\0\u412c\0\u4182\0\u41d8\0\u422e\0\u4284\0\u42da\0\u4330\0\u4386" + + "\0\u43dc\0\u4432\0\u4488\0\u44de\0\u4534\0\u458a\0\u45e0\0\u035c" + + "\0\u4636\0\u468c\0\u46e2\0\u4738\0\u035c\0\u478e\0\u47e4\0\u035c" + + "\0\u483a\0\u4890\0\u48e6\0\u493c\0\u4992\0\u49e8\0\u4a3e\0\u4a94" + + "\0\u4aea\0\u4b40\0\u4b96\0\u4bec\0\u4c42\0\u4c98\0\u4cee\0\u4d44" + + "\0\u4d9a\0\u4df0\0\u4e46\0\u4e9c\0\u4ef2\0\u4f48\0\u4f9e\0\u1988" + + "\0\u4ff4\0\u504a\0\u50a0\0\u50f6\0\u514c\0\u51a2\0\u51f8\0\u524e" + + "\0\u52a4\0\u52fa\0\u5350\0\u035c\0\u53a6\0\u53fc\0\u1e92\0\u5452" + + "\0\u54a8\0\u54fe\0\u5554\0\u55aa\0\u5600\0\u5656\0\u035c\0\u56ac" + + "\0\u5702\0\u5758\0\u57ae\0\u5804\0\u585a\0\u58b0\0\u5906\0\u595c" + + "\0\u59b2\0\u5a08\0\u5a5e\0\u5ab4\0\u5b0a\0\u5b60\0\u5bb6\0\u5c0c" + + "\0\u5c62\0\u5cb8\0\u5d0e\0\u5d64\0\u5dba\0\u5e10\0\u5e66\0\u5ebc" + + "\0\u5f12\0\u5f68\0\u5fbe\0\u6014\0\u606a\0\u60c0\0\u6116\0\u616c" + + "\0\u61c2\0\u6218\0\u626e\0\u62c4\0\u631a\0\u6370\0\u63c6\0\u641c" + + "\0\u6472\0\u64c8\0\u651e\0\u6574\0\u65ca\0\u6620\0\u6676\0\u66cc" + + "\0\u6722\0\u6778\0\u67ce\0\u6824\0\u687a\0\u68d0\0\u6926\0\u697c" + + "\0\u69d2\0\u6a28\0\u6a7e\0\u6ad4\0\u6b2a\0\u6b80\0\u6bd6\0\u6c2c" + + "\0\u6c82\0\u6cd8\0\u6d2e\0\u6d84\0\u6dda\0\u6e30\0\u6e86\0\u6edc" + + "\0\u6f32\0\u6f88\0\u6fde\0\u7034\0\u01ae\0\u708a\0\u70e0\0\u7136" + + "\0\u718c\0\u71e2\0\u7238\0\u728e\0\u72e4\0\u733a\0\u7390\0\u73e6" + + "\0\u743c\0\u7492\0\u74e8\0\u753e\0\u7594\0\u75ea\0\u7640\0\u7696" + + "\0\u76ec\0\u7742\0\u7798\0\u77ee\0\u7844\0\u789a\0\u78f0\0\u7946" + + "\0\u799c\0\u79f2\0\u7a48\0\u7a9e\0\u7af4\0\u7b4a\0\u7ba0\0\u7bf6" + + "\0\u7c4c\0\u7ca2\0\u7cf8\0\u7d4e\0\u7da4\0\u7dfa\0\u7e50\0\u7ea6" + + "\0\u7efc\0\u7f52\0\u7fa8\0\u7ffe\0\u8054\0\u80aa\0\u8100\0\u8156" + + "\0\u81ac\0\u8202\0\u8258\0\u82ae\0\u8304\0\u835a\0\u83b0\0\u8406" + + "\0\u845c\0\u84b2\0\u8508\0\u855e\0\u85b4\0\u860a\0\u8660\0\u86b6" + + "\0\u870c\0\u8762\0\u87b8\0\u880e\0\u8864\0\u88ba\0\u8910\0\u8966" + + "\0\u89bc\0\u8a12\0\u8a68\0\u8abe\0\u8b14\0\u8b6a\0\u8bc0\0\u8c16" + + "\0\u8c6c\0\u8cc2\0\u8d18\0\u8d6e\0\u8dc4\0\u8e1a\0\u8e70\0\u4ff4" + + "\0\u8ec6\0\u8f1c\0\u8f72\0\u8fc8\0\u901e\0\u9074\0\u90ca\0\u9120" + + "\0\u9176\0\u91cc\0\u9222\0\u9278\0\u92ce\0\u9324\0\u937a\0\u93d0" + + "\0\u035c\0\u9426\0\u947c\0\u94d2\0\u9528\0\u957e\0\u95d4\0\u962a" + + "\0\u9680\0\u96d6\0\u972c\0\u9782\0\u97d8\0\u982e\0\u01ae\0\u9884" + + "\0\u98da\0\u9930\0\u9986\0\u99dc\0\u9a32\0\u9a88\0\u9ade\0\u9b34" + + "\0\u9b8a\0\u9be0\0\u9c36\0\u01ae\0\u9c8c\0\u9ce2\0\u9d38\0\u9d8e" + + "\0\u9de4\0\u9e3a\0\u9e90\0\u9ee6\0\u9f3c\0\u9f92\0\u9fe8\0\ua03e" + + "\0\ua094\0\ua0ea\0\ua140\0\ua196\0\ua1ec\0\ua242\0\ua298\0\ua2ee" + + "\0\ua344\0\ua39a\0\ua3f0\0\ua446\0\ua49c\0\ua4f2\0\ua548\0\ua59e" + + "\0\ua5f4\0\ua64a\0\ua6a0\0\ua6f6\0\ua74c\0\ua7a2\0\ua7f8\0\ua84e" + + "\0\ua8a4\0\ua8fa\0\ua950\0\ua9a6\0\ua9fc\0\uaa52\0\uaaa8\0\uaafe" + + "\0\uab54\0\uabaa\0\uac00\0\uac56\0\uacac\0\uad02\0\uad58\0\uadae" + + "\0\uae04\0\uae5a\0\uaeb0\0\uaf06\0\uaf5c\0\uafb2\0\ub008\0\ub05e" + + "\0\ub0b4\0\ub10a\0\ub160\0\ub1b6\0\ub20c\0\ub262\0\ub2b8\0\ub30e" + + "\0\ub364\0\ub3ba\0\ub410\0\ub466\0\ub4bc\0\ub512\0\ub568\0\ub5be" + + "\0\ub614\0\ub66a\0\ub6c0\0\ub716\0\ub76c\0\ub7c2\0\ub818\0\ub86e" + + "\0\ub8c4\0\ub91a\0\ub970\0\ub9c6\0\uba1c\0\uba72\0\ubac8\0\ubb1e" + + "\0\ubb74\0\ubbca\0\ubc20\0\ubc76\0\ubccc\0\ubd22\0\ubd78\0\ubdce" + + "\0\ube24\0\ube7a\0\ubed0\0\ubf26\0\ubf7c\0\ubfd2\0\uc028\0\uc07e" + + "\0\uc0d4\0\uc12a\0\uc180\0\uc1d6\0\uc22c\0\uc282\0\uc2d8\0\uc32e" + + "\0\uc384\0\uc3da\0\u035c\0\uc430\0\uc486\0\uc4dc\0\uc532\0\uc588" + + "\0\uc5de\0\uc634\0\uc68a\0\uc6e0\0\uc736\0\uc78c\0\uc7e2\0\uc838" + + "\0\uc88e\0\uc8e4\0\uc93a\0\uc990\0\uc9e6\0\uca3c\0\uca92\0\ucae8" + + "\0\ucb3e\0\ucb94\0\ucbea\0\ucc40\0\ucc96\0\uccec\0\ucd42\0\ucd98" + + "\0\ucdee\0\uce44\0\uce9a\0\ucef0\0\ucf46\0\ucf9c\0\ucff2\0\ud048" + + "\0\ud09e\0\ud0f4\0\ud14a\0\ud1a0\0\ud1f6\0\ud24c\0\ud2a2\0\ud2f8" + + "\0\ud34e\0\ud3a4\0\ud3fa\0\ud450\0\ud4a6\0\ud4fc\0\ud552\0\ud5a8" + + "\0\ud5fe\0\ud654\0\ud6aa\0\ud700\0\ud756\0\ud7ac\0\ud802\0\ud858" + + "\0\ud8ae\0\ud904\0\u6014\0\ud95a\0\ud9b0\0\uda06\0\uda5c\0\udab2" + + "\0\udb08\0\udb5e\0\udbb4\0\udc0a\0\udc60\0\udcb6\0\udd0c\0\udd62" + + "\0\uddb8\0\ude0e\0\ude64\0\udeba\0\udf10\0\udf66\0\udfbc\0\ue012" + + "\0\ue068\0\ue0be\0\ue114\0\ue16a\0\ue1c0\0\ue216\0\ue26c\0\ue2c2" + + "\0\ue318\0\ue36e\0\ue3c4\0\ue41a\0\ue470\0\ue4c6\0\ue51c\0\ue572" + + "\0\ue5c8\0\ue61e\0\ue674\0\ue6ca\0\ue720\0\ue776\0\ue7cc\0\ue822" + + "\0\ue878\0\ue8ce\0\ue924\0\ue97a\0\ue9d0\0\uea26\0\uea7c\0\uead2" + + "\0\ueb28\0\ueb7e\0\uebd4\0\uec2a\0\uec80\0\uecd6\0\ued2c\0\ued82" + + "\0\uedd8\0\uee2e\0\uee84\0\ueeda\0\uef30\0\uef86\0\uefdc\0\uf032" + + "\0\uf088\0\uf0de\0\uf134\0\uf18a\0\uf1e0\0\uf236\0\uf28c\0\uf2e2" + + "\0\uf338\0\uf38e\0\uf3e4\0\uf43a\0\uf490\0\uf4e6\0\uf53c\0\uf592" + + "\0\uf5e8\0\uf63e\0\uf694\0\uf6ea\0\uf740\0\uf796\0\uf7ec\0\uf842" + + "\0\uf898\0\uf8ee\0\uf944\0\uc028\0\uf99a\0\uc12a\0\uf9f0\0\ufa46" + + "\0\ufa9c\0\ufaf2\0\ufb48\0\ufb9e\0\ufbf4\0\ufc4a\0\ufca0\0\ufcf6" + + "\0\ufd4c\0\ufda2\0\ufdf8\0\ufe4e\0\ufea4\0\ufefa\0\uff50\0\uffa6" + + "\0\ufffc\1\122\1\250\1\376\1\u0154\1\u01aa\0\uc93a\1\u0200" + + "\1\u0256\1\u02ac\1\u0302\1\u0358\1\u03ae\1\u0404\1\u045a\1\u04b0" + + "\1\u0506\1\u055c\1\u05b2\1\u0608\1\u065e\1\u06b4\1\u070a\1\u0760" + + "\1\u07b6\1\u080c\1\u0862\1\u08b8\1\u090e\1\u0964\1\u09ba\1\u0a10" + + "\1\u0a66\1\u0abc\1\u0b12\1\u0b68\1\u0bbe\1\u0c14\1\u0c6a\1\u0cc0" + + "\1\u0d16\1\u0d6c\1\u0dc2\1\u0e18\1\u0e6e\1\u0ec4\1\u0f1a\1\u0f70" + + "\1\u0fc6\1\u101c\1\u1072\1\u10c8\1\u111e\1\u1174\0\u01ae\1\u11ca" + + "\1\u1220\1\u1276\1\u12cc\1\u1322\1\u1378\1\u13ce\1\u1424\1\u147a" + + "\1\u14d0\1\u1526\1\u157c\1\u15d2\1\u1628\1\u167e\1\u16d4\1\u172a" + + "\1\u1780\1\u17d6\1\u182c\1\u1882\1\u18d8\1\u192e\1\u1984\1\u19da" + + "\1\u1a30\1\u1a86\1\u1adc\1\u1b32\1\u1b88\1\u1bde\1\u1c34\1\u1c8a" + + "\1\u1ce0\1\u1d36\1\u1d8c\1\u1de2\1\u1e38\1\u1e8e\1\u1ee4\1\u1f3a" + + "\1\u1f90\1\u1fe6\1\u203c\1\u2092\1\u20e8\1\u213e\1\u2194\1\u21ea" + + "\1\u2240\1\u2296\1\u22ec\1\u2342\1\u2398\1\u23ee\1\u2444\1\u249a" + + "\1\u24f0\1\u2546\1\u259c\1\u25f2\1\u2648\1\u269e\1\u26f4\1\u274a" + + "\1\u27a0\1\u27f6\1\u284c\1\u28a2\1\u28f8\1\u294e\1\u29a4\1\u29fa" + + "\1\u2a50\1\u2aa6\1\u2afc\1\u2b52\1\u2ba8\1\u2bfe\1\u2c54\1\u2caa" + + "\1\u2d00\1\u2d56\1\u2dac\1\u2e02\1\u2e58\1\u2eae\1\u2f04\1\u2f5a" + + "\1\u2fb0\1\u3006\1\u305c\1\u30b2\1\u3108\1\u315e\1\u31b4\1\u320a" + + "\1\u3260\1\u32b6\1\u330c\1\u3362\1\u33b8\1\u340e\1\u3464\1\u34ba" + + "\1\u3510\1\u3566\1\u35bc\1\u3612\1\u3668\1\u36be\1\u3714\1\u376a" + + "\1\u37c0\1\u3816\1\u386c\1\u38c2\1\u3918\1\u396e\1\u39c4\1\u3a1a" + + "\1\u3a70\1\u3ac6\1\u3b1c\1\u3b72\1\u3bc8\1\u3c1e\1\u3c74\1\u3cca" + + "\1\u3d20\1\u3d76\1\u3dcc\1\u3e22\1\u3e78\1\u3ece\1\u3f24\1\u3f7a" + + "\1\u3fd0\1\u4026\1\u407c\1\u40d2\1\u4128\1\u417e\1\u41d4\1\u422a" + + "\1\u4280\1\u42d6\1\u432c\1\u4382\1\u43d8\1\u442e\1\u4484\1\u44da" + + "\1\u4530\1\u4586\1\u45dc\1\u4632\1\u4688\1\u46de\1\u4734\1\u478a" + + "\1\u47e0\1\u4836\1\u488c\1\u48e2\1\u4938\1\u498e\1\u49e4\1\u4a3a" + + "\1\u4a90\1\u4ae6\1\u4b3c\1\u4b92\1\u4be8\1\u4c3e\1\u4c94\1\u4cea" + + "\1\u4d40\1\u4d96\1\u4dec\1\u4e42\1\u4e98\1\u4eee\1\u4f44\1\u4f9a" + + "\1\u4ff0\1\u5046\1\u509c\1\u50f2\1\u5148\1\u519e\1\u51f4\1\u524a" + + "\1\u52a0\1\u52f6\1\u534c\1\u53a2\1\u53f8\1\u544e\1\u27a0\1\u54a4" + + "\1\u54fa\1\u5550\1\u55a6\1\u55fc\1\u5652\1\u56a8\1\u56fe\1\u5754" + + "\1\u57aa\1\u5800\1\u5856\1\u58ac\1\u5902\1\u5958\1\u59ae\1\u5a04" + + "\1\u5a5a\1\u5ab0\1\u5b06\1\u5b5c\1\u5bb2\1\u5c08\1\u5c5e\1\u5cb4" + + "\1\u5d0a\1\u5d60\1\u5db6\1\u5e0c\1\u5e62\1\u5eb8\1\u5f0e\1\u5f64" + + "\1\u5fba\1\u6010\1\u6066\1\u60bc\1\u6112\1\u6168\1\u61be\1\u6214" + + "\1\u626a\1\u62c0\1\u6316\1\u636c\1\u63c2\1\u6418\1\u646e\1\u64c4" + + "\1\u651a\1\u6570\1\u65c6\1\u661c\1\u6672\1\u66c8\1\u671e\1\u6774" + + "\1\u67ca\1\u6820\1\u6876\1\u68cc\1\u6922\1\u6978\1\u69ce\1\u6a24" + + "\1\u6a7a\1\u6ad0\1\u6b26\1\u6b7c\1\u6bd2\1\u6c28\1\u6c7e\1\u6cd4" + + "\1\u6d2a\1\u6d80\1\u6dd6\1\u6e2c\1\u6e82\1\u6ed8\1\u6f2e\1\u6f84" + + "\1\u6fda\1\u7030\1\u7086\1\u70dc\1\u7132\1\u7188\1\u71de\1\u7234" + + "\1\u728a\1\u72e0\1\u7336\1\u738c\1\u73e2\1\u7438\1\u748e\1\u74e4" + + "\1\u753a\1\u7590\1\u75e6\1\u763c\1\u7692\1\u76e8\1\u773e\1\u7794" + + "\1\u77ea\1\u7840\1\u7896\1\u78ec\1\u7942\1\u7998\1\u79ee\1\u7a44" + + "\1\u7a9a\1\u7af0\1\u7b46\1\u7b9c\1\u7bf2\1\u7c48\1\u7c9e\1\u7cf4" + + "\1\u7d4a\1\u7da0\1\u7df6\1\u7e4c\1\u7ea2\1\u7ef8\1\u7f4e\1\u7fa4" + + "\1\u7ffa\1\u8050\1\u80a6\1\u80fc\1\u8152\1\u81a8\1\u81fe\1\u8254" + + "\1\u82aa\1\u8300\1\u8356\1\u83ac\1\u8402\1\u8458\1\u84ae\1\u8504" + + "\1\u855a\1\u85b0\1\u8606\1\u865c\1\u86b2\1\u8708\1\u875e\1\u87b4" + + "\1\u880a\1\u8860\1\u88b6\1\u890c\1\u8962\1\u89b8\1\u8a0e\1\u8a64" + + "\1\u8aba\1\u8b10\1\u8b66\1\u8bbc\1\u8c12\1\u8c68\1\u8cbe\1\u8d14" + + "\1\u8d6a\1\u8dc0\1\u8e16\1\u8e6c\1\u8ec2\1\u8f18\1\u8f6e\1\u8fc4" + + "\1\u901a\1\u9070\1\u90c6\1\u911c\1\u9172\1\u91c8\1\u921e\1\u9274" + + "\1\u92ca\1\u9320\1\u9376\1\u93cc\1\u9422\1\u9478\1\u94ce\1\u9524" + + "\1\u957a\1\u95d0\1\u9626\1\u967c\1\u96d2\1\u9728\1\u977e\1\u97d4" + + "\1\u982a\1\u9880\1\u98d6\1\u992c\1\u9524\1\u9982\1\u99d8\1\u9a2e" + + "\1\u9a84\1\u9ada\1\u9b30\1\u9b86\1\u9bdc\1\u9c32\1\u9c88\1\u9cde" + + "\1\u9d34\1\u9d8a\1\u9de0\1\u9e36\1\u9e8c\1\u9ee2\1\u9f38\1\u9f8e" + + "\1\u9fe4\1\ua03a\1\ua090\1\ua0e6\1\ua13c\1\ua192\1\ua1e8\1\ua23e" + + "\1\ua294\1\ua2ea\1\ua340\1\ua396\1\ua3ec\1\ua442\1\ua498\1\ua4ee" + + "\1\ua544\1\ua59a\1\ua5f0\1\ua646\1\ua69c\1\ua6f2\1\ua748\1\ua79e" + + "\1\ua7f4\1\ua84a\1\ua8a0\1\ua8f6\0\u035c\1\ua94c\1\ua9a2\1\ua9f8" + + "\1\uaa4e\1\uaaa4\1\uaafa\1\uab50\1\uaba6\1\uabfc\1\uac52\1\uaca8" + + "\1\uacfe\1\uad54\1\uadaa\1\uae00\1\uae56\1\uaeac\1\uaf02\1\uaf58" + + "\1\uafae\1\ub004\1\ub05a\1\ub0b0\1\ub106\1\ub15c\1\ub1b2\1\ub208" + + "\1\ub25e\1\ub2b4\1\ub30a\1\ub360\1\ub3b6\1\ub40c\1\ub462\1\ub4b8" + + "\1\ub50e\1\uaf58\1\ub564\1\ub5ba\1\ub610\1\ub666\1\ub6bc\1\ub712" + + "\1\ub768\1\ub7be\1\ub814\1\ub86a\1\ub8c0\1\ub916\1\ub96c\1\ub9c2" + + "\1\uba18\1\uba6e\1\ubac4\1\ubb1a\1\ubb70\1\ubbc6\1\ubc1c\1\ubc72" + + "\1\ubcc8\1\ubd1e\1\ubd74\1\ubdca\1\ube20\1\ube76\1\ubecc\1\ubf22" + + "\1\ubf78\1\ubfce\1\uc024\1\uc07a\1\uc0d0\1\uc126\1\uc17c\1\uc1d2" + + "\1\uc228\1\uc27e\1\uc2d4\1\uc32a\1\uc380\1\uc3d6\1\uc42c\1\uc482" + + "\1\uc4d8\1\uc52e\1\uc584\1\uc5da\1\uc630\1\uc686\1\uc6dc\1\uc732" + + "\1\uc788\1\uc7de\1\uc834\1\uc88a\1\uc8e0\1\uc936\1\uc98c\1\uc9e2" + + "\1\uca38\1\uca8e\1\ucae4\1\ucb3a\1\ucb90\1\ucbe6\1\ucc3c\1\ucc92" + + "\1\ucce8\1\ucd3e\1\ucd94\1\ucdea\1\uce40\1\uce96\1\uceec\1\ucf42" + + "\1\ucf98\1\ucfee\1\ud044\1\ud09a\1\ud0f0\1\ud146\1\ud19c\1\ud1f2" + + "\1\ud248\1\ud29e\1\ud2f4\1\ud34a\1\ud3a0\1\ud3f6\1\ud44c\1\ud4a2" + + "\1\ud4f8\1\ud54e\1\ud5a4\1\ud5fa\1\ud650\1\ud6a6\1\ud6fc\1\ud752" + + "\1\ud7a8\1\ud7fe\1\ud854\1\ud8aa\1\ud900\1\ud956\1\ud9ac\1\uda02" + + "\1\uda58\1\udaae\1\udb04\1\udb5a\1\udbb0\1\udc06\1\udc5c\1\udcb2" + + "\1\udd08\1\udd5e\1\uddb4\1\ude0a\1\ude60\1\udeb6\1\udf0c\1\udf62" + + "\1\udfb8\1\ue00e\1\ue064\1\ue0ba\1\ue110\1\ue166\1\ue1bc\1\ue212" + + "\1\ue268\1\ue2be\1\ue314\1\ue36a\1\ue3c0\1\ue416\1\ue46c\1\ue4c2" + + "\1\ue518\1\ue56e\1\ue5c4\1\ue61a\1\ue670\1\ue6c6\1\ue71c\1\ue772" + + "\1\ue7c8\1\ue81e\1\ue874\1\ue8ca\1\ue920\1\ue976\1\ue9cc\1\uea22" + + "\1\uea78\1\ueace\1\ueb24\1\ueb7a\1\uebd0\1\uec26\1\uec7c\1\uecd2" + + "\1\ued28\1\ued7e\1\uedd4\1\uee2a\1\uee80\1\ueed6\1\uef2c\1\uef82" + + "\1\uefd8\1\uf02e\1\uf084\1\uf0da\1\uf130\1\uf186\1\uf1dc\1\uf232" + + "\1\uf288\1\uf2de\1\uf334\1\u7590\1\uf38a\1\uf3e0\1\uf436\1\uf48c" + + "\1\uf4e2\1\uf538\1\uf58e\1\uf5e4\1\uf63a\1\uf690\1\uf6e6\1\uf73c" + + "\1\uf792\1\uf7e8\1\uf83e\1\uf894\1\uf8ea\1\uf940\1\uf996\1\uf9ec" + + "\1\ufa42\1\ufa98\1\ufaee\1\ufb44\1\ufb9a\1\ufbf0\1\ufc46\1\ufc9c" + + "\1\ufcf2\1\ufd48\1\ufd9e\1\ufdf4\1\ufe4a\1\ufea0\1\ufef6\1\uff4c" + + "\1\uffa2\1\ufff8\2\116\2\244\2\372\2\u0150\2\u01a6\2\u01fc" + + "\2\u0252\2\u02a8\2\u02fe\2\u0354\2\u03aa\2\u0400\2\u0456\2\u04ac" + + "\2\u0502\2\u0558\2\u05ae\2\u0604\2\u065a\2\u06b0\2\u0706\2\u075c" + + "\2\u07b2\2\u0808\2\u085e\2\u08b4\2\u090a\2\u0960\2\u09b6\2\u0a0c" + + "\2\u0a62\2\u0ab8\2\u0b0e\2\u0b64\2\u0bba\2\u0c10\2\u0c66\2\u0cbc" + + "\2\u0d12\2\u0d68\2\u0dbe\2\u0e14\2\u0e6a\2\u0ec0\2\u0f16\2\u0f6c" + + "\2\u0fc2\2\u1018\2\u106e\2\u10c4\2\u111a\2\u1170\2\u11c6\2\u121c" + + "\2\u1272\2\u12c8\2\u131e\2\u1374\2\u13ca\2\u1420\2\u1476\2\u14cc" + + "\2\u1522\2\u1578\2\u15ce\2\u1624\2\u167a\2\u16d0\2\u1726\2\u177c" + + "\2\u17d2\2\u1828\2\u187e\2\u18d4\2\u192a\2\u1980\2\u19d6\2\u1a2c" + + "\2\u1a82\2\u1ad8\2\u1b2e\2\u1b84\2\u1bda\2\u1c30\2\u1c86\2\u1cdc" + + "\2\u1d32\2\u1d88\2\u1dde\2\u1e34\2\u1e8a\2\u1ee0\2\u1f36\2\u1f8c" + + "\2\u1fe2\2\u2038\2\u208e\2\u20e4\2\u213a\2\u2190\2\u21e6\2\u223c" + + "\2\u2292\2\u22e8\2\u233e\2\u2394\2\u23ea\2\u2440\2\u2496\2\u24ec" + + "\2\u2542\2\u2598\2\u25ee\2\u2644\2\u269a\2\u26f0\2\u2746\2\u279c" + + "\2\u27f2\2\u2848\2\u289e\2\u28f4\2\u294a\2\u29a0\2\u29f6\2\u2a4c" + + "\2\u2aa2\2\u2af8\2\u2b4e\2\u2ba4\2\u2bfa\2\u2c50\2\u2ca6\2\u2cfc" + + "\2\u2d52\2\u2da8\2\u2dfe\2\u2e54\2\u2eaa\2\u2f00\2\u2f56\2\u2fac" + + "\2\u3002\2\u3058\2\u30ae\2\u3104\2\u315a\2\u31b0\2\u3206\2\u325c" + + "\2\u32b2\2\u3308\2\u335e\2\u33b4\2\u340a\2\u3460\2\u34b6\2\u350c" + + "\2\u3562\2\u35b8\2\u360e\2\u3664\2\u36ba\2\u3710\2\u3766\2\u37bc" + + "\2\u3812\2\u3868\2\u38be\2\u3914\2\u396a\2\u39c0\2\u3a16\2\u3a6c" + + "\2\u3ac2\2\u3b18\2\u3b6e\2\u3bc4\2\u3c1a\2\u3c70\2\u3cc6\2\u3d1c" + + "\2\u3d72\2\u3dc8\2\u3e1e\2\u3e74\2\u3eca\2\u3f20\2\u3f76\2\u3fcc" + + "\2\u4022\2\u4078\2\u40ce\2\u4124\2\u417a\2\u41d0\2\u4226\2\u427c" + + "\2\u42d2\2\u4328\2\u437e\2\u43d4\2\u442a\2\u4480\2\u44d6\2\u452c" + + "\2\u4582\2\u45d8\2\u462e\2\u4684\2\u46da\2\u4730\2\u4786\2\u47dc" + + "\2\u4832\2\u4888\2\u48de\2\u4934\2\u498a\2\u49e0\2\u4a36\2\u4a8c" + + "\2\u4ae2\2\u4b38\2\u4b8e\2\u4be4\2\u4c3a\2\u4c90\2\u4ce6\2\u4d3c" + + "\2\u4d92\2\u4de8\2\u4e3e\2\u4e94\2\u4eea\2\u4f40\2\u4f96\2\u4fec" + + "\2\u5042\2\u5098\2\u50ee\2\u5144\2\u519a\2\u51f0\2\u5246\2\u529c" + + "\2\u52f2\2\u5348\2\u539e\2\u53f4\2\u544a\2\u54a0\2\u54f6\2\u554c" + + "\2\u55a2\2\u55f8\2\u564e\2\u56a4\2\u56fa\2\u5750\2\u57a6\2\u57fc" + + "\2\u5852\2\u58a8\2\u58fe\2\u5954\2\u59aa\2\u5a00\2\u5a56\2\u5aac" + + "\2\u5b02\2\u5b58\2\u5bae\2\u5c04\2\u5c5a\2\u5cb0\2\u5d06\2\u5d5c" + + "\2\u5db2\2\u5e08\2\u5e5e\2\u5eb4\2\u5f0a\2\u5f60\2\u5fb6\2\u600c" + + "\2\u6062\2\u60b8\2\u610e\2\u6164\2\u61ba\2\u6210\2\u6266\2\u62bc" + + "\2\u6312\2\u6368\2\u63be\2\u6414\2\u646a\2\u64c0\2\u6516\2\u656c" + + "\2\u65c2\2\u6618\2\u666e\2\u66c4\2\u671a\2\u6770\2\u67c6\2\u681c" + + "\2\u6872\2\u68c8\2\u691e\2\u6974\2\u69ca\2\u6a20\2\u6a76\2\u6acc" + + "\2\u6b22\2\u6b78\2\u6bce\2\u6c24\2\u6c7a"; + + private static int[] zzUnpackRowMap() { + int[] result = new int[1885]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = "\1\5\2\6\1\7\1\10\1\7\1\11\1\7\1\12" + + "\1\13\1\5\1\6\1\14\1\15\1\16\1\7\1\17" + "\1\5\1\6\1\20\1\21\1\22\1\23\1\24\1\25" + + "\1\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\1\43\2\22" + + "\1\44\1\22\1\45\1\46\1\45\2\6\1\47\1\50" + "\1\51\1\6\1\52\1\6\1\53\1\54\1\55\1\56" + + "\1\6\1\57\1\6\1\60\1\40\1\6\1\61\1\62" + "\1\6\1\63\1\64\1\65\1\66\1\67\1\70\1\71" + + "\1\72\1\6\1\73\1\74\1\75\1\76\2\7\2\6" + "\1\40\11\77\1\100\3\77\1\101\7\77\1\102\31\77" + + "\1\103\10\77\1\104\35\77\11\105\1\106\3\105\1\107" + "\7\105\1\110\21\105\1\111\7\105\1\112\10\105\1\113" + + "\5\105\1\114\26\105\1\115\11\116\1\117\3\116\1\120" + "\41\116\1\121\10\116\1\122\35\116\10\5\2\0\4\5" + + "\1\0\1\5\1\0\2\5\3\0\6\5\2\0\6\5" + "\13\0\20\5\1\0\25\5\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\2\124\1\125\3\7\1\124\1\7\2\0\3\124" + "\1\126\1\0\1\7\1\0\2\124\3\0\1\127\3\124" + + "\1\126\1\130\1\0\1\131\2\124\1\130\1\124\1\127" + "\1\124\13\0\2\124\1\126\5\124\1\126\7\124\1\0" + + "\21\124\2\7\2\124\1\0\2\124\1\132\1\133\2\134" + "\1\124\1\134\2\0\3\124\1\126\1\0\1\134\1\0" + + "\2\124\3\0\1\127\2\135\1\136\1\126\1\130\1\0" + "\1\131\2\124\1\130\1\124\1\127\1\124\13\0\2\124" + + "\1\126\2\124\1\136\2\124\1\126\7\124\1\0\21\124" + "\2\134\2\124\1\0\1\5\7\6\2\0\1\123\1\137" + + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\140\1\141\1\6\13\0\1\142\1\143" + + "\15\6\1\5\1\0\25\6\1\0\10\144\1\145\1\146" + "\1\147\113\144\126\0\1\5\7\6\2\0\1\123\1\150" + + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\151\1\152\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\153\1\154\1\6\13\0\1\6\1\155\4\6" + "\1\156\10\6\1\5\1\0\25\6\1\0\11\16\1\157" + + "\1\160\3\16\1\161\107\16\23\0\1\20\126\0\1\162" + "\1\163\22\0\1\45\125\0\1\45\55\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\6\1\164\4\6" + + "\1\165\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\166\2\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\167\2\6\13\0" + "\1\6\1\170\4\6\1\171\5\6\1\172\2\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\173\4\6\13\0\1\6\1\174\12\6\1\175" + "\2\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\4\6\1\176\1\6\13\0\1\6\1\177" + + "\4\6\1\200\10\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\6\1\201\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\202" + "\4\6\13\0\5\6\1\203\1\6\1\204\2\6\1\205" + + "\4\6\1\5\1\0\13\6\1\206\11\6\35\0\1\45" + "\13\0\1\45\60\0\3\131\1\0\1\131\7\0\1\131" + + "\101\0\2\131\3\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\207\4\6\13\0\1\210\16\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\211\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\6\1\212\1\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + + "\1\213\1\6\13\0\5\6\1\214\11\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\2\6\1\215\3\6" + "\2\0\5\6\1\216\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\217\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\220\2\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\221\5\6\13\0" + "\1\222\10\6\1\223\2\6\1\224\2\6\1\5\1\0" + + "\25\6\47\0\1\45\1\0\1\45\124\0\1\225\1\45" + "\125\0\1\45\1\0\1\226\123\0\1\45\4\0\1\45" + + "\50\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\227" + + "\3\6\13\0\1\6\1\230\15\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\231\2\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\232\1\6\1\233\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + + "\1\234\1\235\1\6\13\0\1\236\1\237\15\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + + "\1\240\1\241\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\7\6\1\242\7\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\243" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\244\1\245\2\6\13\0\1\6\1\246" + "\4\6\1\247\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\250\16\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\1\6\1\251\15\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\1\6\1\252\15\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\253\2\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\254" + + "\1\255\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\2\256\3\5\1\256\1\5\2\0\1\5\3\256" + + "\1\0\1\5\1\0\1\5\1\256\3\0\6\256\2\0" + "\6\256\13\0\17\256\1\5\1\0\21\256\2\5\2\256" + + "\1\0\1\5\7\6\2\0\1\123\1\257\2\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\2\6\1\260\3\6" + + "\2\0\1\6\1\261\3\6\1\262\13\0\3\6\1\263" + "\13\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\264\1\6\1\265\3\6\13\0\1\266" + + "\1\267\1\6\1\270\1\271\1\6\1\272\5\6\1\273" + "\2\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\274\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\275\3\6\1\276\1\6" + + "\13\0\2\6\1\277\14\6\1\5\1\0\13\6\1\300" + "\11\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\301\4\6\13\0\1\302\1\303\4\6\1\304\5\6" + + "\1\305\2\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\6\1\306\1\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\5\6\1\307\1\310\16\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\311\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\312\3\6\13\0\1\6\1\313" + "\4\6\1\314\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\315\2\6\13\0" + + "\6\6\1\316\10\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\317\2\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\320\1\321" + "\2\6\13\0\1\6\1\322\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\323\2\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\2\6\1\324\3\6" + + "\2\0\6\6\13\0\3\6\1\325\13\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\326\2\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\327\1\6\1\330\2\6\13\0\6\6\1\331" + + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\332\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\333\1\334\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\335\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\11\77" + "\1\0\3\77\1\0\7\77\1\0\31\77\1\0\10\77" + + "\1\0\35\77\36\0\1\336\26\0\1\337\64\0\1\340" + "\137\0\1\341\157\0\1\342\35\0\11\105\1\0\3\105" + + "\1\0\7\105\1\0\21\105\1\0\7\105\1\0\10\105" + "\1\0\5\105\1\0\26\105\37\0\1\343\26\0\1\344" + + "\64\0\1\345\102\0\1\346\4\0\1\346\4\0\3\346" + "\6\0\1\347\1\0\6\346\2\0\6\346\6\0\1\350" + + "\4\0\17\346\2\0\21\346\2\0\2\346\37\0\1\351" + "\157\0\1\352\73\0\1\353\1\354\1\355\1\356\1\0" + + "\1\357\14\0\1\360\1\361\1\362\1\363\1\0\1\364" + "\3\0\1\365\132\0\1\366\27\0\11\116\1\0\3\116" + + "\1\0\41\116\1\0\10\116\1\0\35\116\36\0\1\367" + "\26\0\1\370\76\0\1\371\157\0\1\372\35\0\10\5" + + "\2\0\1\5\1\373\2\5\1\0\1\5\1\0\2\5" + "\3\0\6\5\2\0\6\5\13\0\20\5\1\0\25\5" + + "\1\0\10\124\2\0\4\124\1\0\1\124\1\0\2\124" + "\3\0\6\124\2\0\6\124\13\0\20\124\1\0\25\124" + + "\1\0\2\124\1\125\3\374\1\124\1\374\2\0\4\124" + "\1\0\1\374\1\0\2\124\3\0\6\124\2\0\6\124" + + "\13\0\20\124\1\0\21\124\2\374\2\124\1\0\3\124" + "\3\375\1\124\1\375\2\0\4\124\1\0\1\375\1\0" + + "\2\124\3\0\6\124\1\376\1\0\6\124\2\0\1\376" + "\10\0\20\124\1\0\21\124\2\375\2\124\1\0\3\124" + + "\3\131\1\124\1\131\2\0\3\124\1\126\1\0\1\131" + "\1\0\2\124\3\0\4\124\1\126\1\130\2\0\2\124" + + "\1\130\3\124\13\0\2\124\1\126\5\124\1\126\7\124" + "\1\0\21\124\2\131\2\124\1\0\2\124\1\132\1\124" + + "\2\377\1\124\1\377\2\0\4\124\1\0\1\377\1\0" + "\2\124\3\0\6\124\2\0\6\124\13\0\20\124\1\0" + + "\21\124\2\377\2\124\1\0\3\124\3\133\1\124\1\133" + "\2\0\3\124\1\126\1\0\1\133\1\0\2\124\3\0" + + "\4\124\1\126\1\130\1\0\1\131\2\124\1\130\3\124" + "\13\0\2\124\1\126\5\124\1\126\7\124\1\0\21\124" + + "\2\133\2\124\1\0\2\124\1\132\1\133\2\134\1\124" + "\1\134\2\0\3\124\1\126\1\0\1\134\1\0\2\124" + + "\3\0\1\u0100\3\124\1\126\1\130\1\0\1\131\2\124" + "\1\130\1\124\1\u0100\1\124\13\0\2\124\1\126\5\124" + + "\1\126\7\124\1\0\21\124\2\134\2\124\1\0\4\124" + "\2\u0101\2\124\2\0\4\124\1\0\1\124\1\0\2\124" + + "\3\0\6\124\2\0\6\124\13\0\20\124\1\0\25\124" + "\1\0\3\124\5\u0102\2\0\3\124\1\u0102\1\0\1\u0102" + + "\1\0\2\124\3\0\1\124\2\u0102\1\124\2\u0102\2\0" + "\2\124\2\u0102\2\124\13\0\2\124\1\u0102\1\124\1\u0102" + + "\3\124\1\u0102\7\124\1\0\1\124\1\u0102\17\124\2\u0102" + "\2\124\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u0103\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u0104\1\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u0105\2\6\13\0\1\6" + "\1\u0106\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u0107\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\1\6\1\u0108\1\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\4\6\1\u0109\1\6\13\0\7\6" + "\1\u010a\7\6\1\5\1\0\25\6\1\0\10\u010b\1\u010c" + + "\1\0\114\u010b\10\0\1\u010c\115\0\4\u010b\2\u010d\1\u010b" + + "\1\u010e\1\u010f\1\0\1\144\1\u0110\3\144\1\u010d\10\u010b" + + "\1\144\5\u010b\2\144\61\u010b\2\u010e\3\u010b\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\4\6\1\u0111\1\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\11\6\1\241\5\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0112" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\4\6\1\u0113\1\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\6\1\u0114\15\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\241\4\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u0115\1\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\12\157" + + "\1\u0116\3\157\1\u0117\113\157\2\16\1\157\2\16\1\0" + "\1\16\1\u0118\4\16\10\157\1\16\5\157\2\16\61\157" + + "\2\16\3\157\25\0\1\u0119\100\0\1\5\7\6\2\0" + "\1\123\1\6\1\u011a\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u011b" + "\12\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u011c\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\5\6\1\u011d\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\2\6\1\u011e\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u011f" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u0120\15\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\u0121\5\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0122\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u0123\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\1\6\1\u0124\15\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0125" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\u0126\2\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + + "\1\u0127\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u0128\4\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\4\6\1\u0129\1\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u012a\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u012b\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\u012c\5\6\13\0\4\6\1\u012d\12\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\3\6\1\u012e\13\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u012f\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\4\6\1\u0130\1\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\u0131\2\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u0132\2\6\13\0" + "\14\6\1\241\2\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u0133\4\6\13\0" + + "\6\6\1\u0134\10\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u0135\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\1\u0136\2\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0137" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u0138\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\5\6\1\u0139\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\5\6\1\u013a\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u013b\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\3\6\1\u013c\13\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u013d" + + "\1\6\1\u013e\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u013f\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u0140" + + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u0141\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\51\0\1\45\1\0\1\22\53\0\1\5" + + "\7\6\2\0\1\123\2\6\1\u0142\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\1\u0143\2\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\2\6\1\u0144\3\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u0145" + + "\4\6\1\u0146\10\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u0147" + "\12\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\u0148\4\6\1\u0137\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u0149\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u014a" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u014b\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\u014c\4\6\1\u014d\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\3\6\1\u014e\13\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\3\6\1\u014f\13\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\3\6\1\u0150\21\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\u0151\5\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u0152\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u0153" + "\12\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u0154\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\4\6\1\u0155\1\6\13\0\6\6\1\u0156\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u0157\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\6\1\u0158\1\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u0159\1\6\1\u015a\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u015b\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\256\2\0\1\u015c\3\256" + "\1\0\1\256\1\0\1\5\1\256\3\0\6\256\2\0" + + "\6\256\13\0\17\256\1\5\1\0\25\256\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u015d\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\5\6\1\u015e\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u015f" + + "\4\6\13\0\6\6\1\u0160\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0161" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\3\6\1\u0162\13\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u0163\1\6\1\u0164\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\u0165\1\u0166\4\6\13\0\4\6\1\u0167\12\6" + + "\1\5\1\0\3\6\1\u0168\21\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u0169\15\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u016a\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + + "\1\u016b\1\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u016c\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\7\6\1\u016d\7\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\1\6\1\u016e\1\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\5\6\1\u016f\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u0170\4\6\1\u0171\13\0\1\u0172\1\6\1\u0173\1\u0174" + + "\1\u0175\5\6\1\u0176\4\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0177\3\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\4\6\1\u0178\1\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u0179\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\5\6\1\u017a\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u017b\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u017c\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u017d\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\7\6\1\u017e\7\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\3\6\1\u017f" + "\13\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\5\6\1\u0180\13\0\4\6\1\u0181\11\6" + + "\1\u0182\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\4\6\1\u0183\1\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\4\6\1\u0184\20\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0185" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u0186\4\6\13\0\4\6" + "\1\u0187\12\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u0188\10\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u0189\4\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u018a" + "\5\6\13\0\3\6\1\u018b\13\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u018c" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\4\6\1\u018d\1\6\13\0\7\6" + "\1\u018e\7\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\13\6\1\u018f\3\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\12\6\1\u0190\4\6\1\5\1\0" + "\25\6\1\0\1\5\5\6\1\u0191\1\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\u0192\5\6\13\0\17\6\1\5\1\0\2\6" + + "\1\u0193\22\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u0194\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\5\6\1\u0195\13\0" + "\17\6\1\5\1\0\14\6\1\u0196\10\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u0197\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\5\6\1\u0198\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u0199\4\6\1\u019a\10\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\4\6\1\u019b\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\3\6\1\u019c" + "\13\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u019d\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u019e\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u019f" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u0150\3\6\13\0" + + "\17\6\1\5\1\0\25\6\63\0\1\u01a0\105\0\1\u01a1" + + "\121\0\1\u01a2\157\0\1\u01a3\117\0\1\u01a4\105\0\1\u01a5" + + "\63\0\52\346\1\350\53\346\1\0\1\346\4\0\1\346" + "\4\0\3\346\10\0\6\346\2\0\6\346\6\0\1\350" + + "\4\0\17\346\2\0\21\346\2\0\2\346\37\0\1\u01a6" + "\157\0\1\u01a7\50\0\1\u01a8\43\0\1\u01a9\1\u01aa\105\0" + + "\1\u01ab\151\0\1\u01ac\54\0\1\u01ad\152\0\1\u01ae\24\0" + + "\1\u01af\70\0\1\u01b0\135\0\1\u01b1\126\0\1\u01b2\125\0" + + "\1\u01b3\100\0\1\u01b4\151\0\1\u01b5\127\0\1\u01b6\16\0" + + "\1\u01b7\1\0\1\u01b8\1\0\1\u01b9\3\0\1\u01ba\116\0" + + "\1\u01bb\105\0\1\u01bc\121\0\1\u01bd\157\0\1\u01be\35\0" + "\3\5\5\u01bf\2\0\3\5\1\u01bf\1\0\1\u01bf\1\0" + + "\2\5\3\0\1\5\2\u01bf\1\5\2\u01bf\2\0\2\5" + "\2\u01bf\2\5\13\0\2\5\1\u01bf\1\5\1\u01bf\3\5" + + "\1\u01bf\7\5\1\0\1\5\1\u01bf\17\5\2\u01bf\2\5" + "\1\0\2\124\1\125\3\374\1\124\1\374\2\0\4\124" + + "\1\0\1\374\1\0\2\124\3\0\1\127\5\124\2\0" + "\4\124\1\127\1\124\13\0\20\124\1\0\21\124\2\374" + + "\2\124\1\0\3\124\3\375\1\124\1\375\2\0\3\124" + "\1\126\1\0\1\375\1\0\2\124\3\0\4\124\1\126" + + "\1\124\2\0\6\124\13\0\2\124\1\126\5\124\1\126" + "\7\124\1\0\21\124\2\375\2\124\4\0\3\375\1\0" + + "\1\375\7\0\1\375\101\0\2\375\3\0\2\124\1\132" + "\1\124\2\377\1\124\1\377\2\0\4\124\1\0\1\377" + + "\1\0\2\124\3\0\1\u0100\5\124\2\0\4\124\1\u0100" + "\1\124\13\0\20\124\1\0\21\124\2\377\2\124\1\0" + + "\2\124\1\u01c0\1\124\2\u0101\2\124\2\0\4\124\1\0" + "\1\124\1\0\2\124\3\0\6\124\2\0\6\124\13\0" + + "\20\124\1\0\25\124\1\0\2\124\1\u01c1\5\u0102\2\0" + "\3\124\1\u0102\1\0\1\u0102\1\0\2\124\3\0\1\u0100" + + "\2\u0102\1\124\2\u0102\2\0\2\124\2\u0102\1\u0100\1\124" + + "\13\0\2\124\1\u0102\1\124\1\u0102\3\124\1\u0102\7\124" + + "\1\0\1\124\1\u0102\17\124\2\u0102\2\124\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u01c2\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u01c3\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u01c4\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\6\1\u01c5\1\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + "\1\u01c6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u01c7\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\5\6\1\u01c8\13\0\4\6\1\u01c9\12\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\4\6\1\u01ca\1\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\3\6\1\u01cb\13\6\1\5\1\0\25\6\1\0" + + "\10\u010b\1\145\1\0\120\u010b\2\u010e\1\u010b\1\u010e\1\u010c" + + "\1\0\5\u010b\1\u010e\101\u010b\2\u010e\7\u010b\2\144\1\u010b" + + "\1\144\1\u010c\1\0\5\u010b\1\144\101\u010b\2\144\6\u010b" + + "\5\u01cc\1\145\1\0\3\u010b\1\u01cc\1\u010b\1\u01cc\7\u010b" + + "\2\u01cc\1\u010b\2\u01cc\4\u010b\2\u01cc\17\u010b\1\u01cc\1\u010b" + + "\1\u01cc\3\u010b\1\u01cc\11\u010b\1\u01cc\17\u010b\2\u01cc\3\u010b" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\4\6\1\241\1\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u01cd\10\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\5\6\1\u0131\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u01ce" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u01cf\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\11\157\1\0\117\157" + + "\5\u01d0\2\157\1\u0116\2\157\1\u01d0\1\u0117\1\u01d0\7\157" + + "\2\u01d0\1\157\2\u01d0\4\157\2\u01d0\17\157\1\u01d0\1\157" + + "\1\u01d0\3\157\1\u01d0\11\157\1\u01d0\17\157\2\u01d0\3\157" + "\24\0\1\u01d1\101\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\13\6\1\u01d2\3\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u01d3" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u01d4\3\6\13\0" + "\16\6\1\u01d5\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u01d6\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\2\6" + "\1\u01d7\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u01d8\3\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u01d9\3\6\1\u01da\1\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\2\6" + "\1\u01db\22\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u01dc\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u01dd" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\4\6\1\u01de\1\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u01df\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u01e0\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u01e1\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\7\6\1\u01e2\7\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\u01e3\1\6\1\u01e4\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\7\6\1\u01e5\7\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u01e6\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u01e7\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u01e8\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u01e9\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\6\1\u01ea\1\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\5\6\1\u01eb\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u01ec\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u01ed\1\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u01ee" + + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\5\6\1\241\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u01ef\2\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\7\6\1\241" + + "\7\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\241\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u01f0\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u01f1\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u01f2\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\13\6\1\u01df\3\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + + "\1\155\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + "\1\u01f3\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u01f4\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\u01ce\4\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0148\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\4\6\1\u01f5\12\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\3\6\1\u01f6\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\2\6\1\u01f7\3\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u01f4\1\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u01f8\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\12\6\1\u01f9\4\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\16\6\1\u01fa\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\4\6\1\u01fb\12\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\5\6\1\u0134\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u01df" + + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u01fc\4\6\1\u01fd\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u01fe\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u01ff\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u0200\1\6" + "\13\0\1\6\1\u01f2\15\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u0201\1\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\u0202\2\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u0165\1\u0203\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\2\6\1\u0204\3\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u0205\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\4\6\1\u0137\1\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u0206\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\2\6\1\241\14\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\241" + + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u0207\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u0208\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\2\6\1\u0209\14\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\1\6\1\u020a\15\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + "\1\u020b\14\6\1\5\1\0\25\6\1\0\10\5\2\0" + + "\1\5\1\u020c\2\5\1\0\1\5\1\0\2\5\3\0" + "\6\5\2\0\6\5\13\0\20\5\1\0\25\5\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + + "\1\u020d\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u020e\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u020f\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0210\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u0211\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u0212\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + + "\1\u0213\3\6\13\0\6\6\1\u0214\10\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\4\6\1\u0215\12\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + + "\1\u0216\3\6\1\u0217\4\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\u0218\2\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\u0219\2\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + + "\1\u01e1\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u021a\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u021b\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + "\1\u021c\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\3\6\1\u021d\13\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u021e" + + "\12\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\u021f\5\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u0220\3\6\13\0\17\6\1\5\1\0\2\6\1\u0221" + + "\22\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0222" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u0223\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0224\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u0225" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + "\1\u0226\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u0227\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u0228\4\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\2\6\1\u0229" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u022a\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u022b\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\202\4\6\13\0" + "\5\6\1\u022c\11\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u022d\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u022e\3\6\13\0\1\6\1\u022f" + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\11\6" + + "\1\u0230\13\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u0231\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0232" + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\u0233\2\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u0234\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\u0235\16\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + + "\1\u0236\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\10\6\1\u0237\6\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\10\6\1\u0165" + "\6\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\u0238\16\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\6\6\1\u0239\10\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u012b\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\2\6\1\u0165\14\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u023a\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\u0165" + "\16\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\1\0\1\u023b\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + + "\1\u023c\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\4\6\1\u023d\1\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\2\6\1\u023e\3\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u023f\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\6\6\1\u0240\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\4\6\1\u0241\1\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\1\6" + "\1\u0242\1\u0243\22\6\1\0\1\5\7\6\2\0\1\123" + + "\1\u0244\2\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\3\6\1\u0245\13\6\1\5\1\0\13\6\1\u0246\11\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0247" + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u0248\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u0249\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\u024a\16\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\3\6" + + "\1\u024b\1\u024c\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\6\1\u024d\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u024e\5\6\1\u024f\7\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\16\6\1\u0250\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u0251\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\13\6\1\u0252\3\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0253" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\16\6\1\u0254" + "\1\5\1\0\25\6\57\0\1\u0255\107\0\1\u01a0\147\0" + + "\1\u0256\100\0\1\u0257\146\0\1\u0258\107\0\1\u01a4\147\0" + + "\1\u0259\100\0\1\u025a\126\0\1\u025b\126\0\1\u025c\147\0" + + "\1\u025d\102\0\1\u025e\130\0\1\u025f\21\0\1\u0260\100\0" + + "\1\u0261\126\0\1\u0262\1\u0263\101\0\1\u0264\154\0\1\u0265" + + "\144\0\1\u0266\102\0\1\u0267\124\0\1\u0268\125\0\1\u0269" + + "\22\0\1\u026a\103\0\1\u026b\153\0\1\u026c\120\0\1\u026d" + + "\125\0\1\u026e\61\0\1\u026f\152\0\1\u0270\142\0\1\u0271" + + "\107\0\1\u01bb\147\0\1\u0272\100\0\1\u0273\70\0\3\5" + "\5\u0274\2\0\3\5\1\u0274\1\0\1\u0274\1\0\2\5" + + "\3\0\1\5\2\u0274\1\5\2\u0274\2\0\2\5\2\u0274" + "\2\5\13\0\2\5\1\u0274\1\5\1\u0274\3\5\1\u0274" + + "\7\5\1\0\1\5\1\u0274\17\5\2\u0274\2\5\1\0" + "\2\124\1\u01c1\5\u0102\2\0\3\124\1\u0102\1\0\1\u0102" + + "\1\0\2\124\3\0\1\124\2\u0102\1\124\2\u0102\2\0" + "\2\124\2\u0102\2\124\13\0\2\124\1\u0102\1\124\1\u0102" + + "\3\124\1\u0102\7\124\1\0\1\124\1\u0102\17\124\2\u0102" + "\2\124\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u0275\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\6\1\u0276\1\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\5\6\1\u0277\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u0278\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0207" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\5\6\1\u0279\1\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u027a" + "\2\6\13\0\17\6\1\5\1\0\1\6\1\u027b\1\u027c" + + "\22\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\1\6\1\u027d\15\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\u027e\2\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u027f\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u0177\2\6\13\0\6\6\1\u0280\10\6\1\5" + "\1\0\25\6\1\0\3\u010b\5\u0281\1\145\1\0\3\u010b" + + "\1\u0281\1\u010b\1\u0281\7\u010b\2\u0281\1\u010b\2\u0281\4\u010b" + + "\2\u0281\17\u010b\1\u0281\1\u010b\1\u0281\3\u010b\1\u0281\11\u010b" + + "\1\u0281\17\u010b\2\u0281\3\u010b\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\12\6\1\u0137\4\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u01df" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\4\6\1\u0282\1\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\3\157\5\u0283\2\157" + + "\1\u0116\2\157\1\u0283\1\u0117\1\u0283\7\157\2\u0283\1\157" + + "\2\u0283\4\157\2\u0283\17\157\1\u0283\1\157\1\u0283\3\157" + + "\1\u0283\11\157\1\u0283\17\157\2\u0283\3\157\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\2\6\1\u0221\22\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\4\6\1\u0284\1\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\12\6\1\u0285\12\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0286\1\u0287" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\15\6\1\u0288" + + "\1\6\1\5\1\0\4\6\1\u0289\20\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u028a\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\21\6" + + "\1\u028b\3\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u028c\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u028d\3\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u01e1\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\1\6\1\u028e" + "\23\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\16\6\1\241\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u028f\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\1\u0207\16\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0165" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\u0290\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u0291\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + + "\1\u0292\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\4\6\1\u0293\1\6\2\0\6\6\13\0\10\6\1\u0294" + + "\4\6\1\u0295\1\6\1\5\1\0\4\6\1\u0296\5\6" + "\1\u0297\1\u0298\1\6\1\u0299\1\6\1\u029a\5\6\1\0" + + "\1\5\5\6\1\u029b\1\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + + "\1\u029c\3\6\13\0\17\6\1\5\1\0\2\6\1\u01db" + "\6\6\1\u029d\13\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u0165\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + + "\1\u029e\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\3\6" + "\1\u029f\13\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\14\6\1\u02a0\2\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\u02a1\5\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\5\6\1\u022c\11\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\5\6\1\u02a2\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\11\6\1\u02a3\5\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u02a4\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\6\1\u02a5\1\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u02a6\4\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u01fd\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\4\6\1\u02a7\12\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + "\1\u02a8\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\u02a9\16\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u02aa" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u0125\1\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u02ab\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\3\6\1\u02ac\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + "\1\u02ad\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\241" + + "\16\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u02ae\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\241\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u02af\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u02b0\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u02b1\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\6\6\1\u02b2\10\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0165\3\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\4\6\1\u02b3\6\6\1\u02b4\11\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\4\6\1\u02b5\1\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\6\6\1\u02b6\10\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\250" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u02b7\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u02b8\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u01e6\1\u02b7\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u02b9\2\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u02ba" + + "\15\6\1\5\1\0\25\6\1\0\3\5\5\u02bb\2\0" + "\3\5\1\u02bb\1\0\1\u02bb\1\0\2\5\3\0\1\5" + + "\2\u02bb\1\5\2\u02bb\2\0\2\5\2\u02bb\2\5\13\0" + "\2\5\1\u02bb\1\5\1\u02bb\3\5\1\u02bb\7\5\1\0" + + "\1\5\1\u02bb\17\5\2\u02bb\2\5\1\0\1\5\5\6" + "\1\u02bc\1\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u02bd\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\14\6\1\u02be\2\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\u02bf" + "\16\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\6\1\u02c0\4\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + "\1\u02c1\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u02c2" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u02c3\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\4\6\1\u02c4\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\16\6\1\u02c5" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u02c6\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\6\6\1\u02c7\10\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u02c8\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u02c9\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u02ca\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u02cb" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u02cc\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\4\6\1\u02cd\1\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\4\6\1\u02ce" + "\1\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u02cf" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u02d0\4\6\13\0" + "\13\6\1\u02cc\3\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\u02d1\2\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\3\6\1\u02d2\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u02d3\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\5\6" + + "\1\u02d4\11\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u02d5\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\7\6\1\u02d6\7\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u02d7" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u02d8\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\6\1\u02d9\15\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\13\6\1\u02da\3\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u02db\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\4\6\1\u02dc\12\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\2\6\1\u01db" + "\6\6\1\u029d\13\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u02dd\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\11\6\1\u0207\5\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u02de\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\6\1\u02df\4\6\13\0\17\6" + + "\1\5\1\0\23\6\1\u02e0\1\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\12\6\1\u02e1\12\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\3\6\1\u02e2\13\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u02e3" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u02e4\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\6\1\u02e5\15\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u02e6\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0207\5\6" + "\13\0\17\6\1\5\1\0\2\6\1\u01db\6\6\1\u029d" + + "\13\6\1\0\1\5\7\6\2\0\1\123\2\6\1\u02e7" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\u02e8\2\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\34\0\1\u02e9\72\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u02ea\10\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\15\6\1\u02eb" + "\7\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u02ec\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u02ed\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\13\6\1\u02ee\3\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u02ef\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\4\6\1\u02f0\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u02f1\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\4\6\1\u02f2\12\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u02f3" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\2\6\1\u02f4\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\6\1\u02f5\4\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\4\6\1\u02f6\12\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u02f7\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\2\6\1\u02f8\3\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u02f9\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u02fa\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u02fb\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u02fc\4\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\6\6\1\u02fd\10\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + + "\1\u02fe\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + "\1\u02ff\14\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u0300\15\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u0301\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\7\6\1\u0302\15\6\25\0" + + "\1\u0303\144\0\1\u01a0\12\0\1\u0255\50\0\1\u0257\1\u0304" + + "\5\u0257\1\u0304\2\0\3\u0257\1\0\1\u0257\1\0\1\u0304" + + "\1\u0257\1\0\1\u0257\1\u0304\6\u0257\2\u0304\6\u0257\1\0" + + "\2\u0304\1\0\1\u0304\2\0\4\u0304\17\u0257\2\u0304\25\u0257" + + "\25\0\1\u0305\144\0\1\u01a4\12\0\1\u0258\50\0\1\u025a" + + "\1\u0306\5\u025a\1\u0306\2\0\3\u025a\1\0\1\u025a\1\0" + + "\1\u0306\1\u025a\1\0\1\u025a\1\u0306\6\u025a\2\u0306\6\u025a" + + "\1\0\2\u0306\1\0\1\u0306\2\0\4\u0306\17\u025a\2\u0306" + + "\25\u025a\61\0\1\u0307\105\0\1\u0308\17\0\1\u0309\125\0" + + "\1\u0263\60\0\1\u030a\200\0\1\u030b\77\0\1\u030c\1\0" + + "\1\u030d\142\0\1\u030e\133\0\1\u030f\123\0\1\u0310\122\0" + + "\1\u0311\104\0\1\u0312\127\0\1\u0313\124\0\1\u0314\125\0" + + "\1\u0315\125\0\1\u0316\130\0\1\u0317\76\0\1\u0318\21\0" + + "\1\u0319\152\0\1\u031a\123\0\1\u031b\123\0\1\u031c\110\0" + + "\1\u031d\107\0\1\u031e\144\0\1\u01bb\12\0\1\u0271\50\0" + + "\1\u0273\1\u031f\5\u0273\1\u031f\2\0\3\u0273\1\0\1\u0273" + + "\1\0\1\u031f\1\u0273\1\0\1\u0273\1\u031f\6\u0273\2\u031f" + + "\6\u0273\1\0\2\u031f\1\0\1\u031f\2\0\4\u031f\17\u0273" + + "\2\u031f\25\u0273\1\0\3\5\5\u0320\2\0\3\5\1\u0320" + "\1\0\1\u0320\1\0\2\5\3\0\1\5\2\u0320\1\5" + + "\2\u0320\2\0\2\5\2\u0320\2\5\13\0\2\5\1\u0320" + "\1\5\1\u0320\3\5\1\u0320\7\5\1\0\1\5\1\u0320" + + "\17\5\2\u0320\2\5\1\0\1\5\7\6\2\0\1\123" + "\1\6\1\u0321\1\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\2\6\1\u0322\14\6\1\5\1\0\25\6\1\0" + + "\1\5\5\6\1\u0323\1\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\1\u0324\3\6\1\u0325" + + "\1\6\2\0\6\6\13\0\17\6\1\5\1\0\10\6" + "\1\u0326\1\6\1\u0297\12\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u02b7\2\6\13\0\17\6\1\5" + + "\1\0\12\6\1\u0327\12\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\1\6\1\u0328\15\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\4\6\1\u0329\12\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u032a" + + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u032b\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\4\6\1\u0202\1\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\u032c\4\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u032d\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\4\6\1\u02cc\1\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\3\u010b\5\u032e\1\145" + + "\1\0\3\u010b\1\u032e\1\u010b\1\u032e\7\u010b\2\u032e\1\u010b" + + "\2\u032e\4\u010b\2\u032e\17\u010b\1\u032e\1\u010b\1\u032e\3\u010b" + + "\1\u032e\11\u010b\1\u032e\17\u010b\2\u032e\3\u010b\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\4\6\1\u032f\1\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\3\157\5\u0330\2\157\1\u0116" + + "\2\157\1\u0330\1\u0117\1\u0330\7\157\2\u0330\1\157\2\u0330" + + "\4\157\2\u0330\17\157\1\u0330\1\157\1\u0330\3\157\1\u0330" + + "\11\157\1\u0330\17\157\2\u0330\3\157\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u0331\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u0332" + + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + + "\1\u0333\14\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\13\6\1\u0334\3\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u0335\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0336" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u019c\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\22\6" + + "\1\u0337\2\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u0338\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u0339\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\6\1\u033a\4\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\3\6\1\u033b\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u033c" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u02ff\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\3\6\1\u033d\2\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\6\6\1\u033e\10\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u033f" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u0340\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u0341\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\1\6\1\u0342\15\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\u0343\2\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u0344\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u0345\4\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\1\6\1\u0346\15\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u0347\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u0348\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\1\6\1\u0349\1\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u034a" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\2\6\1\u034b\22\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\1\u034c\5\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\13\6\1\u034d\11\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\6\6\1\u034e\10\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u034f" + + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + + "\1\u0134\14\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u0350\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\u0351\5\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\4\6\1\241\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u0352\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\4\6\1\u01fd\1\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\4\6\1\u0353\12\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0137\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\13\6\1\u0137\3\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\1\6\1\u0354\1\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\2\6\1\u0355" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u0356\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\7\6\1\u0357\7\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\4\6\1\u0358\12\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u0359\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\u035a\2\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u01d2\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\1\6\1\u035b\15\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\2\6\1\u027d\3\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\7\6\1\u035c\7\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u035d\4\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\7\6\1\u035e\7\6\1\5\1\0\25\6\1\0" + + "\3\5\5\u035f\2\0\3\5\1\u035f\1\0\1\u035f\1\0" + "\2\5\3\0\1\5\2\u035f\1\5\2\u035f\2\0\2\5" + + "\2\u035f\2\5\13\0\2\5\1\u035f\1\5\1\u035f\3\5" + "\1\u035f\7\5\1\0\1\5\1\u035f\17\5\2\u035f\2\5" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u0360" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u0361\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\1\u0362\5\6\2\0\5\6\1\u0165\13\0\10\6\1\u0363" + + "\6\6\1\5\1\0\2\6\1\u0364\1\6\1\u0365\20\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\7\6\1\u0366\7\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u0367\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\2\6\1\u0207\14\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\7\6\1\u0368\7\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\13\6" + + "\1\u0369\3\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u036a\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\5\6\1\u036b\5\6" + + "\1\u036c\11\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\4\6\1\u036d\1\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u036e\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u036f" + + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u0370\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\2\6\1\u022d\14\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0371" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u01e6\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0372\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u0373\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\7\6\1\u0165\7\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u0374\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u0375" + + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\7\6\1\u0376" + "\7\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u0377\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u0378\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\13\6\1\u0379\11\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\2\6\1\u037a\6\6\1\u037b\13\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\3\6\1\u037c" + "\13\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u037d\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\2\6\1\u027d" + + "\3\6\2\0\1\u012b\5\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u037e\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u037f\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u0380\10\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u0381\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\2\6\1\u0382\14\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\6\1\u0383\1\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\5\6\1\u0384\17\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\1\6\1\u0385\15\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\1\6\1\u0386\15\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\3\6" + + "\1\u0387\13\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u0388\10\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\4\6\1\u0389\12\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\11\6\1\u038a\5\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u038b\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\14\6\1\u038c\2\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u038d\2\6\13\0\17\6\1\5\1\0\25\6" + "\15\0\1\u038e\111\0\1\5\7\6\2\0\1\123\1\6" + + "\1\u038f\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u0390\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u0391\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u0392\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u0393\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0394" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u0395\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\u0396\4\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\u0397\16\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u0398\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\11\6\1\u0399\13\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\12\6\1\u0209\4\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u039a\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\1\6\1\u039b\1\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + "\1\u039c\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u039d\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\5\6\1\u039e\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\2\6\1\u039f\14\6" + + "\1\u029a\5\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u03a0\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u03a1\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\13\6\1\u0202\3\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\15\6\1\u0295\1\6\1\5\1\0" + "\4\6\1\u0296\6\6\1\u0298\3\6\1\u029a\5\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u03a2\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u0165\4\6\13\0\17\6" + "\1\5\1\0\1\6\1\u03a3\23\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u03a4\2\6\13\0\17\6" + + "\1\5\1\0\25\6\25\0\1\u0257\125\0\1\u025a\140\0" + + "\1\u03a5\127\0\1\u03a6\154\0\1\u03a7\74\0\1\u03a8\150\0" + + "\1\u03a9\125\0\1\u03aa\56\0\1\u03ab\172\0\1\u03ac\106\0" + + "\1\u03ad\124\0\1\u0263\127\0\1\u03ae\123\0\1\u03af\153\0" + + "\1\u0263\131\0\1\u03b0\72\0\1\u03b1\152\0\1\u0263\126\0" + + "\1\u03b2\135\0\1\u03b3\70\0\1\u03b4\161\0\1\u03b5\71\0" + + "\1\u03b3\125\0\1\u03b6\100\0\1\u031b\136\0\1\u0273\101\0" + "\3\5\5\6\2\0\3\5\1\6\1\0\1\6\1\0" + + "\2\5\3\0\1\5\2\6\1\5\2\6\2\0\2\5" + "\2\6\2\5\13\0\2\5\1\6\1\5\1\6\3\5" + + "\1\6\7\5\1\0\1\5\1\6\17\5\2\6\2\5" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u03b7\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\u03b8\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\3\6\1\u03b9\2\6\13\0\6\6\1\u03ba" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\6\1\u0340\15\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\1\6\1\u03bb\15\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u03bc" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u03bd" + + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u03be\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u03bf\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u03c0\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\3\6\1\u03c1\21\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u03c2\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u03c3" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\3\u010b" + "\5\144\1\145\1\0\3\u010b\1\144\1\u010b\1\144\7\u010b" + + "\2\144\1\u010b\2\144\4\u010b\2\144\17\u010b\1\144\1\u010b" + + "\1\144\3\u010b\1\144\11\u010b\1\144\17\u010b\2\144\3\u010b" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\14\6" + "\1\241\2\6\1\5\1\0\25\6\1\0\3\157\5\16" + + "\2\157\1\u0116\2\157\1\16\1\u0117\1\16\7\157\2\16" + "\1\157\2\16\4\157\2\16\17\157\1\16\1\157\1\16" + + "\3\157\1\16\11\157\1\16\17\157\2\16\3\157\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\1\0\1\u03c4\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\7\6\1\u03c5\7\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\1\u0362\5\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\7\6\1\u03c6\15\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u038c" + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\5\6\1\u03c7\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u03c8\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\1\0\1\u03c9" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u03ca\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u0165\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u03cb\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u01df\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\4\6\1\u03cc\1\6\2\0\1\u03cd\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\7\6\1\u03ce\7\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\4\6\1\u03cf\1\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + "\1\u03d0\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\u03d1\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\3\6\1\u03d2\13\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u03d3\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u0341\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u03d4\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\6\6\1\u03cf\10\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u03d5\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u03d6\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\3\6\1\u0165\13\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u03d7\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\6\6\1\u03d8\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u03d9\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\6\6\1\u03da\10\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\2\6\1\u03db\3\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u03dc\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\4\6\1\u01fd\12\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\2\6\1\u03dd\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u03de\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u03df\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\1\u0137\2\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u03e0" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u03e1" + "\12\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u03e2\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u03e3\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\3\6\1\u03e4\13\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u0359\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\1\6\1\u03e5\1\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u03e6\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\4\6" + + "\1\u03e7\12\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\1\6\1\u03e8\23\6\1\0\3\5\5\u03e9\2\0\3\5" + + "\1\u03e9\1\0\1\u03e9\1\0\2\5\3\0\1\5\2\u03e9" + "\1\5\2\u03e9\2\0\2\5\2\u03e9\2\5\13\0\2\5" + + "\1\u03e9\1\5\1\u03e9\3\5\1\u03e9\7\5\1\0\1\5" + "\1\u03e9\17\5\2\u03e9\2\5\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\6\1\u03ea\15\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\4\6\1\u03eb\12\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\6\6\1\u03ec\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\244\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\u03ed\5\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u03ee" + + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u03ef\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u03f0\10\6" + "\1\5\1\0\25\6\1\0\1\5\5\6\1\u03f1\1\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\5\6\1\u03f2\17\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\1\6" + + "\1\u03f3\4\6\2\0\6\6\13\0\15\6\1\u0295\1\6" + "\1\5\1\0\4\6\1\u0365\1\u03f2\11\6\1\u029a\4\6" + + "\1\u03f4\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\11\6\1\u03f5\13\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u03f6\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\12\6\1\u03f7\4\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\6\6\1\u03f8\10\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u03f9\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u03fa\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\4\6\1\u03fb\12\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u03fc\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\5\6\1\u03fd\17\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u03fe" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u03ff\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u0400" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\7\6" + "\1\u0401\7\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u0402\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u0403\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\u0404\2\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\u0405\5\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\6\6\1\u0406\10\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u0407\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\2\6\1\u0408\14\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\7\6\1\u0409\7\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + "\1\u040a\1\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u040b\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\3\6\1\u03d6\13\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\1\u040c\5\6" + "\1\0\1\u040d\6\6\13\0\10\6\1\u040e\6\6\1\5" + + "\1\0\16\6\1\u040f\6\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\14\6\1\u0410\2\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u0411\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u0202\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u0412\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\1\6\1\u0413\15\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + + "\1\u0414\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\16\6\1\u0415" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\1\6\1\u0416\1\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + + "\1\u0417\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\5\6\1\u0418\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\4\6\1\u0419\1\6\13\0\17\6\1\5" + + "\1\0\25\6\37\0\1\u041a\67\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\13\6\1\u041b\3\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\6\6\1\u041c\10\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\4\6\1\u041d\1\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\12\6\1\u041e" + "\4\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\2\6\1\u041f\3\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u0420\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + "\1\u0421\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u0422\10\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\4\6" + + "\1\u0423\1\u0424\2\0\6\6\13\0\17\6\1\5\1\0" + "\11\6\1\u0425\13\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\2\6\1\u0426" + + "\22\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + + "\1\u0427\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\5\6\1\u0165\13\0" + "\17\6\1\5\1\0\2\6\1\u0428\1\6\1\u0429\6\6" + + "\1\u042a\11\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u042b\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u042c\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u042d\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\5\6\1\u042e\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u042f\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u0430\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u0431\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\6\6\1\u0432\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\2\6\1\u0433\3\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\5\6\1\u0434\13\0\17\6\1\5\1\0" + "\25\6\66\0\1\u0435\121\0\1\u0436\107\0\1\u0263\76\0" + + "\1\u0263\153\0\1\u0310\121\0\1\u0317\150\0\1\u0310\103\0" + + "\1\u0263\130\0\1\u0437\123\0\1\u0438\150\0\1\u0439\122\0" + + "\1\u043a\61\0\1\u0435\171\0\1\u03a8\45\0\44\u03b3\1\u0263" + + "\61\u03b3\37\0\1\u043b\146\0\1\u043c\104\0\1\u043d\66\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\14\6" + "\1\u0165\2\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\6\1\u043e\4\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\5\6\1\u043f\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u0440" + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u0441\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\4\6\1\u0150\1\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u0442\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\12\6" + + "\1\u0443\4\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u0444\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u0445\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u0446\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u0447\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u0448\10\6\1\5" + + "\1\0\25\6\7\0\1\u0449\17\0\1\u044a\1\u044b\2\0" + "\1\u044c\73\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\2\6\1\u044d\3\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u044e\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u044f\15\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u0450\4\6\13\0\17\6\1\5\1\0" + + "\25\6\34\0\1\u0451\33\0\1\u0452\36\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u0453\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u0454\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + + "\1\u0455\1\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0456\1\u0457" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u0458\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\u02cc\5\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\4\6\1\u0459\12\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + + "\1\u02cc\14\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\u045a\2\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\4\6\1\u045b" + "\1\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\7\6\1\u045c\7\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\5\6\1\u045d\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\u045e\5\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u045f" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u0460" + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u0461\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u0462\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\14\6\1\u0463\10\6\1\0\1\5\7\6" + + "\2\0\1\123\1\6\1\u01fd\1\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\3\6\1\241\13\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u0464" + + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0156\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\4\6\1\u0137\12\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u0465\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u0466" + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u0467\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\u0468\2\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + + "\1\u0469\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\5\6\1\u01eb\2\0\6\6\13\0" + "\17\6\1\5\1\0\15\6\1\u0299\7\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u046a\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\4\6\1\u046b\12\6\1\5" + "\1\0\25\6\1\0\3\5\5\256\2\0\3\5\1\256" + + "\1\0\1\256\1\0\2\5\3\0\1\5\2\256\1\5" + "\2\256\2\0\2\5\2\256\2\5\13\0\2\5\1\256" + + "\1\5\1\256\3\5\1\256\7\5\1\0\1\5\1\256" + "\17\5\2\256\2\5\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\5\6\1\u01c6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u046c\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\5\6\1\u01e1\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u046d\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\2\6\1\u0173\14\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u046e\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\1\6\1\u046f\15\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\1\6\1\u0470\15\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + "\1\u0471\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\1\u0472\2\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\1\6\1\u0473\15\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u0474" + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\u0475\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u0476\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\1\u0477\24\6\1\0" + + "\1\5\5\6\1\u0478\1\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\1\u0324\5\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\14\6\1\u0479" + "\2\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u047a\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u047b\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\6\6\1\u047c\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\4\6\1\u047d\1\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\4\6\1\u038c\1\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\3\6\1\u047e\13\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u047f" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u0480" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u0481\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u0482\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u0483\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\5\6\1\u0484\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u0485\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\5\6\1\u0486\1\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\13\6\1\u0487\1\6\1\u0488" + + "\7\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + + "\1\u0489\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\4\6\1\u048a\1\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\1\6\1\u048b\1\u048c\2\6" + + "\1\u048d\3\6\1\u048e\13\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\14\6\1\u0254\2\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u048f\15\6\1\5\1\0\25\6" + + "\103\0\1\u0490\3\0\1\u0491\17\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u03f5\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u0492\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\1\u0493\5\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\5\6\1\u0494\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\15\6\1\u0495\7\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u0496" + + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\2\6\1\u0497\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u0498\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\4\6\1\u0499\1\u0418" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\202\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\11\6\1\u049a\13\6\40\0\1\u049b\66\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\4\6\1\u049c\1\6\2\0\6\6\13\0\15\6" + "\1\u049d\1\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\1\6\1\u049e\1\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\1\6\1\u049f\15\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u04a0\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u017b\1\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\10\6\1\u04a1\6\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\12\6\1\u04a2\4\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + + "\1\u04a3\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + "\1\u04a4\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\4\6\1\u04a5\1\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u04a6\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u04a7" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\7\6\1\u04a8" + + "\7\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\u04a9\5\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u04aa" + + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\u04ab\2\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\4\6\1\u04ac\1\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\16\6\1\u04ad\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + + "\1\u04ae\5\6\1\u04af\2\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\1\6\1\u04b0\4\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\6\1\u04b1\4\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\14\6\1\u04b2\2\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\12\6\1\u04b3\4\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u04b4\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u04b5\15\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\1\u04b6\16\6\1\5\1\0\25\6" + + "\42\0\1\u04b7\127\0\1\u04b8\114\0\1\u04b9\34\0\1\u04ba" + + "\74\0\1\u0310\130\0\1\u04bb\123\0\1\u04bc\127\0\1\u04bd" + + "\144\0\1\u04be\132\0\1\u04bf\40\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\1\0\1\u04c0\6\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0130" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u04c1" + + "\12\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\7\6\1\u04c2\7\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\2\6\1\u04c3\22\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u04c4" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u04c5\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\14\6\1\u04c6\2\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u04c7\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u04c8\1\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u04c9" + + "\15\6\1\5\1\0\25\6\42\0\1\u04ca\125\0\1\u04cb" + "\77\0\1\u04cc\177\0\1\u04cd\40\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u04ce\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u04cf\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\1\u04d0\2\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u0187\2\6\13\0\17\6\1\5" + + "\1\0\25\6\15\0\1\u04d1\151\0\1\u04d1\65\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\3\6\1\u04d2" + "\13\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\14\6\1\u04d3\2\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u04d4\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u04d5" + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\2\6\1\u04d6\3\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\4\6\1\u0293\1\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u04d7\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u04d8\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u04d9\15\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\6\6\1\u04da\10\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u04db" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u04dc" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u04dd\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + "\1\u04de\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u04df\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u04e0\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u04e1\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\6\6\1\u04e2\10\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + + "\1\u04e3\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u0134\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u04e4\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u04e5\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u03b7\4\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\1\6" + "\1\u04e6\4\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\4\6\1\u04e7\12\6\1\5\1\0\25\6\1\0" + "\1\5\5\6\1\u04e8\1\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\1\u0362\5\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\2\6\1\u04e9\6\6" + + "\1\u04ea\6\6\1\76\4\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u04a2\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\6\6\1\u04eb\10\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u038c\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u04ec\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\16\6\1\u04ed\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\2\6\1\u04ee" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u04ef\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\6\6\1\u021c\10\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u018a\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\4\6\1\u04f0\12\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u04f1\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u04f2\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u04f3\15\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\5\6" + "\1\u01eb\2\0\6\6\13\0\17\6\1\5\1\0\11\6" + + "\1\u04f4\13\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\4\6\1\u0296\20\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u04f5\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\7\6\1\u04f6\7\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u04f7\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u04f8" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u04f9\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\3\6\1\u04fa\2\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\2\6\1\u04fb" + "\3\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\13\6\1\u04fc\11\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u04fd\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\7\6\1\u04fe\7\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u04ff\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u0500" + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\2\6\1\u0501\3\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u0502\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\2\6\1\u0503\14\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u0504\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u0505\4\6\13\0" + "\4\6\1\u0506\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u0507\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\1\u0508\16\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u0509\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\4\6\1\u050a" + + "\12\6\1\5\1\0\25\6\37\0\1\u050b\103\0\1\u050c" + "\111\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u050d\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u050e" + + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\16\6\1\u0165\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u050f\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u0510\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u0511\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\2\6\1\u0512\14\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u0513\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u0514\2\6\13\0" + "\17\6\1\5\1\0\25\6\74\0\1\u0515\32\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u0516" + + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u0517\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u0518\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u0519\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\1\6\1\u051a\23\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u051b\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + + "\1\u0130\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u051c\1\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u051d\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u051e\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u051f" + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u0520\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\1\6\1\u0521\15\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u0522\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\3\6\1\u0523\13\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u0524\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\1\u0525" + "\5\6\2\0\6\6\13\0\10\6\1\u0526\6\6\1\5" + + "\1\0\4\6\1\u0527\20\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\15\6\1\u0295\1\6\1\5" + "\1\0\4\6\1\u0296\20\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0528\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\15\6\1\u0288\1\6\1\5\1\0\15\6" + "\1\u0299\7\6\1\0\1\5\7\6\2\0\1\123\1\u0529" + + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u052a\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\20\6\1\76\4\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u052b\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u052c" + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u052d\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\11\6\1\u029d\13\6\43\0\1\u0263\124\0\1\u052e\151\0" + + "\1\u052f\101\0\1\u0530\122\0\1\u0531\162\0\1\u0263\74\0" + + "\1\u03b3\121\0\1\u03b3\125\0\1\u0532\116\0\1\u044b\76\0" + "\1\5\7\6\2\0\1\123\1\u0533\2\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u0534\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u0535" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u0536\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\1\0\1\u0537\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\15\6\1\u0295\1\6\1\5\1\0\17\6" + "\1\u029a\5\6\1\0\1\5\7\6\2\0\1\123\1\6" + + "\1\u0538\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0539\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\6\1\u053a\1\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\37\0\1\u053b\103\0\1\u053c\176\0" + + "\1\u053d\102\0\1\u053e\63\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u04ad\4\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\1\u022d\16\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u053f\4\6\13\0" + + "\17\6\1\5\1\0\25\6\64\0\1\u0540\42\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\11\6\1\u0541\13\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\4\6" + + "\1\u0296\6\6\1\u0298\11\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\13\6\1\u0542\3\6\1\5" + "\1\0\25\6\1\0\1\5\5\6\1\u0543\1\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\1\0\1\u0544\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + + "\1\u0545\1\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + "\1\u0546\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\2\6\1\u039f\22\6\1\0\1\5\7\6\2\0\1\123" + "\1\u0547\2\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0548" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u0549\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\1\6\1\u0339\15\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\1\u0207\24\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\4\6\1\u054a\20\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\16\6\1\u0130\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u054b\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\4\6" + + "\1\u01e1\12\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + "\1\u03df\24\6\1\0\1\5\7\6\2\0\1\123\2\6" + + "\1\241\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\4\6\1\u054c\1\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\u054d\2\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\2\6\1\u054e\3\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u054f\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u0550\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0551\1\u0552\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\4\6\1\u0130\12\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u0553\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0554\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\2\6\1\u0555\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\4\6\1\u03d1\1\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0556" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\2\6\1\u0557\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\2\6" + "\1\u0558\3\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u0559" + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u055a\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u055b\15\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u055c\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\2\6\1\u0130\14\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u055d\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\14\6\1\u055e\2\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\u055f\5\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u0560" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\2\6\1\u0561\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u0562\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + + "\1\u0563\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\2\6\1\u0564\3\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u0565\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\14\6\1\u0566" + "\10\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\1\6\1\u0567\15\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\1\u0568\5\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u0569\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\13\6\1\u056a\3\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\4\6\1\u056b\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u056c\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\6\1\u056d\4\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + "\1\u056e\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u056f" + "\2\6\13\0\17\6\1\5\1\0\25\6\42\0\1\u0570" + + "\147\0\1\u0571\42\0\1\5\7\6\2\0\1\123\1\u0348" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\5\6\1\u0572\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0573\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u0574\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0575" + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\4\6\1\u0576\20\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u0577\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\4\6\1\u0578\12\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u0579" + + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\5\6\1\u057a\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u057b\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\7\6\1\u057c\7\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u057d\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\2\6\1\u057e\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u057f\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u0580" + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\7\6\1\u0581" + + "\7\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\1\u0582\16\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u0583\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u02e7\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u0584\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\1\u0585\2\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\3\6\1\u0586\13\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\1\6\1\u0587" + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u0588\2\6\13\0\1\6\1\u0589" + + "\15\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u01e1\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\5\6\1\u0165\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + + "\1\u058a\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u02cf\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\4\6\1\u058b" + + "\20\6\1\0\1\5\5\6\1\u058c\1\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u047d\5\6\13\0" + "\17\6\1\5\1\0\25\6\16\0\1\u058d\150\0\1\u058e" + + "\123\0\1\u058f\127\0\1\u0590\154\0\1\u0591\36\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\4\6\1\u0592\1\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\u038c\5\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\3\6\1\u0593\13\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\5\6\1\u0594\13\0" + "\17\6\1\5\1\0\25\6\103\0\1\u0595\3\0\1\u0596" + + "\17\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\4\6\1\u0202\12\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\11\6\1\u0597\13\6\41\0\1\u0598\157\0\1\u0599" + + "\75\0\1\u059a\121\0\1\u059b\67\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\4\6\1\u059c\12\6\1\5" + "\1\0\25\6\61\0\1\u059a\45\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0551\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\u059d\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u059e\1\6" + "\13\0\17\6\1\5\1\0\25\6\30\0\1\u059f\76\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u05a0\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\3\6\1\u0187\13\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\1\6\1\u04f7\1\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + + "\1\u045e\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\6\1\u05a1\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u05a2\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + "\1\u05a3\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u05a4\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u05a5\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\5\6\1\u05a6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + "\1\u05a7\1\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u0165\5\6\13\0" + + "\17\6\1\5\1\0\3\6\1\u05a8\21\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\u05a9\5\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\3\6\1\u05aa\13\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u05ab\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\6\1\u05ac\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u05ad\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\5\6\1\u05ae" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u05af\1\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\4\6\1\u05b0\1\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\2\6\1\u05b1\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u05b2\1\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\6\1\u05b3\4\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\23\6" + "\1\u02e0\1\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\2\6\1\u05b4\14\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\2\6\1\u05b5\22\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u05b6" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u05b7\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\1\6\1\u05b8" + + "\4\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\7\6\1\u05b9\7\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u05ba\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\4\6\1\u05bb\1\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + "\1\u05bc\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u05bd\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\3\6\1\u05be\13\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u05bf\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\7\6\1\u05c0\7\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\u051e\2\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\2\6\1\u05c1\3\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u04a2" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u05c2\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u05c3\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\4\6\1\u0165\1\6\13\0\17\6\1\5\1\0\25\6" + "\37\0\1\u05c4\130\0\1\u05c5\64\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\u05c6\5\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + + "\1\u0581\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\2\6\1\u05c7" + "\14\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\2\6\1\u05c8\14\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\13\6\1\u0130\11\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\7\6\1\u05c9\7\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\1\u05ca\16\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\7\6\1\u05cb\7\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\1\6\1\u05cc\15\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u0130\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\3\6\1\u043f\2\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u05cd\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\4\6\1\u05ce\1\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\1\u05cf\24\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\2\6\1\300\14\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u05d0\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u0580\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\u05d1\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\3\6\1\u05d2\2\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u05d3\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\u05d4\2\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u05d5\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u05d6\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\u02b7\2\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\4\6\1\u05d7\1\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\u05d8\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u05d9\2\6" + + "\13\0\17\6\1\5\1\0\25\6\41\0\1\u05da\127\0" + "\1\u0590\124\0\1\u0263\145\0\1\u0263\124\0\1\u05db\45\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u05dc\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\3\6\1\u0433\13\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\6\6\1\u05dd\10\6\1\5\1\0" + + "\25\6\14\0\1\u05de\126\0\1\u05df\111\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u05e0\15\6" + "\1\5\1\0\25\6\73\0\1\u05e1\46\0\1\u05e2\173\0" + + "\1\u05e3\104\0\1\u05e4\65\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u05e5\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\5\6\1\u05e6\1\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + + "\1\u05e7\15\6\1\5\1\0\25\6\66\0\1\u05e8\40\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\4\6\1\u05e9\1\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u0232\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\4\6\1\u05ea\20\6" + "\1\0\1\5\7\6\2\0"; + + private static final String ZZ_TRANS_PACKED_1 = "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u05eb\3\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u05ec\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\2\6\1\u05ed\14\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\5\6\1\u05ee\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\4\6\1\u05ef\1\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u05f0\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\1\u05f1\16\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\1\0\1\u05f2\6\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\3\6\1\u052d\13\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u05f3" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\6\1\u05f4\4\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\4\6\1\u05f5\1\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u05f6\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u05f7\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u05f8\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u05f9\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\1\0\1\u05fa\5\6" + + "\1\u05fb\13\0\15\6\1\u05fc\1\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\5\6\1\u01eb\2\0\6\6" + "\13\0\17\6\1\5\1\0\4\6\1\u0576\20\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u05fd\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\1\6\1\u05fe\15\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\5\6\1\u05ff\17\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\1\6\1\u0600\15\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\15\6\1\u0295" + "\1\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\4\6\1\u0601\12\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u0602\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0130" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\4\6\1\u043f\12\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\2\6\1\u0603\3\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\4\6\1\u0604\12\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u0605\2\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\5\6\1\u0606\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u0607\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u0608\5\6" + + "\13\0\17\6\1\5\1\0\25\6\41\0\1\u0515\100\0" + "\1\u0609\112\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u060a\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\5\6\1\u060b\1\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\5\6\1\u060c\2\0" + + "\6\6\13\0\17\6\1\5\1\0\13\6\1\u060d\11\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\1\u060e\5\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u060f\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\6\6\1\u0610\10\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\3\6" + "\1\u0611\2\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\u0612\2\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\3\6\1\u0613\2\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u0614\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u0615" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\6\1\u043f\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\7\6\1\u0616\7\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\7\6\1\u0617\7\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\2\6\1\u0618\5\6\1\u0619\14\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u061a\5\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\13\6\1\u0165\3\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u0130\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\2\6\1\u061b\14\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u061c\3\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\4\6\1\u061d\1\6\13\0\17\6" + + "\1\5\1\0\25\6\37\0\1\u04bc\152\0\1\u03b3\42\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u061e\4\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u061f\15\6" + + "\1\5\1\0\25\6\31\0\1\u0620\162\0\1\u0621\40\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + "\1\u0622\14\6\1\5\1\0\25\6\61\0\1\u041a\106\0" + + "\1\u0623\124\0\1\u0624\124\0\1\u0625\66\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\1\6\1\u0626\4\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\1\6\1\u0627\15\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + + "\1\u047d\13\0\17\6\1\5\1\0\25\6\73\0\1\u0628" + "\33\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u0629" + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u062a\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u062b\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\7\6\1\u062c\7\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u062d" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\4\6\1\u062e\1\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u062f\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u0630\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u0631\15\6\1\5\1\0\25\6\103\0\1\u0632" + + "\23\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\1\u02cc\24\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u0633\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\11\6\1\u038c\5\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\15\6\1\u0299\7\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\13\6" + "\1\u0634\3\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\13\6\1\u02cc\3\6" + + "\1\5\1\0\25\6\114\0\1\u0635\12\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\1\0\1\u0636\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u0637\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u0638" + + "\2\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\1\6\1\300\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\u0639\16\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\u063a\2\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\1\u0130\16\6" + "\1\5\1\0\25\6\1\0\1\5\5\6\1\u063b\1\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + + "\1\u063c\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\3\6\1\u063d\2\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u063e\5\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\5\6\1\300\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\2\6" + "\1\u063f\14\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u0640\15\6" + + "\1\5\1\0\25\6\73\0\1\u0641\33\0\1\5\7\6" + "\2\0\1\123\1\6\1\u0642\1\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\4\6\1\u0643\1\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u0644" + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\3\6" + "\1\u0645\13\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u0646\10\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\u0647\5\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u0334\1\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u0648\5\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\1\6\1\u0649\4\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\14\6\1\u064a\2\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\1\u064b\2\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\2\6\1\u063d\3\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\17\6\1\u029a\5\6" + + "\1\0\1\5\5\6\1\u064c\1\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\4\6\1\u064d" + + "\1\u01eb\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u064e\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\3\6\1\u064f\2\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\2\6\1\u0650" + "\22\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\2\6" + "\1\u0651\3\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\6\1\u0652\4\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\2\6\1\u0653\3\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\6\6\1\u0654\10\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\1\6\1\u0130" + "\1\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\44\0" + "\1\u0655\145\0\1\u0656\42\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\6\6\1\u0657\10\6\1\5\1\0" + + "\25\6\73\0\1\u0658\72\0\1\u0515\153\0\1\u0659\40\0" + "\1\5\7\6\2\0\1\123\1\u065a\2\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u065b\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\70\0\1\u065c\36\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\3\6\1\u065d\2\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\6\6\1\u065e\10\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\15\6\1\u065f\7\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u0660\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\2\6\1\u0661\3\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u027d\10\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u03d6\12\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\1\6\1\u0662\1\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\2\6\1\u038c\14\6\1\5" + "\1\0\25\6\66\0\1\u0663\40\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\7\6\1\u0664\7\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\u0665" + "\2\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\16\0" + "\1\u0666\211\0\1\u0667\24\0\1\5\7\6\2\0\1\123" + + "\1\6\1\u0668\1\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u0669" + + "\5\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u066a\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u066b\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\4\6\1\u066c\1\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u066d\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\4\6\1\u04a2\1\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\5\6\1\u066e\1\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\4\6\1\u066f\1\u01eb\2\0\6\6\13\0\17\6" + "\1\5\1\0\15\6\1\u0670\1\6\1\u0671\5\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + + "\1\5\1\0\2\6\1\u048c\22\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u063f\4\6\13\0\17\6" + "\1\5\1\0\25\6\60\0\1\u0672\46\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u0673\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\3\6\1\u0674\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\4\6\1\u0675\12\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\2\6\1\u0676\3\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\1\6\1\u0677\1\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\5\6\1\u0279\1\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\4\6\1\u066f\1\6\2\0\6\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\1\6\1\u0678" + "\15\6\1\u0671\5\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\4\6\1\u04a2\12\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\2\6\1\u0679\22\6\1\0" + "\1\5\7\6\2\0\1\123\1\6\1\u0631\1\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\4\6\1\u067a\1\6\13\0\1\6" + + "\1\u067b\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\6\6\1\u067c\10\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\1\6\1\u067d\4\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\4\6" + + "\1\u067e\1\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u067f\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\1\6\1\u0680\4\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u0681\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u0682\1\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\1\u02e7\5\6\13\0\17\6" + + "\1\5\1\0\25\6\41\0\1\u0683\145\0\1\u0684\45\0" + "\1\5\7\6\2\0\1\123\2\6\1\u0685\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\41\0\1\u0686\101\0\1\u0687" + + "\111\0\1\5\7\6\2\0\1\123\1\6\1\u0688\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\12\6\1\u0689" + "\4\6\1\5\1\0\25\6\41\0\1\u068a\65\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\13\6\1\u0528" + + "\3\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\u068b\5\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\6" + "\1\u068c\4\6\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u068d\5\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\1\0\1\u068e\6\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\1\u068f" + "\5\6\13\0\17\6\1\5\1\0\25\6\67\0\1\u0690" + + "\37\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u0527" + + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u0691\4\6\13\0" + "\17\6\1\5\1\0\25\6\27\0\1\u0692\40\0\1\u0693" + + "\14\0\1\u0694\10\0\1\u0695\40\0\1\u0696\75\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\2\6\1\u0697" + "\14\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u0698\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u0699\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\2\6\1\u05bc\14\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\3\6\1\u069a\2\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u069b\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u069c\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u069d" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\1\6\1\u069e\4\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u069f\10\6\1\5" + + "\1\0\25\6\37\0\1\u06a0\67\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u05bc\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\5\6\1\u06a1\13\0\17\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\6" + + "\1\u06a2\15\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\6\1\u06a3\4\6\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\6\6\13\0\16\6\1\u038c\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\1\6\1\u0505" + + "\4\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u06a4" + "\10\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u06a5\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\1\6" + "\1\u06a6\1\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\2\6\1\u06a7" + "\3\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u06a8\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u06a9\10\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u06aa\4\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\1\0\1\u06ab\6\6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\1\u06ac\5\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\2\6\1\u06ad\14\6\1\5\1\0\25\6" + + "\37\0\1\u0515\150\0\1\u06ae\44\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\6\6\1\u06af\10\6\1\5" + "\1\0\25\6\75\0\1\u06b0\123\0\1\u06b1\33\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\2\6\1\u027d" + + "\14\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\2\6\1\u06b2\3\6\13\0\17\6\1\5" + "\1\0\25\6\64\0\1\u06b3\42\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u06b4\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\1\6\1\u06b5\15\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\4\6\1\u066f\1\6\2\0" + "\6\6\13\0\17\6\1\5\1\0\25\6\7\0\1\u06b6" + + "\117\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\6\6\1\u06b7\10\6\1\5\1\0\25\6\63\0\1\u06b8" + "\43\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u02c0" + "\2\6\13\0\17\6\1\5\1\0\25\6\61\0\1\u06b9" + + "\125\0\1\u06ba\61\0\1\u0683\150\0\1\u06bb\131\0\1\u06bc" + "\62\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\1\6\1\u02cf\15\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\5\6\1\u06bd\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\3\6\1\u06be\2\6\13\0\17\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\5\6" + "\1\u06bf\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u06c0\3\6\13\0" + + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + "\1\123\1\6\1\u03be\1\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\2\6\1\u06c1" + "\14\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\3\6\1\u06c2\2\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u06c3\3\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\2\6\1\u06c4\14\6\1\5\1\0\25\6\34\0\1\u06c5" + + "\72\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u06c6" + + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\2\6\1\u06c7\14\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\3\6\1\u06c8\2\6\13\0\17\6\1\5\1\0" + + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\17\6\1\5\1\0\1\u04a2\24\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\5\6\1\u0528\13\0\17\6" + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + "\2\0\5\6\1\u06c9\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\4\6\1\u0188" + + "\1\6\13\0\17\6\1\5\1\0\25\6\1\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\3\6\1\u06ca\2\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\2\6\1\u0347\14\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\2\6\1\u06cb\3\6\13\0\17\6\1\5\1\0\25\6" + "\75\0\1\u06cc\31\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\1\6\1\u06cd\15\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u01e6" + + "\2\6\13\0\17\6\1\5\1\0\25\6\41\0\1\u06ce" + "\65\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\4\6\1\u06a3\12\6\1\5\1\0\25\6\42\0\1\u06cf" + + "\175\0\1\u06d0\14\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\6\1\u06d1\4\6\13\0\17\6\1\5\1\0\25\6" + "\66\0\1\u06d2\40\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u06d3\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\5\6\1\u03b7\11\6\1\5\1\0\25\6\61\0\1\u06d4" + "\45\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\3\6\1\u06d5" + "\2\6\13\0\17\6\1\5\1\0\25\6\43\0\1\u06d6" + + "\77\0\1\u06d7\124\0\1\u06d8\177\0\1\u06d9\76\0\1\u06da" + "\67\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\1\u06db\5\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\2\6\1\u06dc\14\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\5\6\1\u06dd\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0417" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\2\6\1\u06de\3\6\13\0\17\6" + + "\1\5\1\0\25\6\1\0\1\5\7\6\2\0\1\123" + "\3\6\1\0\1\6\1\0\1\5\1\6\3\0\6\6" + + "\2\0\6\6\13\0\13\6\1\u05bc\3\6\1\5\1\0" + "\25\6\1\0\1\5\7\6\2\0\1\123\3\6\1\0" + + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + "\13\0\4\6\1\u06df\12\6\1\5\1\0\25\6\1\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\1\u0601\5\6\13\0" + + "\17\6\1\5\1\0\25\6\65\0\1\u06e0\41\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + "\1\0\10\6\1\u06e1\14\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\6\6\1\u06e2\10\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\1\u0594\5\6\13\0\17\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\1\u06e3\5\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\7\6\1\u06e4\7\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u06e5\2\6\13\0\17\6\1\5\1\0\25\6" + "\41\0\1\u06e6\65\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\1\6\1\u06e7\4\6\13\0\17\6\1\5\1\0\25\6" + + "\30\0\1\u06e8\52\0\1\u06e9\37\0\1\u06ea\171\0\1\u06eb" + "\45\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u06ec" + "\13\0\17\6\1\5\1\0\25\6\67\0\1\u06ed\37\0" + + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u06ee\1\6" + + "\13\0\17\6\1\5\1\0\25\6\15\0\1\u06ef\111\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\4\6\1\u06f0\1\6" + "\13\0\17\6\1\5\1\0\25\6\41\0\1\u06f1\157\0" + + "\1\u0515\63\0\1\u06f2\163\0\1\u06f3\76\0\1\u06f4\66\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\6\6" + "\1\u06f5\10\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\1\u040c\5\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\5\6\1\u06f6\1\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\15\6\1\u06f7\7\6\1\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\6\6\1\u0536" + + "\10\6\1\5\1\0\25\6\64\0\1\u06f8\42\0\1\5" + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + + "\1\6\3\0\6\6\2\0\2\6\1\u06f9\3\6\13\0" + "\17\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u06fa\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\3\6\1\u06fb\2\6\13\0\17\6\1\5\1\0\25\6" + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\1\0\1\u06fc\6\6" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\7\6\1\u06fd\7\6" + + "\1\5\1\0\25\6\62\0\1\u06fe\44\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\1\0\1\u06ff\6\6\13\0\17\6\1\5" + "\1\0\25\6\43\0\1\u0700\146\0\1\u0701\134\0\1\u05c4" + + "\114\0\1\u05c4\44\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\6\6\1\u0702\10\6\1\5\1\0\25\6" + "\42\0\1\u0703\64\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\6\6\1\u0704\10\6\1\5\1\0\25\6" + + "\37\0\1\u0705\67\0\1\5\7\6\2\0\1\123\3\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\1\u0362\5\6" + + "\2\0\6\6\13\0\17\6\1\5\1\0\25\6\34\0" + "\1\u02e9\50\0\1\u0706\63\0\1\u05c4\150\0\1\u0707\101\0" + + "\1\u0708\64\0\1\5\7\6\2\0\1\123\3\6\1\0" + "\1\6\1\0\1\5\1\6\3\0\6\6\2\0\6\6" + + "\13\0\4\6\1\u0528\12\6\1\5\1\0\25\6\1\0" + "\1\5\7\6\2\0\1\123\3\6\1\0\1\6\1\0" + + "\1\5\1\6\3\0\6\6\2\0\6\6\13\0\1\u0709" + "\16\6\1\5\1\0\25\6\1\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\1\6\1\u070a\15\6\1\5" + + "\1\0\25\6\41\0\1\u070b\65\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u070c\4\6\13\0\17\6\1\5" + "\1\0\25\6\1\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\6\6\13\0\13\6\1\u0130\3\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\1\6\1\u070d\1\6" + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + + "\6\6\13\0\17\6\1\5\1\0\25\6\117\0\1\u070e" + "\7\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\1\0\1\u070f\6\6" + "\13\0\17\6\1\5\1\0\25\6\66\0\1\u0710\153\0" + + "\1\u0711\72\0\1\u0712\104\0\1\u0713\66\0\1\5\7\6" + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + + "\3\0\6\6\2\0\6\6\13\0\1\6\1\u0714\15\6" + "\1\5\1\0\25\6\43\0\1\u0715\63\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\6\6\13\0\17\6\1\5\1\0" + + "\1\u0716\24\6\40\0\1\u0717\154\0\1\u0718\75\0\1\u0719" + "\152\0\1\u071a\42\0\1\5\7\6\2\0\1\123\3\6" + + "\1\0\1\6\1\0\1\5\1\6\3\0\6\6\2\0" + "\3\6\1\u071b\2\6\13\0\17\6\1\5\1\0\25\6" + + "\1\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + + "\6\6\1\u05d0\10\6\1\5\1\0\25\6\63\0\1\u071c" + "\43\0\1\5\7\6\2\0\1\123\3\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\5\6\1\u0367" + "\13\0\17\6\1\5\1\0\25\6\1\0\1\5\7\6" + + "\2\0\1\123\3\6\1\0\1\6\1\0\1\5\1\6" + "\3\0\6\6\2\0\1\u0528\5\6\13\0\17\6\1\5" + + "\1\0\25\6\41\0\1\u071d\202\0\1\u071e\47\0\1\u071f" + + "\103\0\1\u0720\173\0\1\u0721\127\0\1\u0722\40\0\1\5" + "\7\6\2\0\1\123\1\6\1\u0723\1\6\1\0\1\6" + + "\1\0\1\5\1\6\3\0\6\6\2\0\6\6\13\0" + "\17\6\1\5\1\0\25\6\27\0\1\u0724\77\0\1\5" + + "\7\6\2\0\1\123\3\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\2\6\1\u0725\3\6\13\0" + + "\17\6\1\5\1\0\25\6\61\0\1\u0726\133\0\1\u0727" + "\124\0\1\u0728\76\0\1\u0729\67\0\1\5\7\6\2\0" + + "\1\123\1\6\1\u0287\1\6\1\0\1\6\1\0\1\5" + "\1\6\3\0\6\6\2\0\6\6\13\0\17\6\1\5" + + "\1\0\25\6\37\0\1\u072a\125\0\1\u072b\102\0\1\u071d" + + "\152\0\1\u072c\113\0\1\u0692\40\0\1\u0693\14\0\1\u0694" + "\116\0\1\u0515\112\0\1\u0683\43\0\1\5\7\6\2\0" + + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + "\6\6\2\0\6\6\13\0\17\6\1\5\1\0\11\6" + + "\1\u037b\13\6\42\0\1\u072d\64\0\1\5\7\6\2\0" + "\1\123\3\6\1\0\1\6\1\0\1\5\1\6\3\0" + + "\6\6\2\0\1\6\1\u038c\4\6\13\0\17\6\1\5" + "\1\0\25\6\43\0\1\u0515\76\0\1\u072e\203\0\1\u05c4" + + "\62\0\1\u072f\40\0\1\u0730\12\0\1\u0731\1\0\1\u0732" + + "\106\0\1\u0733\72\0\1\u0734\156\0\1\u0735\135\0\1\u0736" + + "\70\0\1\u0737\147\0\1\u0738\125\0\1\u0739\127\0\1\u073a" + + "\57\0\1\u073b\171\0\1\u073c\132\0\1\u073d\76\0\1\u073e" + + "\147\0\1\u073f\106\0\1\u0740\100\0\1\u0741\124\0\1\u0742" + + "\154\0\1\u0743\121\0\1\u0744\103\0\1\u0745\151\0\1\u0746" + + "\122\0\1\u0747\103\0\1\u0748\142\0\1\u0749\167\0\1\u0744" + + "\63\0\1\u074a\162\0\1\u074b\142\0\1\u0731\132\0\1\u074c" + + "\60\0\1\u074d\170\0\1\u074e\56\0\1\u074f\131\0\1\u0750" + + "\125\0\1\u0751\121\0\1\u0752\130\0\1\u0753\145\0\1\u0515" + + "\137\0\1\u0754\64\0\1\u0755\133\0\1\u023b\125\0\1\u0744" + + "\125\0\1\u0756\101\0\1\u0757\173\0\1\u05c4\123\0\1\u0758" + + "\104\0\1\u0759\147\0\1\u075a\103\0\1\u075b\127\0\1\u075c" + + "\126\0\1\u05e3\151\0\1\u0515\75\0\1\u075d\147\0\1\u0624" + "\45\0"; + + private static int[] zzUnpackTrans() { + int[] result = new int[158928]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, 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; + } + + /* 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; + + /* 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 = "\4\0\6\1\1\11\3\1\1\11\20\1\2\11\3\1" + + "\1\11\32\1\1\11\5\1\1\11\10\1\1\11\25\1" + "\1\11\1\0\12\1\2\11\42\1\1\0\110\1\2\0" + + "\1\11\4\0\1\11\2\0\1\11\22\0\3\1\1\0" + "\15\1\1\11\12\1\1\11\210\1\37\0\22\1\1\11" + + "\151\1\1\0\31\1\2\0\1\1\2\0\1\1\10\0" + "\1\11\17\0\166\1\1\0\31\1\35\0\156\1\1\0" + + "\26\1\22\0\15\1\1\0\4\1\1\0\103\1\1\0" + "\14\1\1\0\32\1\2\0\1\1\6\0\13\1\4\0" + + "\4\1\2\0\75\1\2\0\11\1\1\0\33\1\12\0" + "\11\1\4\0\3\1\1\0\71\1\2\0\10\1\1\11" + + "\30\1\5\0\4\1\1\0\3\1\4\0\1\1\1\0" + "\3\1\1\0\53\1\2\0\33\1\5\0\3\1\2\0" + + "\1\1\4\0\3\1\1\0\44\1\2\0\24\1\2\0" + "\2\1\2\0\1\1\4\0\3\1\1\0\11\1\1\0" + + "\7\1\1\0\16\1\1\0\26\1\2\0\1\1\3\0" + "\2\1\1\0\11\1\1\0\2\1\2\0\12\1\1\0" + + "\23\1\2\0\1\1\2\0\2\1\1\0\6\1\1\0" + "\2\1\2\0\12\1\1\0\20\1\2\0\1\1\2\0" + + "\2\1\1\0\3\1\1\0\1\1\1\0\1\1\5\0" + "\11\1\1\0\12\1\1\0\2\1\1\0\1\1\2\0" + + "\1\1\1\0\2\1\1\0\1\1\5\0\10\1\1\0" + "\6\1\1\0\1\1\3\0\1\1\1\0\1\1\1\0" + + "\1\1\5\0\5\1\1\0\5\1\1\0\1\1\4\0" + "\1\1\1\0\1\1\1\0\1\1\4\0\3\1\1\0" + + "\3\1\1\0\1\1\4\0\1\1\1\0\1\1\4\0" + "\2\1\1\0\2\1\6\0\1\1\1\0\1\1\4\0" + + "\1\1\7\0\1\1\1\0\1\1\30\0\1\1\37\0"; + + private static int[] zzUnpackAttribute() { + int[] result = new int[1885]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Constructor. This must be here because JFlex does not generate a no-parameter + * constructor. + */ + public JavaAssemblyTokenMaker() { + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType + * The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start, end, tokenType, so, true); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType + * The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos - 1, tokenType); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType + * The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start, end, tokenType, so, false); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array + * The character array. + * @param start + * The starting offset in the array. + * @param end + * The ending offset in the array. + * @param tokenType + * The token's type. + * @param startOffset + * The offset in the document at which this token occurs. + * @param hyperlink + * Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { + super.addToken(array, start, end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + /** + * Returns the first token in the linked list of tokens generated from + * text. This method must be implemented by subclasses so they can + * correctly implement syntax highlighting. + * + * @param text + * The text from which to get tokens. + * @param initialTokenType + * The token type we should start with. + * @param startOffset + * The offset into the document at which text starts. + * @return The first Token in a linked list representing the syntax + * highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise false. + */ + private boolean zzRefill() { + return zzCurrentPos >= s.offset + s.count; + } + + /** + * 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 + * YY_INITIAL. + * + * @param reader + * the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill no longer + * "refills" the buffer (since the way we do it, it's always "full" the first + * time through, since it points to the segment's array). So, we assign + * zzEndRead here. + */ + // zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + /** + * Creates a new scanner There is also a java.io.InputStream version of this + * constructor. + * + * @param in + * the java.io.Reader to read input from. + */ + public JavaAssemblyTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. There is also java.io.Reader version of this + * constructor. + * + * @param in + * the java.io.Inputstream to read input from. + */ + public JavaAssemblyTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 200) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do + map[j++] = value; + while (--count > 0); + } + return map; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + /** + * Enters a new lexical state + * + * @param newState + * the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + /** + * 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); + + zzMarkedPos -= number; + } + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) + break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) + break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: { + addToken(Token.IDENTIFIER); + } + case 38: + break; + case 32: { + addToken(Token.LITERAL_BOOLEAN); + } + case 39: + break; + case 13: { + addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); + return firstToken; + } + case 40: + break; + case 18: { + addToken(Token.ERROR_CHAR); + } + case 41: + break; + case 15: { + addToken(Token.ERROR_NUMBER_FORMAT); + } + case 42: + break; + case 4: { + addToken(Token.ERROR_CHAR); + addNullToken(); + return firstToken; + } + case 43: + break; + case 19: { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 44: + break; + case 10: { + addToken(Token.ANNOTATION); + } + case 45: + break; + case 30: { + addToken(Token.FUNCTION); + } + case 46: + break; + case 6: { + addToken(Token.ERROR_STRING_DOUBLE); + addNullToken(); + return firstToken; + } + case 47: + break; + case 1: { + addToken(Token.ERROR_IDENTIFIER); + } + case 48: + break; + case 34: { + int temp = zzStartRead; + addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); + addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_DOCUMENTATION); + start = zzMarkedPos; + } + case 49: + break; + case 26: { + addToken(Token.LITERAL_CHAR); + } + case 50: + break; + case 17: { + addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 51: + break; + case 21: { + start = zzMarkedPos - 2; + yybegin(MLC); + } + case 52: + break; + case 7: { + addToken(Token.WHITESPACE); + } + case 53: + break; + case 24: { + yybegin(YYINITIAL); + addToken(start, zzStartRead + 1, Token.COMMENT_DOCUMENTATION); + } + case 54: + break; + case 29: { + addToken(Token.DATA_TYPE); + } + case 55: + break; + case 23: { + yybegin(YYINITIAL); + addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); + } + case 56: + break; + case 3: { + addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 57: + break; + case 25: { + int temp = zzStartRead; + addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); + addToken(temp, zzMarkedPos - 1, Token.COMMENT_MARKUP); + start = zzMarkedPos; + } + case 58: + break; + case 28: { + start = zzMarkedPos - 3; + yybegin(DOCCOMMENT); + } + case 59: + break; + case 35: { + int temp = zzStartRead; + addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); + addToken(temp, zzMarkedPos - 1, Token.COMMENT_KEYWORD); + start = zzMarkedPos; + } + case 60: + break; + case 22: { + addToken(Token.RESERVED_WORD); + } + case 61: + break; + case 33: { + int temp = zzStartRead; + addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); + addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); + start = zzMarkedPos; + } + case 62: + break; + case 37: { + addToken(Token.RESERVED_WORD_2); + } + case 63: + break; + case 14: { + addToken(start, zzStartRead - 1, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + case 64: + break; + case 9: { + addToken(Token.SEPARATOR); + } + case 65: + break; + case 5: { + addNullToken(); + return firstToken; + } + case 66: + break; + case 12: { + addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); + return firstToken; + } + case 67: + break; + case 8: { + addToken(Token.OPERATOR); + } + case 68: + break; + case 16: { + addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 69: + break; + case 36: { + int temp = zzStartRead; + addToken(start, zzStartRead - 1, Token.COMMENT_EOL); + addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); + start = zzMarkedPos; + } + case 70: + break; + case 20: { + start = zzMarkedPos - 2; + yybegin(EOL_COMMENT); + } + case 71: + break; + case 31: { + addToken(Token.COMMENT_MULTILINE); + } + case 72: + break; + case 11: { + } + case 73: + break; + case 27: { + addToken(Token.ERROR_STRING_DOUBLE); + } + case 74: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start, zzStartRead - 1, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + case 1886: + break; + case DOCCOMMENT: { + yybegin(YYINITIAL); + addToken(start, zzEndRead, Token.COMMENT_DOCUMENTATION); + return firstToken; + } + case 1887: + break; + case YYINITIAL: { + addNullToken(); + return firstToken; + } + case 1888: + break; + case MLC: { + addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); + return firstToken; + } + case 1889: + break; + default: + return null; + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + +} diff --git a/src/me/ByteEdit/main/Main.java b/src/me/ByteEdit/main/Main.java new file mode 100644 index 0000000..9708195 --- /dev/null +++ b/src/me/ByteEdit/main/Main.java @@ -0,0 +1,484 @@ +package me.ByteEdit.main; + +import java.awt.Color; +import java.awt.Component; +import java.awt.EventQueue; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.HeadlessException; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.dnd.DropTarget; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarOutputStream; + +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTree; +import javax.swing.KeyStroke; +import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; + +import org.apache.commons.io.IOUtils; +import org.fife.ui.autocomplete.AutoCompletion; +import org.fife.ui.autocomplete.BasicCompletion; +import org.fife.ui.autocomplete.CompletionProvider; +import org.fife.ui.autocomplete.DefaultCompletionProvider; +import org.fife.ui.autocomplete.ShorthandCompletion; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; +import org.fife.ui.rsyntaxtextarea.Theme; +import org.fife.ui.rtextarea.RTextScrollPane; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Label; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.MethodNode; + +public class Main extends JFrame { + + public static Main INSTANCE; + + private JPanel contentPane; + private boolean isChangingFile; + private static File jarFile; + public static HashMap OTHER_FILES = new HashMap<>(); + public static HashMap classNodes = new HashMap<>(); + public static String currentNodeName; + + public static RSyntaxTextArea textArea; + public static SearchBox searchBox; + // Class, Method, LabelMap + public static HashMap>> labels = new HashMap<>(); + + /** + * Launch the application. + */ + public static void main(String[] args) { + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + Main frame = new Main(); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + /** + * Create a simple provider that adds some Java-related completions. + */ + private CompletionProvider createCompletionProvider() { + DefaultCompletionProvider provider = new DefaultCompletionProvider(); + + for (int i = 0; i < 200; i++) { + String s = OpcodesReverse.reverseOpcode(i); + if (!s.startsWith("Unknown ")) + provider.addCompletion(new BasicCompletion(provider, s)); + } + + provider.addCompletion(new BasicCompletion(provider, "public")); + provider.addCompletion(new BasicCompletion(provider, "private")); + provider.addCompletion(new BasicCompletion(provider, "protected")); + provider.addCompletion(new BasicCompletion(provider, "final")); + provider.addCompletion(new BasicCompletion(provider, "class")); + provider.addCompletion(new BasicCompletion(provider, "enum")); + provider.addCompletion(new BasicCompletion(provider, "static")); + provider.addCompletion(new BasicCompletion(provider, "strictfp")); + provider.addCompletion(new BasicCompletion(provider, "throws")); + provider.addCompletion(new BasicCompletion(provider, "synthetic")); + provider.addCompletion(new BasicCompletion(provider, "label")); + provider.addCompletion(new BasicCompletion(provider, "line")); + provider.addCompletion(new BasicCompletion(provider, "extends")); + provider.addCompletion(new BasicCompletion(provider, "implements")); + + provider.addCompletion(new ShorthandCompletion(provider, "invvi", "invokevirtual desc owner/name")); + provider.addCompletion(new ShorthandCompletion(provider, "invif", "invokeinterface desc owner/name")); + provider.addCompletion(new ShorthandCompletion(provider, "invst", "invokestatic desc owner/name")); + provider.addCompletion(new ShorthandCompletion(provider, "invsp", "invokespecial desc owner/name")); + + return provider; + + } + + /** + * Create the frame. + */ + public Main() { + INSTANCE = this; + searchBox = new SearchBox(); + setTitle("ByteEdit"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setBounds(100, 100, 813, 474); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); + } + contentPane = new JPanel(); + contentPane.setBackground(Color.GRAY); + contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + setContentPane(contentPane); + contentPane.setLayout(new GridLayout(0, 1, 0, 0)); + + JSplitPane splitPane = new JSplitPane(); + splitPane.setBackground(Color.GRAY); + splitPane.setResizeWeight(0.2); + contentPane.add(splitPane); + + JScrollPane scrollPane = new JScrollPane(); + splitPane.setLeftComponent(scrollPane); + + textArea = new RSyntaxTextArea(); + + CompletionProvider provider = createCompletionProvider(); + + AutoCompletion ac = new AutoCompletion(provider); + ac.install(textArea); + + textArea.addKeyListener(new KeyAdapter() { + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == 116 && currentNodeName != null) { + try { + ClassNode classNode = classNodes.get(currentNodeName); + int prev = textArea.getCaretPosition(); + String dis = Disassembler.disassemble(classNode); + String substr = currentNodeName.substring(0, currentNodeName.length() - 6); + for (String key : Main.classNodes.keySet()) { + if (key.contains("$")) { + String[] split = key.split("\\$"); + if (split[0].equals(substr)) { + dis += "\n" + Disassembler.disassemble(classNodes.get(key)); + } + } + } + textArea.setText(dis); + textArea.setCaretPosition(prev); + } catch (Exception e2) { + } + } + } + }); + KeyStroke ctrlF = KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK); + textArea.registerKeyboardAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + searchBox.setVisible(true); + searchBox.txtFind.requestFocusInWindow(); + searchBox.txtFind.select(0, searchBox.txtFind.getText().length()); + } + }, ctrlF, JComponent.WHEN_IN_FOCUSED_WINDOW); + KeyStroke ctrlS = KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK); + textArea.registerKeyboardAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String txt = textArea.getText(); + for (String s : txt.split("\\/\\/ #Annotations\n")) { + if (s.isEmpty()) + continue; + ClassNode node = Assembler.assemble(s); + if (node == null) { + continue; + } + classNodes.replace(node.name + ".class", node); + } + } + }, ctrlS, JComponent.WHEN_FOCUSED); + textArea.setFont(new Font("Consolas", 0, 10)); + textArea.setEditable(true); + textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA_DISASSEMBLE); + textArea.setCodeFoldingEnabled(true); + try { + Theme theme = Theme.load(getClass().getClassLoader().getResourceAsStream("org/fife/eclipse.xml")); + theme.apply(textArea); + } catch (IOException e2) { + e2.printStackTrace(); + } + + JTree tree = new JTree(new DefaultTreeModel(null)); + tree.addKeyListener(new KeyAdapter() { + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == 116 && jarFile != null) { + try { + labels.clear(); + isChangingFile = true; + try { + tree.setModel(new ArchiveTreeModel(new JarFile(jarFile))); + } catch (IOException e1) { + e1.printStackTrace(); + } + isChangingFile = false; + } catch (Throwable t) { + t.printStackTrace(); + } + } + } + }); + tree.registerKeyboardAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + save(); + } + }, ctrlS, JComponent.WHEN_FOCUSED); + tree.setFont(new Font("Verdana", Font.PLAIN, 11)); + tree.setBackground(Color.LIGHT_GRAY); + if (tree.getCellRenderer() instanceof DefaultTreeCellRenderer) { + final DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) (tree.getCellRenderer()); + renderer.setBackgroundNonSelectionColor(Color.LIGHT_GRAY); + renderer.setBackgroundSelectionColor(Color.GRAY); + renderer.setTextNonSelectionColor(Color.BLACK); + renderer.setTextSelectionColor(Color.BLACK); + } + scrollPane.setViewportView(tree); + tree.addTreeSelectionListener(new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + if (!isChangingFile) { + String s = ""; + boolean b = false; + for (Object o : e.getPath().getPath()) { + DefaultMutableTreeNode path = (DefaultMutableTreeNode) o; + if (!b) { + b = true; + continue; + } + s += (s.isEmpty() || s.replace("/", "").isEmpty() ? "" : "/") + + (path.toString().isEmpty() ? "/" : path.toString()); + } + if (s.endsWith(".class")) { + currentNodeName = s; + ClassNode classNode = classNodes.get(s); + String dis = Disassembler.disassemble(classNode); + String substr = s.substring(0, s.length() - 6); + for (String key : Main.classNodes.keySet()) { + if (key.contains("$")) { + String[] split = key.split("\\$"); + if (split[0].equals(substr)) { + dis += "\n" + Disassembler.disassemble(classNodes.get(key)); + } + } + } + textArea.setText(dis); + textArea.setCaretPosition(0); + } + } + } + }); + + RTextScrollPane scrollPane_1 = new RTextScrollPane(); + scrollPane_1.setLineNumbersEnabled(true); + scrollPane_1.setFoldIndicatorEnabled(true); + textArea.setBackground(Color.LIGHT_GRAY); + scrollPane_1.setViewportView(textArea); + splitPane.setRightComponent(scrollPane_1); + new DropTarget(tree, new DropTargetListener() { + + @Override + public void drop(DropTargetDropEvent dtde) { + try { + Transferable tr = dtde.getTransferable(); + DataFlavor[] flavors = tr.getTransferDataFlavors(); + for (int i = 0; i < flavors.length; i++) { + if (flavors[i].isFlavorJavaFileListType()) { + dtde.acceptDrop(dtde.getDropAction()); + java.util.List files = (java.util.List) tr.getTransferData(flavors[i]); + + final File file = files.get(0); + if (file.getName().endsWith(".jar")) { + labels.clear(); + jarFile = file; + isChangingFile = true; + try { + tree.setModel(new ArchiveTreeModel(new JarFile(jarFile))); + } catch (IOException e1) { + e1.printStackTrace(); + } + isChangingFile = false; + } + + dtde.dropComplete(true); + } + } + return; + } catch (Throwable t) { + t.printStackTrace(); + } + dtde.rejectDrop(); + + } + + @Override + public void dragEnter(DropTargetDragEvent dtde) { + } + + @Override + public void dragOver(DropTargetDragEvent dtde) { + } + + @Override + public void dropActionChanged(DropTargetDragEvent dtde) { + } + + @Override + public void dragExit(DropTargetEvent dte) { + } + + }); + } + + public void save() { + final JFileChooser fileChooser = new JFileChooser() { + @Override + protected JDialog createDialog(final Component parent) throws HeadlessException { + final JDialog dialog = super.createDialog(parent); + dialog.setAlwaysOnTop(true); + return dialog; + } + }; + fileChooser.setDialogTitle("Save File"); + fileChooser.setFileSelectionMode(0); + fileChooser.setAcceptAllFileFilterUsed(false); + fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Jar File", "jar")); + final int action = fileChooser.showOpenDialog(Main.this); + if (action == 0) { + final File file = fileChooser.getSelectedFile(); + if (file.exists()) { + int dialogResult = JOptionPane.showConfirmDialog(null, "This file already exists! Overwrite it?", + "Warning", JOptionPane.YES_NO_OPTION); + if (dialogResult == JOptionPane.YES_OPTION) { + save(file, classNodes.values()); + } + } else { + save(file, classNodes.values()); + } + } + } + + public void save(File jar, Collection classes) { + try { + final JarOutputStream output = new JarOutputStream(new FileOutputStream(jar)); + for (Entry entry : OTHER_FILES.entrySet()) { + JarEntry ent = new JarEntry(entry.getKey()); + output.putNextEntry(ent); + output.write(entry.getValue()); + output.closeEntry(); + } + for (ClassNode element : classes) { + ClassWriter writer = new ClassWriter(0); + element.accept(writer); + output.putNextEntry(new JarEntry(element.name.replaceAll("\\.", "/") + ".class")); + output.write(writer.toByteArray()); + output.closeEntry(); + } + output.finish(); + output.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + class ArchiveTreeModel extends DefaultTreeModel { + + public ArchiveTreeModel(JarFile jar) { + super(new DefaultMutableTreeNode(jar.getName().split(File.separator.equals("\\") ? "\\\\" + : File.separator)[jar.getName().split(File.separator.equals("\\") ? "\\\\" : File.separator).length + - 1])); + + try { + ArrayList paths = new ArrayList<>(); + classNodes.clear(); + OTHER_FILES.clear(); + Enumeration enumeration = jar.entries(); + while (enumeration.hasMoreElements()) { + JarEntry next = enumeration.nextElement(); + byte[] data = IOUtils.toByteArray(jar.getInputStream(next)); + if (next.getName().endsWith(".class")) { + if (next.getName().contains("/") + ? (!next.getName().split("/")[next.getName().split("/").length - 1].contains("$")) + : (!next.getName().contains("$"))) { + paths.add(next.getName()); + } + ClassReader reader; + try { + reader = new ClassReader(data); + } catch (Exception e) { + OTHER_FILES.put(next.getName(), data); + continue; + } + ClassNode node = new ClassNode(); + reader.accept(node, 0); + classNodes.put(next.getName(), node); + } else { + OTHER_FILES.put(next.getName(), data); + } + } + jar.close(); + Collections.sort(paths); + for (String s : paths) { + String[] elements = s.split("/"); + + DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) getRoot(); + + for (int i = 0; i < elements.length; i++) { + String token = elements[i]; + DefaultMutableTreeNode nextNode = findNode(currentNode, token); + if (nextNode == null) { + nextNode = new DefaultMutableTreeNode(token); + currentNode.add(nextNode); + } + currentNode = nextNode; + } + } + } catch (IOException e) { + classNodes.clear(); + OTHER_FILES.clear(); + e.printStackTrace(); + } + } + + private DefaultMutableTreeNode findNode(DefaultMutableTreeNode parent, String name) { + Enumeration e = parent.children(); + while (e.hasMoreElements()) { + DefaultMutableTreeNode element = (DefaultMutableTreeNode) e.nextElement(); + if (element.getUserObject().equals(name)) { + return element; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/src/me/ByteEdit/main/OpcodesReverse.java b/src/me/ByteEdit/main/OpcodesReverse.java new file mode 100644 index 0000000..8aad962 --- /dev/null +++ b/src/me/ByteEdit/main/OpcodesReverse.java @@ -0,0 +1,323 @@ +package me.ByteEdit.main; + +public class OpcodesReverse { + + public static String reverseOpcode(int opcode) { + switch (opcode) { + case 0: + return "nop"; + case 1: + return "aconst_null"; + case 2: + return "iconst_m1"; + case 3: + return "iconst_0"; + case 4: + return "iconst_1"; + case 5: + return "iconst_2"; + case 6: + return "iconst_3"; + case 7: + return "iconst_4"; + case 8: + return "iconst_5"; + case 9: + return "lconst_0"; + case 10: + return "lconst_1"; + case 11: + return "fconst_0"; + case 12: + return "fconst_1"; + case 13: + return "fconst_2"; + case 14: + return "dconst_0"; + case 15: + return "dconst_1"; + case 16: + return "bipush"; + case 17: + return "sipush"; + case 18: + return "ldc"; + case 21: + return "iload"; + case 22: + return "lload"; + case 23: + return "fload"; + case 24: + return "dload"; + case 25: + return "aload"; + case 46: + return "iaload"; + case 47: + return "laload"; + case 48: + return "faload"; + case 49: + return "daload"; + case 50: + return "aaload"; + case 51: + return "baload"; + case 52: + return "caload"; + case 53: + return "saload"; + case 54: + return "istore"; + case 55: + return "lstore"; + case 56: + return "fstore"; + case 57: + return "dstore"; + case 58: + return "astore"; + case 79: + return "iastore"; + case 80: + return "lastore"; + case 81: + return "fastore"; + case 82: + return "dastore"; + case 83: + return "aastore"; + case 84: + return "bastore"; + case 85: + return "castore"; + case 86: + return "sastore"; + case 87: + return "pop"; + case 88: + return "pop2"; + case 89: + return "dup"; + case 90: + return "dup_x1"; + case 91: + return "dup_x2"; + case 92: + return "dup2"; + case 93: + return "dup2_x1"; + case 94: + return "dup2_x2"; + case 95: + return "swap"; + case 96: + return "iadd"; + case 97: + return "ladd"; + case 98: + return "fadd"; + case 99: + return "dadd"; + case 100: + return "isub"; + case 101: + return "lsub"; + case 102: + return "fsub"; + case 103: + return "dsub"; + case 104: + return "imul"; + case 105: + return "lmul"; + case 106: + return "fmul"; + case 107: + return "dmul"; + case 108: + return "idiv"; + case 109: + return "ldiv"; + case 110: + return "fdiv"; + case 111: + return "ddiv"; + case 112: + return "irem"; + case 113: + return "lrem"; + case 114: + return "frem"; + case 115: + return "drem"; + case 116: + return "ineg"; + case 117: + return "lneg"; + case 118: + return "fneg"; + case 119: + return "dneg"; + case 120: + return "ishl"; + case 121: + return "lshl"; + case 122: + return "ishr"; + case 123: + return "lshr"; + case 124: + return "iushr"; + case 125: + return "lushr"; + case 126: + return "iand"; + case 127: + return "land"; + case 128: + return "ior"; + case 129: + return "lor"; + case 130: + return "ixor"; + case 131: + return "lxor"; + case 132: + return "iinc"; + case 133: + return "i2l"; + case 134: + return "i2f"; + case 135: + return "i2d"; + case 136: + return "l2i"; + case 137: + return "l2f"; + case 138: + return "l2d"; + case 139: + return "f2i"; + case 140: + return "f2l"; + case 141: + return "f2d"; + case 142: + return "d2i"; + case 143: + return "d2l"; + case 144: + return "d2f"; + case 145: + return "i2b"; + case 146: + return "i2c"; + case 147: + return "i2s"; + case 148: + return "lcmp"; + case 149: + return "fcmpl"; + case 150: + return "fcmpg"; + case 151: + return "dcmpl"; + case 152: + return "dcmpg"; + case 153: + return "ifeq"; + case 154: + return "ifne"; + case 155: + return "iflt"; + case 156: + return "ifge"; + case 157: + return "ifgt"; + case 158: + return "ifle"; + case 159: + return "if_icmpeq"; + case 160: + return "if_icmpne"; + case 161: + return "if_icmplt"; + case 162: + return "if_icmpge"; + case 163: + return "if_icmpgt"; + case 164: + return "if_icmple"; + case 165: + return "if_acmpeq"; + case 166: + return "if_acmpne"; + case 167: + return "goto"; + case 170: + return "tableswitch"; + case 171: + return "lookupswitch"; + case 172: + return "ireturn"; + case 173: + return "lreturn"; + case 174: + return "freturn"; + case 175: + return "dreturn"; + case 176: + return "areturn"; + case 177: + return "return"; + case 178: + return "getstatic"; + case 179: + return "putstatic"; + case 180: + return "getfield"; + case 181: + return "putfield"; + case 182: + return "invokevirtual"; + case 183: + return "invokespecial"; + case 184: + return "invokestatic"; + case 185: + return "invokeinterface"; + case 186: + return "invokedynamic"; + case 187: + return "new"; + case 188: + return "newarray"; + case 189: + return "anewarray"; + case 190: + return "arraylength"; + case 191: + return "athrow"; + case 192: + return "checkcast"; + case 193: + return "instanceof"; + case 194: + return "monitorenter"; + case 195: + return "monitorexit"; + case 197: + return "multianewarray"; + case 198: + return "ifnull"; + case 199: + return "ifnonnul"; + + default: + return "Unknown Opcode: " + opcode; + } + } + +} \ No newline at end of file diff --git a/src/me/ByteEdit/main/SearchBox.java b/src/me/ByteEdit/main/SearchBox.java new file mode 100644 index 0000000..ac26920 --- /dev/null +++ b/src/me/ByteEdit/main/SearchBox.java @@ -0,0 +1,152 @@ +package me.ByteEdit.main; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.util.regex.Pattern; + +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; + +public class SearchBox extends JFrame { + + public JPanel contentPane; + public JTextField txtFind; + public JTextField txtReplace; + public JCheckBox chckbxCaseSensitive; + + /** + * Create the frame. + */ + public SearchBox() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); + } + setResizable(false); + setTitle("Find/Replace"); + setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); + setBounds(100, 100, 256, 263); + contentPane = new JPanel(); + contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + setContentPane(contentPane); + contentPane.setLayout(null); + + JLabel lblFind = new JLabel("Find:"); + lblFind.setBounds(10, 25, 71, 14); + contentPane.add(lblFind); + + txtFind = new JTextField(); + KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); + txtFind.registerKeyboardAction(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + find(); + } + }, enter, JComponent.WHEN_IN_FOCUSED_WINDOW); + txtFind.setBounds(91, 22, 149, 20); + contentPane.add(txtFind); + txtFind.setColumns(10); + + JLabel lblReplaceWith = new JLabel("Replace with:"); + lblReplaceWith.setBounds(10, 53, 71, 14); + contentPane.add(lblReplaceWith); + + txtReplace = new JTextField(); + txtReplace.setColumns(10); + txtReplace.setBounds(91, 50, 149, 20); + contentPane.add(txtReplace); + + chckbxCaseSensitive = new JCheckBox("Case sensitive"); + chckbxCaseSensitive.setBounds(10, 103, 230, 23); + contentPane.add(chckbxCaseSensitive); + + JButton btnFind = new JButton("Find"); + btnFind.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + find(); + } + }); + btnFind.setBounds(10, 150, 110, 23); + contentPane.add(btnFind); + + JButton btnReplacefind = new JButton("Replace/Find"); + btnReplacefind.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + replaceFind(); + } + }); + btnReplacefind.setBounds(130, 150, 110, 23); + contentPane.add(btnReplacefind); + + JButton btnReplace = new JButton("Replace"); + btnReplace.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + replace(); + } + }); + btnReplace.setBounds(10, 184, 110, 23); + contentPane.add(btnReplace); + + JButton btnReplaceAll = new JButton("Replace All"); + btnReplaceAll.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + replaceAll(); + } + }); + btnReplaceAll.setBounds(130, 184, 110, 23); + contentPane.add(btnReplaceAll); + } + + public void find() { + int startPos = Main.textArea.getCaretPosition(); + String toFind = txtFind.getText(); + String txt = chckbxCaseSensitive.isSelected() ? Main.textArea.getText().substring(startPos) + : Main.textArea.getText().substring(startPos).toLowerCase(); + int index = txt.indexOf(chckbxCaseSensitive.isSelected() ? toFind : toFind.toLowerCase()); + if (index == -1) { + txt = chckbxCaseSensitive.isSelected() ? Main.textArea.getText() : Main.textArea.getText().toLowerCase(); + index = txt.indexOf(chckbxCaseSensitive.isSelected() ? toFind : toFind.toLowerCase()); + startPos = 0; + if (index == -1) { + return; + } + } + Main.textArea.select(startPos + index, startPos + index + toFind.length()); + } + + public void replaceFind() { + replace(); + find(); + } + + public void replace() { + String txt = Main.textArea.getText(); + int startPos = Main.textArea.getSelectionStart(); + Main.textArea.replaceSelection(txtReplace.getText()); + Main.textArea.select(startPos, startPos + txtReplace.getText().length()); + } + + public void replaceAll() { + String toFind = txtFind.getText(); + String toReplace = txtReplace.getText(); + String txt = Main.textArea.getText(); + int prev = Main.textArea.getCaretPosition(); + if (chckbxCaseSensitive.isSelected()) { + Main.textArea.replaceRange(txt.replace(toFind, toReplace), 0, txt.length()); + } else { + Main.textArea.replaceRange(txt.replaceAll("(?i)" + Pattern.quote(toFind), toReplace), 0, txt.length()); + } + Main.textArea.setCaretPosition(prev); + } + +} diff --git a/src/org/fife/eclipse.xml b/src/org/fife/eclipse.xml new file mode 100644 index 0000000..833ac4b --- /dev/null +++ b/src/org/fife/eclipse.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "); + while (line < lastLine) { + Token t = textArea.getTokenListForLine(line); + while (t!=null && t.isPaintable()) { + t.appendHTMLRepresentation(sb, textArea, true, true); + t = t.getNextToken(); + } + sb.append("
"); + line++; + } + + return sb.toString(); + + } + + + /** + * Adds key bindings to this popup. + */ + private void installKeyBindings() { + + InputMap im = getRootPane().getInputMap( + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap am = getRootPane().getActionMap(); + + KeyStroke escapeKS = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); + im.put(escapeKS, "onEscape"); + am.put("onEscape", new EscapeAction()); + } + + + /** + * Positions this popup to be in the top right-hand corner of the parent + * editor. + */ + private void setLocation() { + Point topLeft = textArea.getVisibleRect().getLocation(); + SwingUtilities.convertPointToScreen(topLeft, textArea); + topLeft.y = Math.max(topLeft.y - 24, 0); + setLocation(topLeft.x - LEFT_EMPTY_BORDER, topLeft.y); + } + + + /** + * Action performed when Escape is pressed in this popup. + */ + private class EscapeAction extends AbstractAction { + + @Override + public void actionPerformed(ActionEvent e) { + listener.uninstallAndHide(); + } + + } + + + /** + * Listens for events in this popup. + */ + private class Listener extends WindowAdapter implements ComponentListener { + + Listener() { + + addWindowFocusListener(this); + + // If anything happens to the "parent" window, hide this popup + Window parent = (Window)getParent(); + parent.addWindowFocusListener(this); + parent.addWindowListener(this); + parent.addComponentListener(this); + + } + + @Override + public void componentResized(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void componentMoved(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void componentShown(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void componentHidden(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void windowActivated(WindowEvent e) { + checkForParentWindowEvent(e); + } + + @Override + public void windowLostFocus(WindowEvent e) { + uninstallAndHide(); + } + + @Override + public void windowIconified(WindowEvent e) { + checkForParentWindowEvent(e); + } + + private boolean checkForParentWindowEvent(WindowEvent e) { + if (e.getSource()==getParent()) { + uninstallAndHide(); + return true; + } + return false; + } + + private void uninstallAndHide() { + Window parent = (Window)getParent(); + parent.removeWindowFocusListener(this); + parent.removeWindowListener(this); + parent.removeComponentListener(this); + removeWindowFocusListener(this); + setVisible(false); + dispose(); + } + + } +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java b/src/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java new file mode 100644 index 0000000..b37fe32 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java @@ -0,0 +1,63 @@ +/* + * 03/09/2013 + * + * OccurrenceMarker - Marks occurrences of the current token. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import org.fife.ui.rtextarea.SmartHighlightPainter; + + +/** + * An OccurrenceMarker is called when the caret stops moving after + * a short period. If the current {@link TokenMaker} returns an instance of + * this class, it is told to mark all occurrences of the identifier at the + * caret position. + * + * @author Robert Futrell + * @version 1.0 + */ +public interface OccurrenceMarker { + + + /** + * Returns the token to mark occurrences, of, provided it matches the + * criteria put forth by {@link #isValidType(RSyntaxTextArea, Token)}. + * For most languages, this method should return the token at the caret + * position. + * + * @param textArea The text area. + * @return The token to (possibly) mark occurrences of, or + * null if none. + */ + Token getTokenToMark(RSyntaxTextArea textArea); + + + /** + * Returns whether the specified token is a type that we can do a + * "mark occurrences" of. Typically, this will delegate to + * {@link RSyntaxTextArea#getMarkOccurrencesOfTokenType(int)}. + * + * @param textArea The text area. + * @param t The token. + * @return Whether we should mark all occurrences of this token. + */ + boolean isValidType(RSyntaxTextArea textArea, Token t); + + + /** + * Called when occurrences of a token should be marked. + * + * @param doc The document. + * @param t The document whose relevant occurrences should be marked. + * @param h The highlighter to add the highlights to. + * @param p The painter for the highlights. + */ + void markOccurrences(RSyntaxDocument doc, Token t, + RSyntaxTextAreaHighlighter h, SmartHighlightPainter p); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/ParserManager.java b/src/org/fife/ui/rsyntaxtextarea/ParserManager.java new file mode 100644 index 0000000..f9277d1 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/ParserManager.java @@ -0,0 +1,829 @@ +/* + * 09/26/2005 + * + * ParserManager.java - Manages the parsing of an RSyntaxTextArea's document, + * if necessary. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.net.URL; +import java.security.AccessControlException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.swing.Timer; +import javax.swing.ToolTipManager; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Position; + +import org.fife.ui.rsyntaxtextarea.parser.ParseResult; +import org.fife.ui.rsyntaxtextarea.parser.Parser; +import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; +import org.fife.ui.rsyntaxtextarea.parser.ToolTipInfo; +import org.fife.ui.rtextarea.RDocument; +import org.fife.ui.rtextarea.RTextAreaHighlighter.HighlightInfo; + + + +/** + * Manages running a parser object for an RSyntaxTextArea. + * + * @author Robert Futrell + * @version 0.9 + */ +class ParserManager implements DocumentListener, ActionListener, + HyperlinkListener, PropertyChangeListener { + + private RSyntaxTextArea textArea; + private List parsers; + private Timer timer; + private boolean running; + private Parser parserForTip; + private Position firstOffsetModded; + private Position lastOffsetModded; + + /** + * Mapping of notices to their highlights in the editor. Can't use a Map + * since parsers could return two ParserNotices that compare + * equally via equals(). Real-world example: The Perl + * compiler will return 2+ identical error messages if the same error is + * committed in a single line more than once. + */ + private List noticeHighlightPairs; + + /** + * Painter used to underline errors. + */ + private SquiggleUnderlineHighlightPainter parserErrorHighlightPainter = + new SquiggleUnderlineHighlightPainter(Color.RED); + + /** + * If this system property is set to true, debug messages + * will be printed to stdout to help diagnose parsing issues. + */ + private static final String PROPERTY_DEBUG_PARSING = "rsta.debugParsing"; + + /** + * Whether to print debug messages while running parsers. + */ + private static final boolean DEBUG_PARSING; + + /** + * The default delay between the last key press and when the document + * is parsed, in milliseconds. + */ + private static final int DEFAULT_DELAY_MS = 1250; + + + /** + * Constructor. + * + * @param textArea The text area whose document the parser will be + * parsing. + */ + ParserManager(RSyntaxTextArea textArea) { + this(DEFAULT_DELAY_MS, textArea); + } + + + /** + * Constructor. + * + * @param delay The delay between the last key press and when the document + * is parsed. + * @param textArea The text area whose document the parser will be + * parsing. + */ + ParserManager(int delay, RSyntaxTextArea textArea) { + this.textArea = textArea; + textArea.getDocument().addDocumentListener(this); + textArea.addPropertyChangeListener("document", this); + parsers = new ArrayList(1); // Usually small + timer = new Timer(delay, this); + timer.setRepeats(false); + running = true; + } + + + /** + * Called when the timer fires (e.g. it's time to parse the document). + * + * @param e The event. + */ + @Override + public void actionPerformed(ActionEvent e) { + + // Sanity check - should have >1 parser if event is fired. + int parserCount = getParserCount(); + if (parserCount==0) { + return; + } + + long begin = 0; + if (DEBUG_PARSING) { + begin = System.currentTimeMillis(); + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + + Element root = doc.getDefaultRootElement(); + int firstLine = firstOffsetModded==null ? 0 : + root.getElementIndex(firstOffsetModded.getOffset()); + int lastLine = lastOffsetModded==null ? root.getElementCount()-1 : + root.getElementIndex(lastOffsetModded.getOffset()); + firstOffsetModded = lastOffsetModded = null; + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: Minimum lines to parse: " + firstLine + "-" + lastLine); + } + + String style = textArea.getSyntaxEditingStyle(); + doc.readLock(); + try { + for (int i=0; inull, nothing + * happens. + * @see #getParser(int) + * @see #removeParser(Parser) + */ + public void addParser(Parser parser) { + if (parser!=null && !parsers.contains(parser)) { + if (running) { + timer.stop(); + } + parsers.add(parser); + if (parsers.size()==1) { + // Okay to call more than once. + ToolTipManager.sharedInstance().registerComponent(textArea); + } + if (running) { + timer.restart(); + } + } + } + + + /** + * Adds highlights for a list of parser notices. Any current notices + * from the same Parser, in the same parsed range, are removed. + * + * @param res The result of a parsing. + * @see #clearParserNoticeHighlights() + */ + private void addParserNoticeHighlights(ParseResult res) { + + // Parsers are supposed to return at least empty ParseResults, but + // we'll be defensive here. + if (res==null) { + return; + } + + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: Adding parser notices from " + + res.getParser()); + } + + if (noticeHighlightPairs==null) { + noticeHighlightPairs = new ArrayList(); + } + + removeParserNotices(res); + + List notices = res.getNotices(); + if (notices.size()>0) { // Guaranteed non-null + + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + + for (ParserNotice notice : notices) { + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: ... adding: " + notice); + } + try { + HighlightInfo highlight = null; + if (notice.getShowInEditor()) { + highlight = h.addParserHighlight(notice, + parserErrorHighlightPainter); + } + noticeHighlightPairs.add(new NoticeHighlightPair(notice, highlight)); + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + } + + } + + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: Done adding parser notices from " + + res.getParser()); + } + + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + @Override + public void changedUpdate(DocumentEvent e) { + } + + + private void clearParserNoticeHighlights() { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + if (h!=null) { + h.clearParserHighlights(); + } + if (noticeHighlightPairs!=null) { + noticeHighlightPairs.clear(); + } + } + + + /** + * Removes all parser notice highlights for a specific parser. + * + * @param parser The parser whose highlights to remove. + */ + private void clearParserNoticeHighlights(Parser parser) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + if (h!=null) { + h.clearParserHighlights(parser); + } + if (noticeHighlightPairs!=null) { + Iterator i=noticeHighlightPairs.iterator(); + while (i.hasNext()) { + NoticeHighlightPair pair = i.next(); + if (pair.notice.getParser()==parser) { + i.remove(); + } + } + } + } + + + /** + * Removes all parsers and any highlights they have created. + * + * @see #addParser(Parser) + */ + public void clearParsers() { + timer.stop(); + clearParserNoticeHighlights(); + parsers.clear(); + textArea.fireParserNoticesChange(); + } + + + /** + * Forces the given {@link Parser} to re-parse the content of this text + * area.

+ * + * This method can be useful when a Parser can be configured + * as to what notices it returns. For example, if a Java language parser + * can be configured to set whether no serialVersionUID is a warning, + * error, or ignored, this method can be called after changing the expected + * notice type to have the document re-parsed. + * + * @param parser The index of the Parser to re-run. + * @see #getParser(int) + */ + public void forceReparsing(int parser) { + Parser p = getParser(parser); + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + String style = textArea.getSyntaxEditingStyle(); + doc.readLock(); + try { + if (p.isEnabled()) { + ParseResult res = p.parse(doc, style); + addParserNoticeHighlights(res); + } + else { + clearParserNoticeHighlights(p); + } + textArea.fireParserNoticesChange(); + } finally { + doc.readUnlock(); + } + } + + + /** + * Returns the delay between the last "concurrent" edit and when the + * document is re-parsed. + * + * @return The delay, in milliseconds. + * @see #setDelay(int) + */ + public int getDelay() { + return timer.getDelay(); + } + + + /** + * Returns the specified parser. + * + * @param index The index of the parser. + * @return The parser. + * @see #getParserCount() + * @see #addParser(Parser) + * @see #removeParser(Parser) + */ + public Parser getParser(int index) { + return parsers.get(index); + } + + + /** + * Returns the number of registered parsers. + * + * @return The number of registered parsers. + */ + public int getParserCount() { + return parsers.size(); + } + + + /** + * Returns a list of the current parser notices for this text area. + * This method (like most Swing methods) should only be called on the + * EDT. + * + * @return The list of notices. This will be an empty list if there are + * none. + */ + public List getParserNotices() { + List notices = new ArrayList(); + if (noticeHighlightPairs!=null) { + for (NoticeHighlightPair pair : noticeHighlightPairs) { + notices.add(pair.notice); + } + } + return notices; + } + + + /** + * Returns the tool tip to display for a mouse event at the given + * location. This method is overridden to give a registered parser a + * chance to display a tool tip (such as an error description when the + * mouse is over an error highlight). + * + * @param e The mouse event. + * @return The tool tip to display, and possibly a hyperlink event handler. + */ + public ToolTipInfo getToolTipText(MouseEvent e) { + + String tip = null; + HyperlinkListener listener = null; + parserForTip = null; + Point p = e.getPoint(); + +// try { + int pos = textArea.viewToModel(p); + /* + Highlighter.Highlight[] highlights = textArea.getHighlighter(). + getHighlights(); + for (int i=0; i=pos) { + //return pnh.getMessage(); + return textArea.getText(start, end-start); + } + //} + } + */ + if (noticeHighlightPairs!=null) { + for (NoticeHighlightPair pair : noticeHighlightPairs) { + ParserNotice notice = pair.notice; + if (noticeContainsPosition(notice, pos) && + noticeContainsPointInView(notice, p)) { + tip = notice.getToolTipText(); + parserForTip = notice.getParser(); + if (parserForTip instanceof HyperlinkListener) { + listener = (HyperlinkListener)parserForTip; + } + break; + } + } + } +// } catch (BadLocationException ble) { +// ble.printStackTrace(); // Should never happen. +// } + + URL imageBase = parserForTip==null ? null : parserForTip.getImageBase(); + return new ToolTipInfo(tip, listener, imageBase); + + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + public void handleDocumentEvent(DocumentEvent e) { + if (running && parsers.size()>0) { + timer.restart(); + } + } + + + /** + * Called when the user clicks a hyperlink in a + * {@link org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip}. + * + * @param e The event. + */ + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + if (parserForTip!=null && parserForTip.getHyperlinkListener()!=null) { + parserForTip.getHyperlinkListener().linkClicked(textArea, e); + } + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + @Override + public void insertUpdate(DocumentEvent e) { + + // Keep track of the first and last offset modified. Some parsers are + // smart and will only re-parse this section of the file. + try { + int offs = e.getOffset(); + if (firstOffsetModded==null || offslastOffsetModded.getOffset()) { + lastOffsetModded = e.getDocument().createPosition(offs); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Shouldn't happen + } + + handleDocumentEvent(e); + + } + + + /** + * Returns whether a parser notice contains the specified offset. + * + * @param notice The notice. + * @param offs The offset. + * @return Whether the notice contains the offset. + */ + private boolean noticeContainsPosition(ParserNotice notice, int offs){ + if (notice.getKnowsOffsetAndLength()) { + return notice.containsPosition(offs); + } + Document doc = textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = notice.getLine(); + if (line<0) { // Defensive against possible bad user-defined notices. + return false; + } + Element elem = root.getElement(line); + return elem != null && offs>=elem.getStartOffset() && offsviewToModel() returns the closest model + * position, and the position doesn't necessarily contain the + * point passed in as an argument, this method checks whether the point is + * indeed contained in the view rectangle for the specified offset. + * + * @param notice The parser notice. + * @param p The point possibly contained in the view range of the + * parser notice. + * @return Whether the parser notice actually contains the specified point + * in the view. + */ + private boolean noticeContainsPointInView(ParserNotice notice, + Point p) { + + try { + + int start, end; + if (notice.getKnowsOffsetAndLength()) { + start = notice.getOffset(); + end = start + notice.getLength() - 1; + } + else { + Document doc = textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = notice.getLine(); + // Defend against possible bad user-defined notices. + if (line<0) { + return false; + } + Element elem = root.getElement(line); + start = elem.getStartOffset(); + end = elem.getEndOffset() - 1; + } + + Rectangle r1 = textArea.modelToView(start); + Rectangle r2 = textArea.modelToView(end); + if (r1.y!=r2.y) { + // If the notice spans multiple lines, give them the benefit + // of the doubt. This is only "wrong" if the user is in empty + // space "to the right" of the error marker when it ends at the + // end of a line anyway. + return true; + } + + r1.y--; // Be a tiny bit lenient. + r1.height += 2; // Ditto + return p.x>=r1.x && p.x<(r2.x+r2.width) && + p.y>=r1.y && p.y<(r1.y+r1.height); + + } catch (BadLocationException ble) { // Never occurs + // Give them the benefit of the doubt, should 99% of the time be + // true anyway + return true; + } + + } + + + /** + * Called when a property we're interested in changes. + * + * @param e The property change event. + */ + @Override + public void propertyChange(PropertyChangeEvent e) { + + String name = e.getPropertyName(); + + if ("document".equals(name)) { + // The document switched out from under us + RDocument old = (RDocument)e.getOldValue(); + if (old != null) { + old.removeDocumentListener(this); + } + RDocument newDoc = (RDocument)e.getNewValue(); + if (newDoc != null) { + newDoc.addDocumentListener(this); + } + } + + } + + + /** + * Removes a parser. + * + * @param parser The parser to remove. + * @return Whether the parser was found. + * @see #addParser(Parser) + * @see #getParser(int) + */ + public boolean removeParser(Parser parser) { + removeParserNotices(parser); + boolean removed = parsers.remove(parser); + if (removed) { + textArea.fireParserNoticesChange(); + } + return removed; + } + + + /** + * Removes all parser notices (and clears highlights in the editor) from + * a particular parser. + * + * @param parser The parser. + */ + private void removeParserNotices(Parser parser) { + if (noticeHighlightPairs!=null) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext();) { + NoticeHighlightPair pair = i.next(); + if (pair.notice.getParser()==parser && pair.highlight!=null) { + h.removeParserHighlight(pair.highlight); + i.remove(); + } + } + } + } + + + /** + * Removes any currently stored notices (and the corresponding highlights + * from the editor) from the same Parser, and in the given line range, + * as in the results. + * + * @param res The results. + */ + private void removeParserNotices(ParseResult res) { + if (noticeHighlightPairs!=null) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext();) { + NoticeHighlightPair pair = i.next(); + boolean removed = false; + if (shouldRemoveNotice(pair.notice, res)) { + if (pair.highlight!=null) { + h.removeParserHighlight(pair.highlight); + } + i.remove(); + removed = true; + } + if (DEBUG_PARSING) { + String text = removed ? "[DEBUG]: ... notice removed: " : + "[DEBUG]: ... notice not removed: "; + System.out.println(text + pair.notice); + } + } + + } + + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + @Override + public void removeUpdate(DocumentEvent e) { + + // Keep track of the first and last offset modified. Some parsers are + // smart and will only re-parse this section of the file. Note that + // for removals, only the line at the removal start needs to be + // re-parsed. + try { + int offs = e.getOffset(); + if (firstOffsetModded==null || offslastOffsetModded.getOffset()) { + lastOffsetModded = e.getDocument().createPosition(offs); + } + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + + handleDocumentEvent(e); + + } + + + /** + * Restarts parsing the document. + * + * @see #stopParsing() + */ + public void restartParsing() { + timer.restart(); + running = true; + } + + + /** + * Sets the delay between the last "concurrent" edit and when the document + * is re-parsed. + * + * @param millis The new delay, in milliseconds. This must be greater + * than 0. + * @see #getDelay() + */ + public void setDelay(int millis) { + if (running) { + timer.stop(); + } + timer.setInitialDelay(millis); + timer.setDelay(millis); + if (running) { + timer.start(); + } + } + + + /** + * Returns whether a parser notice should be removed, based on a parse + * result. + * + * @param notice The notice in question. + * @param res The result. + * @return Whether the notice should be removed. + */ + private boolean shouldRemoveNotice(ParserNotice notice, + ParseResult res) { + + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: ... ... shouldRemoveNotice " + + notice + ": " + (notice.getParser()==res.getParser())); + } + + // NOTE: We must currently remove all notices for the parser. Parser + // implementors are required to parse the entire document each parsing + // request, as RSTA is not yet sophisticated enough to determine the + // minimum range of text to parse (and ParserNotices' locations aren't + // updated when the Document is mutated, which would be a requirement + // for this as well). + // return same_parser && (in_reparsed_range || in_deleted_end_of_doc) + return notice.getParser()==res.getParser(); + + } + + + /** + * Stops parsing the document. + * + * @see #restartParsing() + */ + public void stopParsing() { + timer.stop(); + running = false; + } + + + /** + * Mapping of a parser notice to its highlight in the editor. + */ + private static class NoticeHighlightPair { + + private ParserNotice notice; + private HighlightInfo highlight; + + NoticeHighlightPair(ParserNotice notice, HighlightInfo highlight) { + this.notice = notice; + this.highlight = highlight; + } + + } + + + static { + boolean debugParsing = false; + try { + debugParsing = Boolean.getBoolean(PROPERTY_DEBUG_PARSING); + } catch (AccessControlException ace) { + // Likely an applet's security manager. + debugParsing = false; // FindBugs + } + DEBUG_PARSING = debugParsing; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java b/src/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java new file mode 100644 index 0000000..c1fe24f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java @@ -0,0 +1,68 @@ +/* + * 01/11/2011 + * + * PopupWindowDecorator.java - Hook allowing hosting applications to decorate + * JWindows created by the AutoComplete library. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.JWindow; + + +/** + * A hook allowing hosting applications to decorate JWindows created by the + * AutoComplete library. For example, you could use the + * JGoodies library to add drop shadows + * to the windows. + * + * @author Robert Futrell + * @version 1.0 + */ +public abstract class PopupWindowDecorator { + + /** + * The singleton instance of this class. + */ + private static PopupWindowDecorator decorator; + + + /** + * Callback called whenever an appropriate JWindow is created by the + * AutoComplete library. Implementations can decorate the window however + * they see fit. + * + * @param window The newly-created window. + */ + public abstract void decorate(JWindow window); + + + /** + * Returns the singleton instance of this class. This should only be + * called on the EDT. + * + * @return The singleton instance of this class, or null + * for none. + * @see #set(PopupWindowDecorator) + */ + public static PopupWindowDecorator get() { + return decorator; + } + + + /** + * Sets the singleton instance of this class. This should only be called + * on the EDT. + * + * @param decorator The new instance of this class. This may be + * null. + * @see #get() + */ + public static void set(PopupWindowDecorator decorator) { + PopupWindowDecorator.decorator = decorator; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSTAView.java b/src/org/fife/ui/rsyntaxtextarea/RSTAView.java new file mode 100644 index 0000000..9e81e85 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSTAView.java @@ -0,0 +1,62 @@ +/* + * 02/10/2009 + * + * RSTAView.java - An RSyntaxTextArea view. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Rectangle; + +import javax.swing.text.BadLocationException; + + +/** + * Utility methods for RSyntaxTextArea's views. + * + * @author Robert Futrell + * @version 1.0 + */ +interface RSTAView { + + + /** + * Returns the y-coordinate of the specified line.

+ * + * This method is quicker than using traditional + * modelToView(int) calls, as the entire bounding box isn't + * computed. + * + * @param alloc The area the text area can render into. + * @param line The line number. + * @return The y-coordinate of the top of the line, or -1 if + * this text area doesn't yet have a positive size or the line is + * hidden (i.e. from folding). + * @throws BadLocationException If line isn't a valid line + * number for this document. + */ + int yForLine(Rectangle alloc, int line) throws BadLocationException; + + + /** + * Returns the y-coordinate of the line containing a specified offset.

+ * + * This method is quicker than using traditional + * modelToView(int) calls, as the entire bounding box isn't + * computed. + * + * @param alloc The area the text area can render into. + * @param offs The offset info the document. + * @return The y-coordinate of the top of the offset, or -1 if + * this text area doesn't yet have a positive size or the line is + * hidden (i.e. from folding). + * @throws BadLocationException If offs isn't a valid offset + * into the document. + */ + int yForLineContaining(Rectangle alloc, int offs) + throws BadLocationException; + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java new file mode 100644 index 0000000..c318bf8 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java @@ -0,0 +1,672 @@ +/* + * 10/16/2004 + * + * RSyntaxDocument.java - A document capable of syntax highlighting, used by + * RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.util.Iterator; + +import javax.swing.Action; +import javax.swing.event.DocumentEvent; +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.modes.AbstractMarkupTokenMaker; +import org.fife.ui.rtextarea.RDocument; +import org.fife.util.DynamicIntArray; + +import me.ByteEdit.main.JavaAssemblyTokenMaker; + +/** + * The document used by {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea}. + * This document is like javax.swing.text.PlainDocument except that + * it also keeps track of syntax highlighting in the document. It has a "style" + * attribute associated with it that determines how syntax highlighting is done + * (i.e., what language is being highlighted). + *

+ * + * Instances of RSyntaxTextArea will only accept instances of + * RSyntaxDocument, since it is this document that keeps track of + * syntax highlighting. All others will cause an exception to be thrown. + *

+ * + * To change the language being syntax highlighted at any time, you merely have + * to call {@link #setSyntaxStyle}. Other than that, this document can be + * treated like any other save one caveat: all DocumentEvents of + * type CHANGE use their offset and length values to represent the + * first and last lines, respectively, that have had their syntax coloring + * change. This is really a hack to increase the speed of the painting code and + * should really be corrected, but oh well. + * + * @author Robert Futrell + * @version 1.0 + */ +public class RSyntaxDocument extends RDocument implements Iterable, SyntaxConstants { + + /** + * Creates a {@link TokenMaker} appropriate for a given programming language. + */ + private transient TokenMakerFactory tokenMakerFactory; + + /** + * Splits text into tokens for the current programming language. + */ + private transient TokenMaker tokenMaker; + + /** + * The current syntax style. Only cached to keep this class serializable. + */ + private String syntaxStyle; + + /** + * Array of values representing the "last token type" on each line. This is used + * in cases such as multi-line comments: if the previous line ended with an + * (unclosed) multi-line comment, we can use this knowledge and start the + * current line's syntax highlighting in multi-line comment state. + */ + protected transient DynamicIntArray lastTokensOnLines; + + private transient int lastLine = -1; + private transient Token cachedTokenList; + private transient int useCacheCount = 0; + private transient int tokenRetrievalCount = 0; + + private transient Segment s; + + /** + * If this is set to true, debug information about how much token + * caching is helping is printed to stdout. + */ + private static final boolean DEBUG_TOKEN_CACHING = false; + + /** + * Constructs a plain text document. A default root element is created, and the + * tab size set to 5. + * + * @param syntaxStyle + * The syntax highlighting scheme to use. + */ + public RSyntaxDocument(String syntaxStyle) { + this(null, syntaxStyle); + } + + /** + * Constructs a plain text document. A default root element is created, and the + * tab size set to 5. + * + * @param tmf + * The TokenMakerFactory for this document. If this is + * null, a default factory is used. + * @param syntaxStyle + * The syntax highlighting scheme to use. + */ + public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { + putProperty(tabSizeAttribute, Integer.valueOf(5)); + lastTokensOnLines = new DynamicIntArray(400); + lastTokensOnLines.add(Token.NULL); // Initial (empty) line. + s = new Segment(); + setTokenMakerFactory(tmf); + setSyntaxStyle(syntaxStyle); + } + + /** + * Alerts all listeners to this document of an insertion. This is overridden so + * we can update our syntax highlighting stuff. + *

+ * The syntax highlighting stuff has to be here instead of in + * insertUpdate because insertUpdate is not called by + * the undo/redo actions, but this method is. + * + * @param e + * The change. + */ + @Override + protected void fireInsertUpdate(DocumentEvent e) { + + cachedTokenList = null; + + /* + * Now that the text is actually inserted into the content and element + * structure, we can update our token elements and "last tokens on lines" + * structure. + */ + + Element lineMap = getDefaultRootElement(); + DocumentEvent.ElementChange change = e.getChange(lineMap); + Element[] added = change == null ? null : change.getChildrenAdded(); + + int numLines = lineMap.getElementCount(); + int line = lineMap.getElementIndex(e.getOffset()); + int previousLine = line - 1; + int previousTokenType = (previousLine > -1 ? lastTokensOnLines.get(previousLine) : Token.NULL); + + // If entire lines were added... + if (added != null && added.length > 0) { + + Element[] removed = change.getChildrenRemoved(); + int numRemoved = removed != null ? removed.length : 0; + + int endBefore = line + added.length - numRemoved; + // System.err.println("... adding lines: " + line + " - " + (endBefore-1)); + // System.err.println("... ... added: " + added.length + ", removed:" + + // numRemoved); + for (int i = line; i < endBefore; i++) { + + setSharedSegment(i); // Loads line i's text into s. + + int tokenType = tokenMaker.getLastTokenTypeOnLine(s, previousTokenType); + lastTokensOnLines.add(i, tokenType); + // System.err.println("--------- lastTokensOnLines.size() == " + + // lastTokensOnLines.getSize()); + + previousTokenType = tokenType; + + } // End of for (int i=line; i0). + + // Otherwise, text was inserted on a single line... + else { + + // Update last tokens for lines below until they stop changing. + updateLastTokensBelow(line, numLines, previousTokenType); + + } // End of else. + + // Let all listeners know about the insertion. + super.fireInsertUpdate(e); + + } + + /** + * This method is called AFTER the content has been inserted into the document + * and the element structure has been updated. + *

+ * The syntax-highlighting updates need to be done here (as opposed to an + * override of postRemoveUpdate) as this method is called in + * response to undo/redo events, whereas postRemoveUpdate is not. + *

+ * Now that the text is actually inserted into the content and element + * structure, we can update our token elements and "last tokens on lines" + * structure. + * + * @param chng + * The change that occurred. + * @see #removeUpdate + */ + @Override + protected void fireRemoveUpdate(DocumentEvent chng) { + + cachedTokenList = null; + Element lineMap = getDefaultRootElement(); + int numLines = lineMap.getElementCount(); + + DocumentEvent.ElementChange change = chng.getChange(lineMap); + Element[] removed = change == null ? null : change.getChildrenRemoved(); + + // If entire lines were removed... + if (removed != null && removed.length > 0) { + + int line = change.getIndex(); // First line entirely removed. + int previousLine = line - 1; // Line before that. + int previousTokenType = (previousLine > -1 ? lastTokensOnLines.get(previousLine) : Token.NULL); + + Element[] added = change.getChildrenAdded(); + int numAdded = added == null ? 0 : added.length; + + // Remove the cached last-token values for the removed lines. + int endBefore = line + removed.length - numAdded; + // System.err.println("... removing lines: " + line + " - " + (endBefore-1)); + // System.err.println("... added: " + numAdded + ", removed: " + + // removed.length); + + lastTokensOnLines.removeRange(line, endBefore); // Removing values for lines [line-(endBefore-1)]. + // System.err.println("--------- lastTokensOnLines.size() == " + + // lastTokensOnLines.getSize()); + + // Update last tokens for lines below until they've stopped changing. + updateLastTokensBelow(line, numLines, previousTokenType); + + } // End of if (removed!=null && removed.size()>0). + + // Otherwise, text was removed from just one line... + else { + + int line = lineMap.getElementIndex(chng.getOffset()); + if (line >= lastTokensOnLines.getSize()) { + return; // If we're editing the last line in a document... + } + + int previousLine = line - 1; + int previousTokenType = (previousLine > -1 ? lastTokensOnLines.get(previousLine) : Token.NULL); + // System.err.println("previousTokenType for line : " + previousLine + " is " + + // previousTokenType); + // Update last tokens for lines below until they've stopped changing. + updateLastTokensBelow(line, numLines, previousTokenType); + + } + + // Let all of our listeners know about the removal. + super.fireRemoveUpdate(chng); + + } + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + * + * @param type + * The token type. + * @return The closest "standard" token type. If a mapping is not defined for + * this language, then type is returned. + */ + public int getClosestStandardTokenTypeForInternalType(int type) { + return tokenMaker.getClosestStandardTokenTypeForInternalType(type); + } + + /** + * Returns whether closing markup tags should be automatically completed. This + * method only returns true if {@link #getLanguageIsMarkup()} also + * returns true. + * + * @return Whether markup closing tags should be automatically completed. + * @see #getLanguageIsMarkup() + */ + public boolean getCompleteMarkupCloseTags() { + // TODO: Remove terrible dependency on AbstractMarkupTokenMaker + return getLanguageIsMarkup() && ((AbstractMarkupTokenMaker) tokenMaker).getCompleteCloseTags(); + } + + /** + * Returns whether the current programming language uses curly braces + * ('{' and '}') to denote code blocks. + * + * @param languageIndex + * The language index at the offset in question. Since some + * TokenMakers effectively have nested languages (such + * as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return Whether curly braces denote code blocks. + */ + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return tokenMaker.getCurlyBracesDenoteCodeBlocks(languageIndex); + } + + /** + * Returns whether the current language is a markup language, such as HTML, XML + * or PHP. + * + * @return Whether the current language is a markup language. + */ + public boolean getLanguageIsMarkup() { + return tokenMaker.isMarkupLanguage(); + } + + /** + * Returns the token type of the last token on the given line. + * + * @param line + * The line to inspect. + * @return The token type of the last token on the specified line. If the line + * is invalid, an exception is thrown. + */ + public int getLastTokenTypeOnLine(int line) { + return lastTokensOnLines.get(line); + } + + /** + * Returns the text to place at the beginning and end of a line to "comment" it + * in this programming language. + * + * @return The start and end strings to add to a line to "comment" it out. A + * null value for either means there is no string to add + * for that part. A value of null for the array means this + * language does not support commenting/uncommenting lines. + */ + public String[] getLineCommentStartAndEnd(int languageIndex) { + return tokenMaker.getLineCommentStartAndEnd(languageIndex); + } + + /** + * Returns whether tokens of the specified type should have "mark occurrences" + * enabled for the current programming language. + * + * @param type + * The token type. + * @return Whether tokens of this type should have "mark occurrences" enabled. + */ + boolean getMarkOccurrencesOfTokenType(int type) { + return tokenMaker.getMarkOccurrencesOfTokenType(type); + } + + /** + * Returns the occurrence marker for the current language. + * + * @return The occurrence marker. + */ + OccurrenceMarker getOccurrenceMarker() { + return tokenMaker.getOccurrenceMarker(); + } + + /** + * This method returns whether auto indentation should be done if Enter is + * pressed at the end of the specified line. + * + * @param line + * The line to check. + * @return Whether an extra indentation should be done. + */ + public boolean getShouldIndentNextLine(int line) { + Token t = getTokenListForLine(line); + t = t.getLastNonCommentNonWhitespaceToken(); + return tokenMaker.getShouldIndentNextLineAfter(t); + } + + /** + * Returns the syntax style being used. + * + * @return The syntax style. + * @see #setSyntaxStyle(String) + */ + public String getSyntaxStyle() { + return syntaxStyle; + } + + /** + * Returns a token list for the specified segment of text representing the + * specified line number. This method is basically a wrapper for + * tokenMaker.getTokenList that takes into account the last token + * on the previous line to assure token accuracy. + * + * @param line + * The line number of text in the document, >= 0. + * @return A token list representing the specified line. + */ + public final Token getTokenListForLine(int line) { + + tokenRetrievalCount++; + if (line == lastLine && cachedTokenList != null) { + if (DEBUG_TOKEN_CACHING) { + useCacheCount++; + System.err.println("--- Using cached line; ratio now: " + useCacheCount + "/" + tokenRetrievalCount); + } + return cachedTokenList; + } + lastLine = line; + + Element map = getDefaultRootElement(); + Element elem = map.getElement(line); + int startOffset = elem.getStartOffset(); + // int endOffset = (line==map.getElementCount()-1 ? elem.getEndOffset() - 1: + // elem.getEndOffset() - 1); + int endOffset = elem.getEndOffset() - 1; // Why always "-1"? + try { + getText(startOffset, endOffset - startOffset, s); + } catch (BadLocationException ble) { + ble.printStackTrace(); + return null; + } + int initialTokenType = line == 0 ? Token.NULL : getLastTokenTypeOnLine(line - 1); + + // return tokenMaker.getTokenList(s, initialTokenType, startOffset); + cachedTokenList = tokenMaker.getTokenList(s, initialTokenType, startOffset); + return cachedTokenList; + + } + + boolean insertBreakSpecialHandling(ActionEvent e) { + Action a = tokenMaker.getInsertBreakAction(); + if (a != null) { + a.actionPerformed(e); + return true; + } + return false; + } + + /** + * Returns whether a character could be part of an "identifier" token in a + * specific language. This is used to identify such things as the bounds of the + * "word" to select on double-clicking. + * + * @param languageIndex + * The language index the character was found in. + * @param ch + * The character. + * @return Whether the character could be part of an "identifier" token. + */ + public boolean isIdentifierChar(int languageIndex, char ch) { + return tokenMaker.isIdentifierChar(languageIndex, ch); + } + + /** + * Returns an iterator over the paintable tokens in this document. Results are + * undefined if this document is modified while the iterator is being iterated + * through, so this should only be used on the EDT. + *

+ * + * The remove() method of the returned iterator will throw an + * UnsupportedOperationException. + * + * @return An iterator. + */ + @Override + public Iterator iterator() { + return new TokenIterator(this); + } + + /** + * Deserializes a document. + * + * @param in + * The stream to read from. + * @throws ClassNotFoundException + * @throws IOException + */ + private void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException { + + in.defaultReadObject(); + + // Install default TokenMakerFactory. To support custom TokenMakers, + // both JVM's should install default TokenMakerFactories that support + // the language they want to use beforehand. + setTokenMakerFactory(null); + + // Handle other transient stuff + this.s = new Segment(); + int lineCount = getDefaultRootElement().getElementCount(); + lastTokensOnLines = new DynamicIntArray(lineCount); + setSyntaxStyle(syntaxStyle); // Actually install (transient) TokenMaker + + } + + /** + * Makes our private Segment s point to the text in our document + * referenced by the specified element. Note that line MUST be a + * valid line number in the document. + * + * @param line + * The line number you want to get. + */ + private void setSharedSegment(int line) { + + Element map = getDefaultRootElement(); + // int numLines = map.getElementCount(); + + Element element = map.getElement(line); + if (element == null) { + throw new InternalError("Invalid line number: " + line); + } + int startOffset = element.getStartOffset(); + // int endOffset = (line==numLines-1 ? + // element.getEndOffset()-1 : element.getEndOffset() - 1); + int endOffset = element.getEndOffset() - 1; // Why always "-1"? + try { + getText(startOffset, endOffset - startOffset, s); + } catch (BadLocationException ble) { + throw new InternalError("Text range not in document: " + startOffset + "-" + endOffset); + } + + } + + /** + * Sets the syntax style being used for syntax highlighting in this document. + * What styles are supported by a document is determined by its + * {@link TokenMakerFactory}. By default, all RSyntaxDocuments + * support all languages built into RSyntaxTextArea. + * + * @param styleKey + * The new style to use, such as + * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. If this style is not + * known or supported by this document, then + * {@link SyntaxConstants#SYNTAX_STYLE_NONE} is used. + * @see #setSyntaxStyle(TokenMaker) + * @see #getSyntaxStyle() + */ + public void setSyntaxStyle(String styleKey) { + if (styleKey.equals("text/javaassembly")) { + tokenMaker = new JavaAssemblyTokenMaker(); + } else { + tokenMaker = tokenMakerFactory.getTokenMaker(styleKey); + } + updateSyntaxHighlightingInformation(); + this.syntaxStyle = styleKey; + } + + /** + * Sets the syntax style being used for syntax highlighting in this document. + * You should call this method if you've created a custom token maker for a + * language not normally supported by RSyntaxTextArea. + * + * @param tokenMaker + * The new token maker to use. + * @see #setSyntaxStyle(String) + */ + public void setSyntaxStyle(TokenMaker tokenMaker) { + this.tokenMaker = tokenMaker; + updateSyntaxHighlightingInformation(); + this.syntaxStyle = "text/unknown"; // TODO: Make me public? + } + + /** + * Sets the token maker factory used by this document. + * + * @param tmf + * The TokenMakerFactory for this document. If this is + * null, a default factory is used. + */ + public void setTokenMakerFactory(TokenMakerFactory tmf) { + tokenMakerFactory = tmf != null ? tmf : TokenMakerFactory.getDefaultInstance(); + } + + /** + * Loops through the last-tokens-on-lines array from a specified point onward, + * updating last-token values until they stop changing. This should be called + * when lines are updated/inserted/removed, as doing so may cause lines below to + * change color. + * + * @param line + * The first line to check for a change in last-token value. + * @param numLines + * The number of lines in the document. + * @param previousTokenType + * The last-token value of the line just before line. + * @return The last line that needs repainting. + */ + private int updateLastTokensBelow(int line, int numLines, int previousTokenType) { + + int firstLine = line; + + // Loop through all lines past our starting point. Update even the last + // line's info, even though there aren't any lines after it that depend + // on it changing for them to be changed, as its state may be used + // elsewhere in the library. + int end = numLines; + // System.err.println("--- end==" + end + " (numLines==" + numLines + ")"); + while (line < end) { + + setSharedSegment(line); // Sets s's text to that of line 'line' in the document. + + int oldTokenType = lastTokensOnLines.get(line); + int newTokenType = tokenMaker.getLastTokenTypeOnLine(s, previousTokenType); + // System.err.println("---------------- line " + line + "; oldTokenType==" + + // oldTokenType + ", newTokenType==" + newTokenType + ", s=='" + s + "'"); + + // If this line's end-token value didn't change, stop here. Note + // that we're saying this line needs repainting; this is because + // the beginning of this line did indeed change color, but the + // end didn't. + if (oldTokenType == newTokenType) { + // System.err.println("... ... ... repainting lines " + firstLine + "-" + line); + fireChangedUpdate(new DefaultDocumentEvent(firstLine, line, DocumentEvent.EventType.CHANGE)); + return line; + } + + // If the line's end-token value did change, update it and + // keep going. + // NOTE: "setUnsafe" is okay here as the bounds checking was + // already done in lastTokensOnLines.get(line) above. + lastTokensOnLines.setUnsafe(line, newTokenType); + previousTokenType = newTokenType; + line++; + + } // End of while (line firstLine) { + // System.err.println("... ... ... repainting lines " + firstLine + "-" + line); + fireChangedUpdate(new DefaultDocumentEvent(firstLine, line, DocumentEvent.EventType.CHANGE)); + } + + return line; + + } + + /** + * Updates internal state information; e.g. the "last tokens on lines" data. + * After this, a changed update is fired to let listeners know that the + * document's structure has changed. + *

+ * + * This is called internally whenever the syntax style changes. + */ + private void updateSyntaxHighlightingInformation() { + + // Reinitialize the "last token on each line" array. Note that since + // the actual text in the document isn't changing, the number of lines + // is the same. + Element map = getDefaultRootElement(); + int numLines = map.getElementCount(); + int lastTokenType = Token.NULL; + for (int i = 0; i < numLines; i++) { + setSharedSegment(i); + lastTokenType = tokenMaker.getLastTokenTypeOnLine(s, lastTokenType); + lastTokensOnLines.set(i, lastTokenType); + } + + // Clear our token cache to force re-painting + lastLine = -1; + cachedTokenList = null; + + // Let everybody know that syntax styles have (probably) changed. + fireChangedUpdate(new DefaultDocumentEvent(0, numLines - 1, DocumentEvent.EventType.CHANGE)); + + } + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.java new file mode 100644 index 0000000..5ec621f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.java @@ -0,0 +1,3300 @@ +/* + * 01/27/2004 + * + * RSyntaxTextArea.java - An extension of RTextArea that adds + * the ability to syntax highlight certain programming languages. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.Window; +import java.awt.datatransfer.Clipboard; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.font.FontRenderContext; +import java.io.File; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.ResourceBundle; + +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JPopupMenu; +import javax.swing.JViewport; +import javax.swing.SwingUtilities; +import javax.swing.Timer; +import javax.swing.UIManager; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Highlighter; + +import org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip; +import org.fife.ui.rsyntaxtextarea.folding.DefaultFoldManager; +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; +import org.fife.ui.rsyntaxtextarea.parser.Parser; +import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; +import org.fife.ui.rsyntaxtextarea.parser.ToolTipInfo; +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextAreaUI; +import org.fife.ui.rtextarea.RecordableTextAction; + +/** + * An extension of RTextArea that adds syntax highlighting of + * certain programming languages to its list of features. Languages currently + * supported include: + * + * + * + * + * + * + *
+ *
    + *
  • ActionScript + *
  • Assembler (X86) + *
  • BBCode + *
  • C + *
  • C++ + *
  • CSS + *
  • C# + *
  • Clojure + *
  • Dart + *
  • Delphi + *
  • DTD + *
  • Fortran + *
  • Groovy + *
  • HTML + *
  • htaccess + *
  • Java + *
  • JavaScript + *
  • .jshintrc + *
  • JSP + *
+ *
+ *
    + *
  • LaTeX + *
  • Lisp + *
  • Lua + *
  • Make + *
  • MXML + *
  • NSIS + *
  • Perl + *
  • PHP + *
  • Properties files + *
  • Python + *
  • Ruby + *
  • SAS + *
  • Scala + *
  • SQL + *
  • Tcl + *
  • UNIX shell scripts + *
  • Visual Basic + *
  • Windows batch + *
  • XML files + *
+ *
+ * + * Other added features include: + *

    + *
  • Code folding + *
  • Bracket matching + *
  • Auto-indentation + *
  • Copy as RTF + *
  • Clickable hyperlinks (if the language scanner being used supports it) + *
  • A pluggable "parser" system that can be used to implement syntax + * validation, spell checking, etc. + *
+ * + * It is recommended that you use an instance of + * {@link org.fife.ui.rtextarea.RTextScrollPane} instead of a regular + * JScrollPane as this class allows you to add line numbers and + * bookmarks easily to your text area. + * + * @author Robert Futrell + * @version 2.5.8 + * @see TextEditorPane + */ +public class RSyntaxTextArea extends RTextArea implements SyntaxConstants { + + public static final String ANIMATE_BRACKET_MATCHING_PROPERTY = "RSTA.animateBracketMatching"; + public static final String ANTIALIAS_PROPERTY = "RSTA.antiAlias"; + public static final String AUTO_INDENT_PROPERTY = "RSTA.autoIndent"; + public static final String BRACKET_MATCHING_PROPERTY = "RSTA.bracketMatching"; + public static final String CLEAR_WHITESPACE_LINES_PROPERTY = "RSTA.clearWhitespaceLines"; + public static final String CLOSE_CURLY_BRACES_PROPERTY = "RSTA.closeCurlyBraces"; + public static final String CLOSE_MARKUP_TAGS_PROPERTY = "RSTA.closeMarkupTags"; + public static final String CODE_FOLDING_PROPERTY = "RSTA.codeFolding"; + public static final String EOL_VISIBLE_PROPERTY = "RSTA.eolMarkersVisible"; + public static final String FOCUSABLE_TIPS_PROPERTY = "RSTA.focusableTips"; + public static final String FRACTIONAL_FONTMETRICS_PROPERTY = "RSTA.fractionalFontMetrics"; + public static final String HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY = "RSTA.highlightSecondaryLanguages"; + public static final String HYPERLINKS_ENABLED_PROPERTY = "RSTA.hyperlinksEnabled"; + public static final String MARK_OCCURRENCES_PROPERTY = "RSTA.markOccurrences"; + public static final String MARKED_OCCURRENCES_CHANGED_PROPERTY = "RSTA.markedOccurrencesChanged"; + public static final String PAINT_MATCHED_BRACKET_PAIR_PROPERTY = "RSTA.paintMatchedBracketPair"; + public static final String PARSER_NOTICES_PROPERTY = "RSTA.parserNotices"; + public static final String SYNTAX_SCHEME_PROPERTY = "RSTA.syntaxScheme"; + public static final String SYNTAX_STYLE_PROPERTY = "RSTA.syntaxStyle"; + public static final String TAB_LINE_COLOR_PROPERTY = "RSTA.tabLineColor"; + public static final String TAB_LINES_PROPERTY = "RSTA.tabLines"; + public static final String USE_SELECTED_TEXT_COLOR_PROPERTY = "RSTA.useSelectedTextColor"; + public static final String VISIBLE_WHITESPACE_PROPERTY = "RSTA.visibleWhitespace"; + + private static final Color DEFAULT_BRACKET_MATCH_BG_COLOR = new Color(234, 234, 255); + private static final Color DEFAULT_BRACKET_MATCH_BORDER_COLOR = new Color(0, 0, 128); + private static final Color DEFAULT_SELECTION_COLOR = new Color(200, 200, 255); + + private static final String MSG = "org.fife.ui.rsyntaxtextarea.RSyntaxTextArea"; + + private JMenu foldingMenu; + private static RecordableTextAction toggleCurrentFoldAction; + private static RecordableTextAction collapseAllCommentFoldsAction; + private static RecordableTextAction collapseAllFoldsAction; + private static RecordableTextAction expandAllFoldsAction; + + /** The key for the syntax style to be highlighting. */ + private String syntaxStyleKey; + + /** The colors used for syntax highlighting. */ + private SyntaxScheme syntaxScheme; + + /** Handles code templates. */ + private static CodeTemplateManager codeTemplateManager; + + /** Whether or not templates are enabled. */ + private static boolean templatesEnabled; + + /** + * The rectangle surrounding the "matched bracket" if bracket matching is + * enabled. + */ + private Rectangle match; + + /** + * The rectangle surrounding the current offset if both bracket matching and + * "match both brackets" are enabled. + */ + private Rectangle dotRect; + + /** + * Used to store the location of the bracket at the caret position (either just + * before or just after it) and the location of its match. + */ + private Point bracketInfo; + + /** + * Colors used for the "matched bracket" if bracket matching is enabled. + */ + private Color matchedBracketBGColor; + private Color matchedBracketBorderColor; + + /** The location of the last matched bracket. */ + private int lastBracketMatchPos; + + /** Whether or not bracket matching is enabled. */ + private boolean bracketMatchingEnabled; + + /** Whether or not bracket matching is animated. */ + private boolean animateBracketMatching; + + /** Whether both brackets are highlighted when bracket matching. */ + private boolean paintMatchedBracketPair; + + private BracketMatchingTimer bracketRepaintTimer; + + private MatchedBracketPopupTimer matchedBracketPopupTimer; + + private boolean metricsNeverRefreshed; + + /** + * Whether or not auto-indent is on. + */ + private boolean autoIndentEnabled; + + /** + * Whether curly braces should be closed on Enter key presses, (if the current + * language supports it). + */ + private boolean closeCurlyBraces; + + /** + * Whether closing markup tags should be automatically completed when + * "</" is typed (if the current language is a markup language). + */ + private boolean closeMarkupTags; + + /** + * Whether or not lines with nothing but whitespace are "made empty". + */ + private boolean clearWhitespaceLines; + + /** Whether we are displaying visible whitespace (spaces and tabs). */ + private boolean whitespaceVisible; + + /** Whether EOL markers should be visible at the end of each line. */ + private boolean eolMarkersVisible; + + /** Whether tab lines are enabled. */ + private boolean paintTabLines; + + /** The color to use when painting tab lines. */ + private Color tabLineColor; + + /** + * Whether hyperlinks are enabled (must be supported by the syntax scheme being + * used). + */ + private boolean hyperlinksEnabled; + + /** The color to use when painting hyperlinks. */ + private Color hyperlinkFG; + + /** + * Mask used to determine if the correct key is being held down to scan for + * hyperlinks (ctrl, meta, etc.). + */ + private int linkScanningMask; + + /** Whether secondary languages have their backgrounds colored. */ + private boolean highlightSecondaryLanguages; + + /** Whether the "selected text" color should be used with selected text. */ + private boolean useSelectedTextColor; + + /** Handles "mark occurrences" support. */ + private MarkOccurrencesSupport markOccurrencesSupport; + + /** The color used to render "marked occurrences". */ + private Color markOccurrencesColor; + + /** The delay before occurrences are marked in the editor. */ + private int markOccurrencesDelay; + + /** Whether a border should be painted around marked occurrences. */ + private boolean paintMarkOccurrencesBorder; + + /** Metrics of the text area's font. */ + private FontMetrics defaultFontMetrics; + + /** Manages running the parser. */ + private ParserManager parserManager; + + private String cachedTip; + /** Used to work around an issue with Apple JVMs. */ + private Point cachedTipLoc; + + /** + * Whether the editor is currently scanning for hyperlinks on mouse movement. + */ + private boolean isScanningForLinks; + + private int hoveredOverLinkOffset; + + private LinkGenerator linkGenerator; + private LinkGeneratorResult linkGeneratorResult; + + private int rhsCorrection; + + private FoldManager foldManager; + + /** Whether "focusable" tool tips are used instead of standard ones. */ + private boolean useFocusableTips; + + /** The last focusable tip displayed. */ + private FocusableTip focusableTip; + + /** Cached desktop anti-aliasing hints, if anti-aliasing is enabled. */ + private Map aaHints; + + /** Renders tokens. */ + private TokenPainter tokenPainter; + + /** Whether a popup showing matched bracket lines when they're off-screen. */ + private boolean showMatchedBracketPopup; + + private int lineHeight; // Height of a line of text; same for default, bold & italic. + private int maxAscent; + private boolean fractionalFontMetricsEnabled; + + private Color[] secondaryLanguageBackgrounds; + + /** + * Constructor. + */ + public RSyntaxTextArea() { + } + + /** + * Constructor. + * + * @param doc + * The document for the editor. + */ + public RSyntaxTextArea(RSyntaxDocument doc) { + super(doc); + setSyntaxEditingStyle(doc.getSyntaxStyle()); + } + + /** + * Constructor. + * + * @param text + * The initial text to display. + */ + public RSyntaxTextArea(String text) { + super(text); + } + + /** + * Constructor. + * + * @param rows + * The number of rows to display. + * @param cols + * The number of columns to display. + * @throws IllegalArgumentException + * If either rows or cols is negative. + */ + public RSyntaxTextArea(int rows, int cols) { + super(rows, cols); + } + + /** + * Constructor. + * + * @param text + * The initial text to display. + * @param rows + * The number of rows to display. + * @param cols + * The number of columns to display. + * @throws IllegalArgumentException + * If either rows or cols is negative. + */ + public RSyntaxTextArea(String text, int rows, int cols) { + super(text, rows, cols); + } + + /** + * Constructor. + * + * @param doc + * The document for the editor. + * @param text + * The initial text to display. + * @param rows + * The number of rows to display. + * @param cols + * The number of columns to display. + * @throws IllegalArgumentException + * If either rows or cols is negative. + */ + public RSyntaxTextArea(RSyntaxDocument doc, String text, int rows, int cols) { + super(doc, text, rows, cols); + } + + /** + * Creates a new RSyntaxTextArea. + * + * @param textMode + * Either INSERT_MODE or OVERWRITE_MODE. + */ + public RSyntaxTextArea(int textMode) { + super(textMode); + } + + /** + * Adds an "active line range" listener to this text area. + * + * @param l + * The listener to add. + * @see #removeActiveLineRangeListener(ActiveLineRangeListener) + */ + public void addActiveLineRangeListener(ActiveLineRangeListener l) { + listenerList.add(ActiveLineRangeListener.class, l); + } + + /** + * Adds a hyperlink listener to this text area. + * + * @param l + * The listener to add. + * @see #removeHyperlinkListener(HyperlinkListener) + */ + public void addHyperlinkListener(HyperlinkListener l) { + listenerList.add(HyperlinkListener.class, l); + } + + /** + * Updates the font metrics the first time we're displayed. + */ + @Override + public void addNotify() { + + super.addNotify(); + + // Some LookAndFeels (e.g. WebLaF) for some reason have a 0x0 parent + // window initially (perhaps something to do with them fading in?), + // which will cause an exception from getGraphics(), so we must be + // careful here. + if (metricsNeverRefreshed) { + Window parent = SwingUtilities.getWindowAncestor(this); + if (parent != null && parent.getWidth() > 0 && parent.getHeight() > 0) { + refreshFontMetrics(getGraphics2D(getGraphics())); + metricsNeverRefreshed = false; + } + } + + // Re-start parsing if we were removed from one container and added + // to another + if (parserManager != null) { + parserManager.restartParsing(); + } + + } + + /** + * Adds the parser to "validate" the source code in this text area. This can be + * anything from a spell checker to a "compiler" that verifies source code. + * + * @param parser + * The new parser. A value of null will do nothing. + * @see #getParser(int) + * @see #getParserCount() + * @see #removeParser(Parser) + */ + public void addParser(Parser parser) { + if (parserManager == null) { + parserManager = new ParserManager(this); + } + parserManager.addParser(parser); + } + + /** + * Appends a submenu with code folding options to this text component's popup + * menu. + * + * @param popup + * The popup menu to append to. + * @see #createPopupMenu() + */ + protected void appendFoldingMenu(JPopupMenu popup) { + popup.addSeparator(); + ResourceBundle bundle = ResourceBundle.getBundle(MSG); + foldingMenu = new JMenu(bundle.getString("ContextMenu.Folding")); + foldingMenu.add(createPopupMenuItem(toggleCurrentFoldAction)); + foldingMenu.add(createPopupMenuItem(collapseAllCommentFoldsAction)); + foldingMenu.add(createPopupMenuItem(collapseAllFoldsAction)); + foldingMenu.add(createPopupMenuItem(expandAllFoldsAction)); + popup.add(foldingMenu); + + } + + /** + * Recalculates the height of a line in this text area and the maximum ascent of + * all fonts displayed. + */ + private void calculateLineHeight() { + + lineHeight = maxAscent = 0; + + // Each token style. + for (int i = 0; i < syntaxScheme.getStyleCount(); i++) { + Style ss = syntaxScheme.getStyle(i); + if (ss != null && ss.font != null) { + FontMetrics fm = getFontMetrics(ss.font); + int height = fm.getHeight(); + if (height > lineHeight) { + lineHeight = height; + } + int ascent = fm.getMaxAscent(); + if (ascent > maxAscent) { + maxAscent = ascent; + } + } + } + + // The text area's (default) font). + Font temp = getFont(); + FontMetrics fm = getFontMetrics(temp); + int height = fm.getHeight(); + if (height > lineHeight) { + lineHeight = height; + } + int ascent = fm.getMaxAscent(); + if (ascent > maxAscent) { + maxAscent = ascent; + } + + } + + /** + * Removes all parsers from this text area. + * + * @see #removeParser(Parser) + */ + public void clearParsers() { + if (parserManager != null) { + parserManager.clearParsers(); + } + } + + /** + * Clones a token list. This is necessary as tokens are reused in + * {@link RSyntaxDocument}, so we can't simply use the ones we are handed from + * it. + * + * @param t + * The token list to clone. + * @return The clone of the token list. + */ + private TokenImpl cloneTokenList(Token t) { + + if (t == null) { + return null; + } + + TokenImpl clone = new TokenImpl(t); + TokenImpl cloneEnd = clone; + + while ((t = t.getNextToken()) != null) { + TokenImpl temp = new TokenImpl(t); + cloneEnd.setNextToken(temp); + cloneEnd = temp; + } + + return clone; + + } + + /** + * Overridden to toggle the enabled state of various RSyntaxTextArea-specific + * menu items. + * + * If you set the popup menu via {@link #setPopupMenu(JPopupMenu)}, you will + * want to override this method, especially if you removed any of the menu items + * in the default popup menu. + * + * @param popupMenu + * The popup menu. This will never be null. + * @see #createPopupMenu() + * @see #setPopupMenu(JPopupMenu) + */ + @Override + protected void configurePopupMenu(JPopupMenu popupMenu) { + + super.configurePopupMenu(popupMenu); + + // They may have overridden createPopupMenu()... + if (popupMenu != null && popupMenu.getComponentCount() > 0 && foldingMenu != null) { + foldingMenu.setEnabled(foldManager.isCodeFoldingSupportedAndEnabled()); + } + } + + /** + * Copies the currently selected text to the system clipboard, with any + * necessary style information (font, foreground color and background color). + * Does nothing for null selections. + */ + public void copyAsRtf() { + + int selStart = getSelectionStart(); + int selEnd = getSelectionEnd(); + if (selStart == selEnd) { + return; + } + + // Make sure there is a system clipboard, and that we can write + // to it. + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + try { + sm.checkSystemClipboardAccess(); + } catch (SecurityException se) { + UIManager.getLookAndFeel().provideErrorFeedback(null); + return; + } + } + Clipboard cb = getToolkit().getSystemClipboard(); + + // Create the RTF selection. + RtfGenerator gen = new RtfGenerator(); + Token tokenList = getTokenListFor(selStart, selEnd); + for (Token t = tokenList; t != null; t = t.getNextToken()) { + if (t.isPaintable()) { + if (t.length() == 1 && t.charAt(0) == '\n') { + gen.appendNewline(); + } else { + Font font = getFontForTokenType(t.getType()); + Color bg = getBackgroundForToken(t); + boolean underline = getUnderlineForToken(t); + // Small optimization - don't print fg color if this + // is a whitespace color. Saves on RTF size. + if (t.isWhitespace()) { + gen.appendToDocNoFG(t.getLexeme(), font, bg, underline); + } else { + Color fg = getForegroundForToken(t); + gen.appendToDoc(t.getLexeme(), font, fg, bg, underline); + } + } + } + } + + // Set the system clipboard contents to the RTF selection. + RtfTransferable contents = new RtfTransferable(gen.getRtf().getBytes()); + // System.out.println("*** " + new String(gen.getRtf().getBytes())); + try { + cb.setContents(contents, null); + } catch (IllegalStateException ise) { + UIManager.getLookAndFeel().provideErrorFeedback(null); + return; + } + + } + + /** + * Returns the document to use for an RSyntaxTextArea. + * + * @return The document. + */ + @Override + protected Document createDefaultModel() { + return new RSyntaxDocument(SYNTAX_STYLE_NONE); + } + + /** + * Returns the caret event/mouse listener for RTextAreas. + * + * @return The caret event/mouse listener. + */ + @Override + protected RTAMouseListener createMouseListener() { + return new RSyntaxTextAreaMutableCaretEvent(this); + } + + /** + * Overridden to add menu items related to cold folding. + * + * @return The popup menu. + * @see #appendFoldingMenu(JPopupMenu) + */ + @Override + protected JPopupMenu createPopupMenu() { + JPopupMenu popup = super.createPopupMenu(); + appendFoldingMenu(popup); + return popup; + } + + /** + * See createPopupMenuActions() in RTextArea. TODO: Remove these horrible hacks + * and move localizing of actions into the editor kits, where it should be! The + * context menu should contain actions from the editor kits. + */ + private static void createRstaPopupMenuActions() { + + ResourceBundle msg = ResourceBundle.getBundle(MSG); + + toggleCurrentFoldAction = new RSyntaxTextAreaEditorKit.ToggleCurrentFoldAction(); + toggleCurrentFoldAction.setProperties(msg, "Action.ToggleCurrentFold"); + + collapseAllCommentFoldsAction = new RSyntaxTextAreaEditorKit.CollapseAllCommentFoldsAction(); + collapseAllCommentFoldsAction.setProperties(msg, "Action.CollapseCommentFolds"); + + collapseAllFoldsAction = new RSyntaxTextAreaEditorKit.CollapseAllFoldsAction(true); + expandAllFoldsAction = new RSyntaxTextAreaEditorKit.ExpandAllFoldsAction(true); + + } + + /** + * Returns the a real UI to install on this text area. + * + * @return The UI. + */ + @Override + protected RTextAreaUI createRTextAreaUI() { + return new RSyntaxTextAreaUI(this); + } + + /** + * If the caret is on a bracket, this method finds the matching bracket, and if + * it exists, highlights it. + */ + protected final void doBracketMatching() { + + // We always need to repaint the "matched bracket" highlight if it + // exists. + if (match != null) { + repaint(match); + if (dotRect != null) { + repaint(dotRect); + } + } + + // If a matching bracket is found, get its bounds and paint it! + int lastCaretBracketPos = bracketInfo == null ? -1 : bracketInfo.x; + bracketInfo = RSyntaxUtilities.getMatchingBracketPosition(this, bracketInfo); + if (bracketInfo.y > -1 && (bracketInfo.y != lastBracketMatchPos || bracketInfo.x != lastCaretBracketPos)) { + try { + match = modelToView(bracketInfo.y); + if (match != null) { // Happens if we're not yet visible + if (getPaintMatchedBracketPair()) { + dotRect = modelToView(bracketInfo.x); + } else { + dotRect = null; + } + if (getAnimateBracketMatching()) { + bracketRepaintTimer.restart(); + } + repaint(match); + if (dotRect != null) { + repaint(dotRect); + } + + if (getShowMatchedBracketPopup()) { + Container parent = getParent(); + if (parent instanceof JViewport) { + Rectangle visibleRect = this.getVisibleRect(); + if (match.y + match.height < visibleRect.getY()) { + if (matchedBracketPopupTimer == null) { + matchedBracketPopupTimer = new MatchedBracketPopupTimer(); + } + matchedBracketPopupTimer.restart(bracketInfo.y); + } + } + } + + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Shouldn't happen. + } + } else if (bracketInfo.y == -1) { + // Set match to null so the old value isn't still repainted. + match = null; + dotRect = null; + bracketRepaintTimer.stop(); + } + lastBracketMatchPos = bracketInfo.y; + + } + + /** + * Notifies all listeners that a caret change has occurred. + * + * @param e + * The caret event. + */ + @Override + protected void fireCaretUpdate(CaretEvent e) { + super.fireCaretUpdate(e); + if (isBracketMatchingEnabled()) { + doBracketMatching(); + } + } + + /** + * Notifies all listeners that the active line range has changed. + * + * @param min + * The minimum "active" line, or -1. + * @param max + * The maximum "active" line, or -1. + */ + private void fireActiveLineRangeEvent(int min, int max) { + ActiveLineRangeEvent e = null; // Lazily created + // Guaranteed to return a non-null array + Object[] listeners = listenerList.getListenerList(); + // Process the listeners last to first, notifying + // those that are interested in this event + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ActiveLineRangeListener.class) { + if (e == null) { + e = new ActiveLineRangeEvent(this, min, max); + } + ((ActiveLineRangeListener) listeners[i + 1]).activeLineRangeChanged(e); + } + } + } + + /** + * Notifies all listeners that have registered interest for notification on this + * event type. The listener list is processed last to first. + * + * @param e + * The event to fire. + */ + private void fireHyperlinkUpdate(HyperlinkEvent e) { + // Guaranteed to return a non-null array + Object[] listeners = listenerList.getListenerList(); + // Process the listeners last to first, notifying + // those that are interested in this event + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == HyperlinkListener.class) { + ((HyperlinkListener) listeners[i + 1]).hyperlinkUpdate(e); + } + } + } + + /** + * Notifies listeners that the marked occurrences for this text area have + * changed. + */ + void fireMarkedOccurrencesChanged() { + firePropertyChange(RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, null, null); + } + + /** + * Fires a notification that the parser notices for this text area have changed. + */ + void fireParserNoticesChange() { + firePropertyChange(PARSER_NOTICES_PROPERTY, null, null); + } + + /** + * Called whenever a fold is collapsed or expanded. This causes the text editor + * to revalidate. This method is here because of poor design and should be + * removed. + * + * @param fold + * The fold that was collapsed or expanded. + */ + public void foldToggled(Fold fold) { + match = null; // TODO: Update the bracket rect rather than hide it + dotRect = null; + if (getLineWrap()) { + // NOTE: Without doing this later, the caret position is out of + // sync with the Element structure when word wrap is enabled, and + // causes BadLocationExceptions when an entire folded region is + // deleted (see GitHub issue #22: + // https://github.com/bobbylight/RSyntaxTextArea/issues/22) + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + possiblyUpdateCurrentLineHighlightLocation(); + } + }); + } else { + possiblyUpdateCurrentLineHighlightLocation(); + } + revalidate(); + repaint(); + } + + /** + * Forces the given {@link Parser} to re-parse the content of this text area. + *

+ * + * This method can be useful when a Parser can be configured as to + * what notices it returns. For example, if a Java language parser can be + * configured to set whether no serialVersionUID is a warning, error, or + * ignored, this method can be called after changing the expected notice type to + * have the document re-parsed. + * + * @param parser + * The index of the Parser to re-run. + * @see #getParser(int) + */ + public void forceReparsing(int parser) { + parserManager.forceReparsing(parser); + } + + /** + * Forces re-parsing with a specific parser. Note that if this parser is not + * installed on this text area, nothing will happen. + * + * @param parser + * The parser that should re-parse this text area's contents. This + * should be installed on this text area. + * @return Whether the parser was installed on this text area. + * @see #forceReparsing(int) + */ + public boolean forceReparsing(Parser parser) { + for (int i = 0; i < getParserCount(); i++) { + if (getParser(i) == parser) { + forceReparsing(i); + return true; + } + } + return false; + } + + /** + * Returns whether bracket matching should be animated. + * + * @return Whether bracket matching should be animated. + * @see #setAnimateBracketMatching(boolean) + */ + public boolean getAnimateBracketMatching() { + return animateBracketMatching; + } + + /** + * Returns whether anti-aliasing is enabled in this editor. + * + * @return Whether anti-aliasing is enabled in this editor. + * @see #setAntiAliasingEnabled(boolean) + * @see #getFractionalFontMetricsEnabled() + */ + public boolean getAntiAliasingEnabled() { + return aaHints != null; + } + + /** + * Returns the background color for a token. + * + * @param token + * The token. + * @return The background color to use for that token. If this value is is + * null then this token has no special background color. + * @see #getForegroundForToken(Token) + */ + public Color getBackgroundForToken(Token token) { + Color c = null; + if (getHighlightSecondaryLanguages()) { + // 1-indexed, since 0 == main language. + int languageIndex = token.getLanguageIndex() - 1; + if (languageIndex >= 0 && languageIndex < secondaryLanguageBackgrounds.length) { + c = secondaryLanguageBackgrounds[languageIndex]; + } + } + if (c == null) { + c = syntaxScheme.getStyle(token.getType()).background; + } + // Don't default to this.getBackground(), as Tokens simply don't + // paint a background if they get a null Color. + return c; + } + + /** + * Returns whether curly braces should be automatically closed when a newline is + * entered after an opening curly brace. Note that this property is only honored + * for languages that use curly braces to denote code blocks. + * + * @return Whether curly braces should be automatically closed. + * @see #setCloseCurlyBraces(boolean) + */ + public boolean getCloseCurlyBraces() { + return closeCurlyBraces; + } + + /** + * Returns whether closing markup tags should be automatically completed when + * "</" is typed. Note that this property is only honored for + * markup languages, such as HTML, XML and PHP. + * + * @return Whether closing markup tags should be automatically completed. + * @see #setCloseMarkupTags(boolean) + */ + public boolean getCloseMarkupTags() { + return closeMarkupTags; + } + + /** + * Returns the code template manager for all instances of + * RSyntaxTextArea. The manager is lazily created. + * + * @return The code template manager. + * @see #setTemplatesEnabled(boolean) + */ + public static synchronized CodeTemplateManager getCodeTemplateManager() { + if (codeTemplateManager == null) { + codeTemplateManager = new CodeTemplateManager(); + } + return codeTemplateManager; + } + + /** + * Returns the default bracket-match background color. + * + * @return The color. + * @see #getDefaultBracketMatchBorderColor + */ + public static final Color getDefaultBracketMatchBGColor() { + return DEFAULT_BRACKET_MATCH_BG_COLOR; + } + + /** + * Returns the default bracket-match border color. + * + * @return The color. + * @see #getDefaultBracketMatchBGColor + */ + public static final Color getDefaultBracketMatchBorderColor() { + return DEFAULT_BRACKET_MATCH_BORDER_COLOR; + } + + /** + * Returns the default selection color for this text area. This color was chosen + * because it's light and RSyntaxTextArea does not change text + * color between selected/unselected text for contrast like regular + * JTextAreas do. + * + * @return The default selection color. + */ + public static Color getDefaultSelectionColor() { + return DEFAULT_SELECTION_COLOR; + } + + /** + * Returns the "default" syntax highlighting color scheme. The colors used are + * somewhat standard among syntax highlighting text editors. + * + * @return The default syntax highlighting color scheme. + * @see #restoreDefaultSyntaxScheme() + * @see #getSyntaxScheme() + * @see #setSyntaxScheme(SyntaxScheme) + */ + public SyntaxScheme getDefaultSyntaxScheme() { + return new SyntaxScheme(getFont()); + } + + /** + * Returns whether an EOL marker should be drawn at the end of each line. + * + * @return Whether EOL markers should be visible. + * @see #setEOLMarkersVisible(boolean) + * @see #isWhitespaceVisible() + */ + public boolean getEOLMarkersVisible() { + return eolMarkersVisible; + } + + /** + * Returns the fold manager for this text area. + * + * @return The fold manager. + */ + public FoldManager getFoldManager() { + return foldManager; + } + + /** + * Returns the font for tokens of the specified type. + * + * @param type + * The type of token. + * @return The font to use for that token type. + * @see #getFontMetricsForTokenType(int) + */ + public Font getFontForTokenType(int type) { + Font f = syntaxScheme.getStyle(type).font; + return f != null ? f : getFont(); + } + + /** + * Returns the font metrics for tokens of the specified type. + * + * @param type + * The type of token. + * @return The font metrics to use for that token type. + * @see #getFontForTokenType(int) + */ + public FontMetrics getFontMetricsForTokenType(int type) { + FontMetrics fm = syntaxScheme.getStyle(type).fontMetrics; + return fm != null ? fm : defaultFontMetrics; + } + + /** + * Returns the foreground color to use when painting a token. + * + * @param t + * The token. + * @return The foreground color to use for that token. This value is never + * null. + * @see #getBackgroundForToken(Token) + */ + public Color getForegroundForToken(Token t) { + if (getHyperlinksEnabled() && hoveredOverLinkOffset == t.getOffset() + && (t.isHyperlink() || linkGeneratorResult != null)) { + return hyperlinkFG; + } + return getForegroundForTokenType(t.getType()); + } + + /** + * Returns the foreground color to use when painting a token. This does not take + * into account whether the token is a hyperlink. + * + * @param type + * The token type. + * @return The foreground color to use for that token. This value is never + * null. + * @see #getForegroundForToken(Token) + */ + public Color getForegroundForTokenType(int type) { + Color fg = syntaxScheme.getStyle(type).foreground; + return fg != null ? fg : getForeground(); + } + + /** + * Returns whether fractional font metrics are enabled for this text area. + * + * @return Whether fractional font metrics are enabled. + * @see #setFractionalFontMetricsEnabled + * @see #getAntiAliasingEnabled() + */ + public boolean getFractionalFontMetricsEnabled() { + return fractionalFontMetricsEnabled; + } + + /** + * Returns a Graphics2D version of the specified graphics that has + * been initialized with the proper rendering hints. + * + * @param g + * The graphics context for which to get a Graphics2D. + * @return The Graphics2D. + */ + private Graphics2D getGraphics2D(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + if (aaHints != null) { + g2d.addRenderingHints(aaHints); + } + if (fractionalFontMetricsEnabled) { + g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); + } + return g2d; + } + + /** + * Returns whether "secondary" languages should have their backgrounds colored + * differently to visually differentiate them. This feature imposes a fair + * performance penalty. + * + * @return Whether secondary languages have their backgrounds colored + * differently. + * @see #setHighlightSecondaryLanguages(boolean) + * @see #getSecondaryLanguageBackground(int) + * @see #getSecondaryLanguageCount() + * @see #setSecondaryLanguageBackground(int, Color) + */ + public boolean getHighlightSecondaryLanguages() { + return highlightSecondaryLanguages; + } + + /** + * Returns the color to use when painting hyperlinks. + * + * @return The color to use when painting hyperlinks. + * @see #setHyperlinkForeground(Color) + * @see #getHyperlinksEnabled() + */ + public Color getHyperlinkForeground() { + return hyperlinkFG; + } + + /** + * Returns whether hyperlinks are enabled for this text area. + * + * @return Whether hyperlinks are enabled for this text area. + * @see #setHyperlinksEnabled(boolean) + */ + public boolean getHyperlinksEnabled() { + return hyperlinksEnabled; + } + + /** + * Returns the last visible offset in this text area. This may not be the length + * of the document if code folding is enabled. + * + * @return The last visible offset in this text area. + */ + public int getLastVisibleOffset() { + if (isCodeFoldingEnabled()) { + int lastVisibleLine = foldManager.getLastVisibleLine(); + if (lastVisibleLine < getLineCount() - 1) { // Not the last line + try { + return getLineEndOffset(lastVisibleLine) - 1; + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + } + } + return getDocument().getLength(); + } + + /** + * Returns the height to use for a line of text in this text area. + * + * @return The height of a line of text in this text area. + */ + @Override + public int getLineHeight() { + // System.err.println("... getLineHeight() returning " + lineHeight); + return lineHeight; + } + + public LinkGenerator getLinkGenerator() { + return linkGenerator; + } + + /** + * Returns a list of "mark all" highlights in the text area. If there are no + * such highlights, this will be an empty list. + * + * @return The list of "mark all" highlight ranges. + */ + public List getMarkAllHighlightRanges() { + return ((RSyntaxTextAreaHighlighter) getHighlighter()).getMarkAllHighlightRanges(); + } + + /** + * Returns a list of "marked occurrences" in the text area. If there are no + * marked occurrences, this will be an empty list. + * + * @return The list of marked occurrences. + */ + public List getMarkedOccurrences() { + return ((RSyntaxTextAreaHighlighter) getHighlighter()).getMarkedOccurrences(); + } + + /** + * Returns whether "Mark Occurrences" is enabled. + * + * @return Whether "Mark Occurrences" is enabled. + * @see #setMarkOccurrences(boolean) + */ + public boolean getMarkOccurrences() { + return markOccurrencesSupport != null; + } + + /** + * Returns the color used for "mark occurrences" highlights. + * + * @return The mark occurrences color. + * @see #setMarkOccurrencesColor(Color) + */ + public Color getMarkOccurrencesColor() { + return markOccurrencesColor; + } + + /** + * Returns the delay between when the caret is moved and when "marked + * occurrences" are highlighted. + * + * @return The "mark occurrences" delay. + * @see #setMarkOccurrencesDelay(int) + */ + public int getMarkOccurrencesDelay() { + return markOccurrencesDelay; + } + + /** + * Returns whether tokens of the specified type should have "mark occurrences" + * enabled for the current programming language. + * + * @param type + * The token type. + * @return Whether tokens of this type should have "mark occurrences" enabled. + */ + boolean getMarkOccurrencesOfTokenType(int type) { + RSyntaxDocument doc = (RSyntaxDocument) getDocument(); + return doc.getMarkOccurrencesOfTokenType(type); + } + + /** + * Gets the color used as the background for a matched bracket. + * + * @return The color used. If this is null, no special background + * is painted behind a matched bracket. + * @see #setMatchedBracketBGColor + * @see #getMatchedBracketBorderColor + */ + public Color getMatchedBracketBGColor() { + return matchedBracketBGColor; + } + + /** + * Gets the color used as the border for a matched bracket. + * + * @return The color used. + * @see #setMatchedBracketBorderColor + * @see #getMatchedBracketBGColor + */ + public Color getMatchedBracketBorderColor() { + return matchedBracketBorderColor; + } + + /** + * Returns the caret's offset's rectangle, or null if there is + * currently no matched bracket, bracket matching is disabled, or "paint both + * matched brackets" is disabled. This should never be called by the programmer + * directly. + * + * @return The rectangle surrounding the matched bracket. + * @see #getMatchRectangle() + */ + Rectangle getDotRectangle() { + return dotRect; + } + + /** + * Returns the matched bracket's rectangle, or null if there is + * currently no matched bracket. This should never be called by the programmer + * directly. + * + * @return The rectangle surrounding the matched bracket. + * @see #getDotRectangle() + */ + Rectangle getMatchRectangle() { + return match; + } + + /** + * Overridden to return the max ascent for any font used in the editor. + * + * @return The max ascent value. + */ + @Override + public int getMaxAscent() { + return maxAscent; + } + + /** + * Returns whether the bracket at the caret position is painted as a "match" + * when a matched bracket is found. Note that this property does nothing if + * {@link #isBracketMatchingEnabled()} returns false. + * + * @return Whether both brackets in a bracket pair are highlighted when bracket + * matching is enabled. + * @see #setPaintMatchedBracketPair(boolean) + * @see #isBracketMatchingEnabled() + * @see #setBracketMatchingEnabled(boolean) + */ + public boolean getPaintMatchedBracketPair() { + return paintMatchedBracketPair; + } + + /** + * Returns whether tab lines are painted. + * + * @return Whether tab lines are painted. + * @see #setPaintTabLines(boolean) + * @see #getTabLineColor() + */ + public boolean getPaintTabLines() { + return paintTabLines; + } + + /** + * Returns whether to paint the backgrounds of tokens on the specified line + * (assuming they are not obstructed by e.g. selection). + * + * @param line + * The line number. + * @param y + * The y-offset of the line. This is used when line wrap is enabled, + * since each logical line can be rendered as several physical lines. + * @return Whether to paint the token backgrounds on this line. + */ + boolean getPaintTokenBackgrounds(int line, float y) { + // System.out.println(y + ", " + getCurrentCaretY() + "-" + (getCurrentCaretY() + // + getLineHeight())); + int iy = (int) y; + int curCaretY = getCurrentCaretY(); + return iy < curCaretY || iy >= curCaretY + getLineHeight() || !getHighlightCurrentLine(); + } + + /** + * Returns the specified parser. + * + * @param index + * The {@link Parser} to retrieve. + * @return The Parser. + * @see #getParserCount() + * @see #addParser(Parser) + */ + public Parser getParser(int index) { + return parserManager.getParser(index); + } + + /** + * Returns the number of parsers operating on this text area. + * + * @return The parser count. + * @see #addParser(Parser) + */ + public int getParserCount() { + return parserManager == null ? 0 : parserManager.getParserCount(); + } + + /** + * Returns the currently set parser delay. This is the delay that must occur + * between edits for any registered {@link Parser}s to run. + * + * @return The currently set parser delay, in milliseconds. + * @see #setParserDelay(int) + */ + public int getParserDelay() { + return parserManager.getDelay(); + } + + /** + * Returns a list of the current parser notices for this text area. This method + * (like most Swing methods) should only be called on the EDT. + * + * @return The list of notices. This will be an empty list if there are none. + */ + public List getParserNotices() { + if (parserManager == null) { + return Collections.emptyList(); + } + return parserManager.getParserNotices(); + } + + /** + * Workaround for JTextComponents allowing the caret to be rendered entirely + * off-screen if the entire "previous" character fit entirely. + * + * @return The amount of space to add to the x-axis preferred span. + * @see #setRightHandSideCorrection(int) + */ + public int getRightHandSideCorrection() { + return rhsCorrection; + } + + /** + * If auto-indent is enabled, this method returns whether a new line after this + * one should be indented (based on the standard indentation rules for the + * current programming language). For example, in Java, for a line containing: + * + *

+	 * for (int i=0; i<10; i++) {
+	 * 
+ * + * the following line should be indented. + * + * @param line + * The line to check. + * @return Whether a line inserted after this one should be auto-indented. If + * auto-indentation is disabled, this will always return + * false. + * @see #isAutoIndentEnabled() + */ + public boolean getShouldIndentNextLine(int line) { + if (isAutoIndentEnabled()) { + RSyntaxDocument doc = (RSyntaxDocument) getDocument(); + return doc.getShouldIndentNextLine(line); + } + return false; + } + + /** + * Returns whether a small popup window should display the text on the line + * containing a matched bracket whenever a matched bracket is off- screen. + * + * @return Whether to show the popup. + * @see #setShowMatchedBracketPopup(boolean) + */ + public boolean getShowMatchedBracketPopup() { + return showMatchedBracketPopup; + } + + /** + * Returns what type of syntax highlighting this editor is doing. + * + * @return The style being used, such as + * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. + * @see #setSyntaxEditingStyle(String) + * @see SyntaxConstants + */ + public String getSyntaxEditingStyle() { + return syntaxStyleKey; + } + + /** + * Returns all of the colors currently being used in syntax highlighting by this + * text component. + * + * @return An instance of SyntaxScheme that represents the colors + * currently being used for syntax highlighting. + * @see #setSyntaxScheme(SyntaxScheme) + */ + public SyntaxScheme getSyntaxScheme() { + return syntaxScheme; + } + + /** + * Returns the color used to paint tab lines. + * + * @return The color used to paint tab lines. + * @see #setTabLineColor(Color) + * @see #getPaintTabLines() + * @see #setPaintTabLines(boolean) + */ + public Color getTabLineColor() { + return tabLineColor; + } + + /** + * Returns whether a border is painted around marked occurrences. + * + * @return Whether a border is painted. + * @see #setPaintMarkOccurrencesBorder(boolean) + * @see #getMarkOccurrencesColor() + * @see #getMarkOccurrences() + */ + public boolean getPaintMarkOccurrencesBorder() { + return paintMarkOccurrencesBorder; + } + + /** + * Returns the background color for the specified secondary language. + * + * @param index + * The language index. Note that these are 1-based, not 0-based, and + * should be in the range 1-getSecondaryLanguageCount(), + * inclusive. + * @return The color, or null if none. + * @see #getSecondaryLanguageCount() + * @see #setSecondaryLanguageBackground(int, Color) + * @see #getHighlightSecondaryLanguages() + */ + public Color getSecondaryLanguageBackground(int index) { + return secondaryLanguageBackgrounds[index - 1]; + } + + /** + * Returns the number of secondary language backgrounds. + * + * @return The number of secondary language backgrounds. + * @see #getSecondaryLanguageBackground(int) + * @see #setSecondaryLanguageBackground(int, Color) + * @see #getHighlightSecondaryLanguages() + */ + public int getSecondaryLanguageCount() { + return secondaryLanguageBackgrounds.length; + } + + /** + * Returns whether or not templates are enabled for all instances of + * RSyntaxTextArea. + *

+ * + * For more flexible boilerplate code insertion, consider using the + * TemplateCompletion class in the + * AutoComplete add-on + * library. + * + * @return Whether templates are enabled. + * @see #saveTemplates() + * @see #setTemplateDirectory(String) + * @see #setTemplatesEnabled(boolean) + */ + public static synchronized boolean getTemplatesEnabled() { + return templatesEnabled; + } + + /** + * Returns a token list for the given range in the document. + * + * @param startOffs + * The starting offset in the document. + * @param endOffs + * The end offset in the document. + * @return The first token in the token list. + */ + private Token getTokenListFor(int startOffs, int endOffs) { + + TokenImpl tokenList = null; + TokenImpl lastToken = null; + + Element map = getDocument().getDefaultRootElement(); + int startLine = map.getElementIndex(startOffs); + int endLine = map.getElementIndex(endOffs); + + for (int line = startLine; line <= endLine; line++) { + TokenImpl t = (TokenImpl) getTokenListForLine(line); + t = cloneTokenList(t); + if (tokenList == null) { + tokenList = t; + lastToken = tokenList; + } else { + lastToken.setNextToken(t); + } + while (lastToken.getNextToken() != null && lastToken.getNextToken().isPaintable()) { + lastToken = (TokenImpl) lastToken.getNextToken(); + } + if (line < endLine) { + // Document offset MUST be correct to prevent exceptions + // in getTokenListFor() + int docOffs = map.getElement(line).getEndOffset() - 1; + t = new TokenImpl(new char[] { '\n' }, 0, 0, docOffs, Token.WHITESPACE, 0); + lastToken.setNextToken(t); + lastToken = t; + } + } + + // Trim the beginning and end of the token list so that it starts + // at startOffs and ends at endOffs. + + // Be careful and check that startOffs is actually in the list. + // startOffs can be < the token list's start if the end "newline" + // character of a line is the first character selected (the token + // list returned for that line will be null, so the first token in + // the final token list will be from the next line and have a + // starting offset > startOffs?). + if (startOffs >= tokenList.getOffset()) { + while (!tokenList.containsPosition(startOffs)) { + tokenList = (TokenImpl) tokenList.getNextToken(); + } + tokenList.makeStartAt(startOffs); + } + + TokenImpl temp = tokenList; + // Be careful to check temp for null here. It is possible that no + // token contains endOffs, if endOffs is at the end of a line. + while (temp != null && !temp.containsPosition(endOffs)) { + temp = (TokenImpl) temp.getNextToken(); + } + if (temp != null) { + temp.textCount = endOffs - temp.getOffset(); + temp.setNextToken(null); + } + + return tokenList; + + } + + /** + * Returns a list of tokens representing the given line. + * + * @param line + * The line number to get tokens for. + * @return A linked list of tokens representing the line's text. + */ + public Token getTokenListForLine(int line) { + return ((RSyntaxDocument) getDocument()).getTokenListForLine(line); + } + + /** + * Returns the painter to use for rendering tokens. + * + * @return The painter to use for rendering tokens. + */ + TokenPainter getTokenPainter() { + return tokenPainter; + } + + /** + * Returns the tool tip to display for a mouse event at the given location. This + * method is overridden to give a registered parser a chance to display a tool + * tip (such as an error description when the mouse is over an error highlight). + * + * @param e + * The mouse event. + */ + @Override + public String getToolTipText(MouseEvent e) { + + // Apple JVMS (Java 6 and prior) have their ToolTipManager events + // repeat for some reason, so this method gets called every 1 second + // or so. We short-circuit that since some ToolTipManagers may do + // expensive calculations (e.g. language supports). + if (RSyntaxUtilities.getOS() == RSyntaxUtilities.OS_MAC_OSX) { + Point newLoc = e.getPoint(); + if (newLoc != null && newLoc.equals(cachedTipLoc)) { + return cachedTip; + } + cachedTipLoc = newLoc; + } + + return cachedTip = getToolTipTextImpl(e); + + } + + /** + * Does the dirty work of getting the tool tip text. + * + * @param e + * The mouse event. + * @return The tool tip text. + */ + protected String getToolTipTextImpl(MouseEvent e) { + + // Check parsers for tool tips first. + String text = null; + URL imageBase = null; + if (parserManager != null) { + ToolTipInfo info = parserManager.getToolTipText(e); + if (info != null) { // Should always be true + text = info.getToolTipText(); // May be null + imageBase = info.getImageBase(); // May be null + } + } + if (text == null) { + text = super.getToolTipText(e); + } + + // Do we want to use "focusable" tips? + if (getUseFocusableTips()) { + if (text != null) { + if (focusableTip == null) { + focusableTip = new FocusableTip(this, parserManager); + } + focusableTip.setImageBase(imageBase); + focusableTip.toolTipRequested(e, text); + } + // No tool tip text at new location - hide tip window if one is + // currently visible + else if (focusableTip != null) { + focusableTip.possiblyDisposeOfTipWindow(); + } + return null; + } + + return text; // Standard tool tips + + } + + /** + * Returns whether the specified token should be underlined. A token is + * underlined if its syntax style includes underlining, or if it is a hyperlink + * and hyperlinks are enabled. + * + * @param t + * The token. + * @return Whether the specified token should be underlined. + */ + public boolean getUnderlineForToken(Token t) { + return (getHyperlinksEnabled() && (t.isHyperlink() + || (linkGeneratorResult != null && linkGeneratorResult.getSourceOffset() == t.getOffset()))) + || syntaxScheme.getStyle(t.getType()).underline; + } + + /** + * Returns whether "focusable" tool tips are used instead of standard ones. + * Focusable tool tips are tool tips that the user can click on, resize, copy + * from, and click links in. + * + * @return Whether to use focusable tool tips. + * @see #setUseFocusableTips(boolean) + * @see FocusableTip + */ + public boolean getUseFocusableTips() { + return useFocusableTips; + } + + /** + * Returns whether selected text should use the "selected text color" property + * set via {@link #setSelectedTextColor(Color)}. This is the typical behavior of + * text components. By default, RSyntaxTextArea does not do this, so that token + * styles are visible even in selected regions of text. + * + * @return Whether the "selected text" color is used when painting text in + * selected regions. + * @see #setUseSelectedTextColor(boolean) + */ + public boolean getUseSelectedTextColor() { + return useSelectedTextColor; + } + + /** + * Called by constructors to initialize common properties of the text editor. + */ + @Override + protected void init() { + + super.init(); + metricsNeverRefreshed = true; + + tokenPainter = new DefaultTokenPainter(); + + // NOTE: Our actions are created here instead of in a static block + // so they are only created when the first RTextArea is instantiated, + // not before. There have been reports of users calling static getters + // (e.g. RSyntaxTextArea.getDefaultBracketMatchBGColor()) which would + // cause these actions to be created and (possibly) incorrectly + // localized, if they were in a static block. + if (toggleCurrentFoldAction == null) { + createRstaPopupMenuActions(); + } + + // Set some RSyntaxTextArea default values. + syntaxStyleKey = SYNTAX_STYLE_NONE; + setMatchedBracketBGColor(getDefaultBracketMatchBGColor()); + setMatchedBracketBorderColor(getDefaultBracketMatchBorderColor()); + setBracketMatchingEnabled(true); + setAnimateBracketMatching(true); + lastBracketMatchPos = -1; + setSelectionColor(getDefaultSelectionColor()); + setTabLineColor(null); + setMarkOccurrencesColor(MarkOccurrencesSupport.DEFAULT_COLOR); + setMarkOccurrencesDelay(MarkOccurrencesSupport.DEFAULT_DELAY_MS); + + foldManager = new DefaultFoldManager(this); + + // Set auto-indent related stuff. + setAutoIndentEnabled(true); + setCloseCurlyBraces(true); + setCloseMarkupTags(true); + setClearWhitespaceLinesEnabled(true); + + setHyperlinksEnabled(true); + setLinkScanningMask(InputEvent.CTRL_DOWN_MASK); + setHyperlinkForeground(Color.BLUE); + isScanningForLinks = false; + setUseFocusableTips(true); + + // setAntiAliasingEnabled(true); + setDefaultAntiAliasingState(); + restoreDefaultSyntaxScheme(); + + setHighlightSecondaryLanguages(true); + secondaryLanguageBackgrounds = new Color[3]; + secondaryLanguageBackgrounds[0] = new Color(0xfff0cc); + secondaryLanguageBackgrounds[1] = new Color(0xdafeda); + secondaryLanguageBackgrounds[2] = new Color(0xffe0f0); + + setRightHandSideCorrection(0); + setShowMatchedBracketPopup(true); + + } + + /** + * Returns whether or not auto-indent is enabled. + * + * @return Whether or not auto-indent is enabled. + * @see #setAutoIndentEnabled(boolean) + */ + public boolean isAutoIndentEnabled() { + return autoIndentEnabled; + } + + /** + * Returns whether or not bracket matching is enabled. + * + * @return true iff bracket matching is enabled. + * @see #setBracketMatchingEnabled + */ + public final boolean isBracketMatchingEnabled() { + return bracketMatchingEnabled; + } + + /** + * Returns whether or not lines containing nothing but whitespace are made into + * blank lines when Enter is pressed in them. + * + * @return Whether or not whitespace-only lines are cleared when the user + * presses Enter on them. + * @see #setClearWhitespaceLinesEnabled(boolean) + */ + public boolean isClearWhitespaceLinesEnabled() { + return clearWhitespaceLines; + } + + /** + * Returns whether code folding is enabled. Note that only certain languages + * support code folding; those that do not will ignore this property. + * + * @return Whether code folding is enabled. + * @see #setCodeFoldingEnabled(boolean) + */ + public boolean isCodeFoldingEnabled() { + return foldManager.isCodeFoldingEnabled(); + } + + /** + * Returns whether whitespace (spaces and tabs) is visible. + * + * @return Whether whitespace is visible. + * @see #setWhitespaceVisible(boolean) + * @see #getEOLMarkersVisible() + */ + public boolean isWhitespaceVisible() { + return whitespaceVisible; + } + + /** + * Returns the token at the specified position in the model. + * + * @param offs + * The position in the model. + * @return The token, or null if no token is at that position. + * @see #viewToToken(Point) + */ + public Token modelToToken(int offs) { + if (offs >= 0) { + try { + int line = getLineOfOffset(offs); + Token t = getTokenListForLine(line); + return RSyntaxUtilities.getTokenAtOffset(t, offs); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + return null; + } + + /** + * The paintComponent method is overridden so we apply any + * necessary rendering hints to the Graphics object. + */ + @Override + protected void paintComponent(Graphics g) { + + // A call to refreshFontMetrics() used to be in addNotify(), but + // unfortunately we cannot always get the graphics context there. If + // the parent frame/dialog is LAF-decorated, there is a chance that the + // window's width and/or height is still == 0 at addNotify() (e.g. + // WebLaF). So unfortunately it's safest to do this here, with a flag + // to only allow it to happen once. + if (metricsNeverRefreshed) { + refreshFontMetrics(getGraphics2D(getGraphics())); + metricsNeverRefreshed = false; + } + + super.paintComponent(getGraphics2D(g)); + } + + private void refreshFontMetrics(Graphics2D g2d) { + // It is assumed that any rendering hints are already applied to g2d. + defaultFontMetrics = g2d.getFontMetrics(getFont()); + syntaxScheme.refreshFontMetrics(g2d); + if (!getLineWrap()) { + // HORRIBLE HACK! The un-wrapped view needs to refresh its cached + // longest line information. + SyntaxView sv = (SyntaxView) getUI().getRootView(this).getView(0); + sv.calculateLongestLine(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void redoLastAction() { + super.redoLastAction(); + // Occasionally marked occurrences' Positions are in invalid states + // due to how javax.swing.text.AbstractDocument tracks the start and + // end offsets. This is usually not needed, but can be when the last + // token in the Document is a marked occurrence, and an undo or redo + // occurs which clears most of the document text. In that case it is + // possible for the end Position to be reset to something small, but + // the start offset to be its prior valid (start > end). + ((RSyntaxTextAreaHighlighter) getHighlighter()).clearMarkOccurrencesHighlights(); + } + + /** + * Removes an "active line range" listener from this text area. + * + * @param l + * The listener to remove. + * @see #removeActiveLineRangeListener(ActiveLineRangeListener) + */ + public void removeActiveLineRangeListener(ActiveLineRangeListener l) { + listenerList.remove(ActiveLineRangeListener.class, l); + } + + /** + * Removes a hyperlink listener from this text area. + * + * @param l + * The listener to remove. + * @see #addHyperlinkListener(HyperlinkListener) + */ + public void removeHyperlinkListener(HyperlinkListener l) { + listenerList.remove(HyperlinkListener.class, l); + } + + /** + * Overridden so we stop this text area's parsers, if any. + */ + @Override + public void removeNotify() { + if (parserManager != null) { + parserManager.stopParsing(); + } + super.removeNotify(); + } + + /** + * Removes a parser from this text area. + * + * @param parser + * The {@link Parser} to remove. + * @return Whether the parser was found and removed. + * @see #clearParsers() + * @see #addParser(Parser) + * @see #getParser(int) + */ + public boolean removeParser(Parser parser) { + boolean removed = false; + if (parserManager != null) { + removed = parserManager.removeParser(parser); + } + return removed; + } + + /** + * Sets the colors used for syntax highlighting to their defaults. + * + * @see #setSyntaxScheme(SyntaxScheme) + * @see #getSyntaxScheme() + * @see #getDefaultSyntaxScheme() + */ + public void restoreDefaultSyntaxScheme() { + setSyntaxScheme(getDefaultSyntaxScheme()); + } + + /** + * Attempts to save all currently-known templates to the current template + * directory, as set by setTemplateDirectory. Templates will be + * saved as XML files with names equal to their abbreviations; for example, a + * template that expands on the word "forb" will be saved as + * forb.xml. + * + * @return Whether or not the save was successful. The save will be unsuccessful + * if the template directory does not exist or if it has not been set + * (i.e., you have not yet called setTemplateDirectory). + * @see #getTemplatesEnabled + * @see #setTemplateDirectory + * @see #setTemplatesEnabled + */ + public static synchronized boolean saveTemplates() { + if (!getTemplatesEnabled()) { + return false; + } + return getCodeTemplateManager().saveTemplates(); + } + + /** + * Sets the "active line range." Note that this RSyntaxTextArea + * itself does nothing with this information, but if it is contained inside an + * {@link org.fife.ui.rtextarea.RTextScrollPane}, the active line range may be + * displayed in the icon area of the {@link org.fife.ui.rtextarea.Gutter}. + *

+ * + * Note that basic users of RSyntaxTextArea will not call this + * method directly; rather, it is usually called by instances of + * LanguageSupport in the RSTALangaugeSupport library. + * See http://fifesoft.com for more + * information about this library. + * + * @param min + * The "minimum" line in the active line range, or -1 if + * the range is being cleared. + * @param max + * The "maximum" line in the active line range, or -1 if + * the range is being cleared. + * @see #addActiveLineRangeListener(ActiveLineRangeListener) + */ + public void setActiveLineRange(int min, int max) { + if (min == -1) { + max = -1; // Force max to be -1 if min is. + } + fireActiveLineRangeEvent(min, max); + } + + /** + * Sets whether bracket matching should be animated. This fires a property + * change event of type {@link #ANIMATE_BRACKET_MATCHING_PROPERTY}. + * + * @param animate + * Whether to animate bracket matching. + * @see #getAnimateBracketMatching() + */ + public void setAnimateBracketMatching(boolean animate) { + if (animate != animateBracketMatching) { + animateBracketMatching = animate; + if (animate && bracketRepaintTimer == null) { + bracketRepaintTimer = new BracketMatchingTimer(); + } + firePropertyChange(ANIMATE_BRACKET_MATCHING_PROPERTY, !animate, animate); + } + } + + /** + * Sets whether anti-aliasing is enabled in this editor. This method fires a + * property change event of type {@link #ANTIALIAS_PROPERTY}. + * + * @param enabled + * Whether anti-aliasing is enabled. + * @see #getAntiAliasingEnabled() + */ + public void setAntiAliasingEnabled(boolean enabled) { + + boolean currentlyEnabled = aaHints != null; + + if (enabled != currentlyEnabled) { + + if (enabled) { + aaHints = RSyntaxUtilities.getDesktopAntiAliasHints(); + // If the desktop query method comes up empty, use the standard + // Java2D greyscale method. Note this will likely NOT be as + // nice as what would be used if the getDesktopAntiAliasHints() + // call worked. + if (aaHints == null) { + Map temp = new HashMap(); + temp.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + aaHints = temp; + } + } else { + aaHints = null; + } + + // We must be connected to a screen resource for our graphics + // to be non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + firePropertyChange(ANTIALIAS_PROPERTY, !enabled, enabled); + repaint(); + + } + + } + + /** + * Sets whether or not auto-indent is enabled. This fires a property change + * event of type {@link #AUTO_INDENT_PROPERTY}. + * + * @param enabled + * Whether or not auto-indent is enabled. + * @see #isAutoIndentEnabled() + */ + public void setAutoIndentEnabled(boolean enabled) { + if (autoIndentEnabled != enabled) { + autoIndentEnabled = enabled; + firePropertyChange(AUTO_INDENT_PROPERTY, !enabled, enabled); + } + } + + /** + * Sets whether bracket matching is enabled. This fires a property change event + * of type {@link #BRACKET_MATCHING_PROPERTY}. + * + * @param enabled + * Whether or not bracket matching should be enabled. + * @see #isBracketMatchingEnabled() + */ + public void setBracketMatchingEnabled(boolean enabled) { + if (enabled != bracketMatchingEnabled) { + bracketMatchingEnabled = enabled; + repaint(); + firePropertyChange(BRACKET_MATCHING_PROPERTY, !enabled, enabled); + } + } + + /** + * Sets whether or not lines containing nothing but whitespace are made into + * blank lines when Enter is pressed in them. This method fires a property + * change event of type {@link #CLEAR_WHITESPACE_LINES_PROPERTY}. + * + * @param enabled + * Whether or not whitespace-only lines are cleared when the user + * presses Enter on them. + * @see #isClearWhitespaceLinesEnabled() + */ + public void setClearWhitespaceLinesEnabled(boolean enabled) { + if (enabled != clearWhitespaceLines) { + clearWhitespaceLines = enabled; + firePropertyChange(CLEAR_WHITESPACE_LINES_PROPERTY, !enabled, enabled); + } + } + + /** + * Toggles whether curly braces should be automatically closed when a newline is + * entered after an opening curly brace. Note that this property is only honored + * for languages that use curly braces to denote code blocks. + *

+ * + * This method fires a property change event of type + * {@link #CLOSE_CURLY_BRACES_PROPERTY}. + * + * @param close + * Whether curly braces should be automatically closed. + * @see #getCloseCurlyBraces() + */ + public void setCloseCurlyBraces(boolean close) { + if (close != closeCurlyBraces) { + closeCurlyBraces = close; + firePropertyChange(CLOSE_CURLY_BRACES_PROPERTY, !close, close); + } + } + + /** + * Sets whether closing markup tags should be automatically completed when + * "</" is typed. Note that this property is only honored for + * markup languages, such as HTML, XML and PHP. + *

+ * + * This method fires a property change event of type + * {@link #CLOSE_MARKUP_TAGS_PROPERTY}. + * + * @param close + * Whether closing markup tags should be automatically completed. + * @see #getCloseMarkupTags() + */ + public void setCloseMarkupTags(boolean close) { + if (close != closeMarkupTags) { + closeMarkupTags = close; + firePropertyChange(CLOSE_MARKUP_TAGS_PROPERTY, !close, close); + } + } + + /** + * Sets whether code folding is enabled. Note that only certain languages will + * support code folding out of the box. Those languages which do not support + * folding will ignore this property. + *

+ * This method fires a property change event of type + * {@link #CODE_FOLDING_PROPERTY}. + * + * @param enabled + * Whether code folding should be enabled. + * @see #isCodeFoldingEnabled() + */ + public void setCodeFoldingEnabled(boolean enabled) { + if (enabled != foldManager.isCodeFoldingEnabled()) { + foldManager.setCodeFoldingEnabled(enabled); + firePropertyChange(CODE_FOLDING_PROPERTY, !enabled, enabled); + } + } + + /** + * Sets anti-aliasing to whatever the user's desktop value is. + * + * @see #getAntiAliasingEnabled() + */ + private void setDefaultAntiAliasingState() { + + // Most accurate technique, but not available on all OSes. + aaHints = RSyntaxUtilities.getDesktopAntiAliasHints(); + if (aaHints == null) { + + Map temp = new HashMap(); + + // In Java 6+, you can figure out what text AA hint Swing uses for + // JComponents... + JLabel label = new JLabel(); + FontMetrics fm = label.getFontMetrics(label.getFont()); + Object hint = null; + // FontRenderContext frc = fm.getFontRenderContext(); + // hint = fm.getAntiAliasingHint(); + try { + Method m = FontMetrics.class.getMethod("getFontRenderContext"); + FontRenderContext frc = (FontRenderContext) m.invoke(fm); + m = FontRenderContext.class.getMethod("getAntiAliasingHint"); + hint = m.invoke(frc); + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + // Swallow, either Java 1.5, or running in an applet + } + + // If not running Java 6+, default to AA enabled on Windows where + // the software AA is pretty fast, and default (e.g. disabled) on + // non-Windows. Note that OS X always uses AA no matter what + // rendering hints you give it, so this is a moot point there. + // System.out.println("Rendering hint: " + hint); + if (hint == null) { + String os = System.getProperty("os.name").toLowerCase(); + if (os.contains("windows")) { + hint = RenderingHints.VALUE_TEXT_ANTIALIAS_ON; + } else { + hint = RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT; + } + } + temp.put(RenderingHints.KEY_TEXT_ANTIALIASING, hint); + + aaHints = temp; + + } + + // We must be connected to a screen resource for our graphics + // to be non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + repaint(); + + } + + /** + * Sets the document used by this text area. This is overridden so that only + * instances of {@link RSyntaxDocument} are accepted; for all others, an + * exception will be thrown. + * + * @param document + * The new document for this text area. + * @throws IllegalArgumentException + * If the document is not an RSyntaxDocument. + */ + @Override + public void setDocument(Document document) { + if (!(document instanceof RSyntaxDocument)) { + throw new IllegalArgumentException( + "Documents for " + "RSyntaxTextArea must be instances of " + "RSyntaxDocument!"); + } + if (markOccurrencesSupport != null) { + markOccurrencesSupport.clear(); + } + super.setDocument(document); + setSyntaxEditingStyle(((RSyntaxDocument) document).getSyntaxStyle()); + if (markOccurrencesSupport != null) { + markOccurrencesSupport.doMarkOccurrences(); + } + } + + /** + * Sets whether EOL markers are visible at the end of each line. This method + * fires a property change of type {@link #EOL_VISIBLE_PROPERTY}. + * + * @param visible + * Whether EOL markers are visible. + * @see #getEOLMarkersVisible() + * @see #setWhitespaceVisible(boolean) + */ + public void setEOLMarkersVisible(boolean visible) { + if (visible != eolMarkersVisible) { + eolMarkersVisible = visible; + repaint(); + firePropertyChange(EOL_VISIBLE_PROPERTY, !visible, visible); + } + } + + /** + * Sets the font used by this text area. Note that if some token styles are + * using a different font, they will not be changed by calling this method. To + * set different fonts on individual token types, use the text area's + * SyntaxScheme. + * + * @param font + * The font. + * @see SyntaxScheme#getStyle(int) + */ + @Override + public void setFont(Font font) { + + Font old = super.getFont(); + super.setFont(font); // Do this first. + + // Usually programmers keep a single font for all token types, but + // may use bold or italic for styling some. + SyntaxScheme scheme = getSyntaxScheme(); + if (scheme != null && old != null) { + scheme.changeBaseFont(old, font); + calculateLineHeight(); + } + + // We must be connected to a screen resource for our + // graphics to be non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + // Updates the margin line. + updateMarginLineX(); + // Force the current line highlight to be repainted, even + // though the caret's location hasn't changed. + forceCurrentLineHighlightRepaint(); + // Get line number border in text area to repaint again + // since line heights have updated. + firePropertyChange("font", old, font); + // So parent JScrollPane will have its scrollbars updated. + revalidate(); + } + + } + + /** + * Sets whether fractional font metrics are enabled. This method fires a + * property change event of type {@link #FRACTIONAL_FONTMETRICS_PROPERTY}. + * + * @param enabled + * Whether fractional font metrics are enabled. + * @see #getFractionalFontMetricsEnabled() + */ + public void setFractionalFontMetricsEnabled(boolean enabled) { + if (fractionalFontMetricsEnabled != enabled) { + fractionalFontMetricsEnabled = enabled; + // We must be connected to a screen resource for our graphics to be + // non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + firePropertyChange(FRACTIONAL_FONTMETRICS_PROPERTY, !enabled, enabled); + } + } + + /** + * Sets the highlighter used by this text area. + * + * @param h + * The highlighter. + * @throws IllegalArgumentException + * If h is not an instance of + * {@link RSyntaxTextAreaHighlighter}. + */ + @Override + public void setHighlighter(Highlighter h) { + + // Ugh, many RSTA methods assume a non-null highlighter. This is kind + // of icky, but most applications never *don't* want a highlighter. + // See #189 - BasicTextUI clears highlighter by setting it to null there + if (h == null) { + h = new RSyntaxTextAreaHighlighter(); + } + + if (!(h instanceof RSyntaxTextAreaHighlighter)) { + throw new IllegalArgumentException( + "RSyntaxTextArea requires " + "an RSyntaxTextAreaHighlighter for its Highlighter"); + } + super.setHighlighter(h); + } + + /** + * Sets whether "secondary" languages should have their backgrounds colored + * differently to visually differentiate them. This feature imposes a fair + * performance penalty. This method fires a property change event of type + * {@link #HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY}. + * + * @see #getHighlightSecondaryLanguages() + * @see #setSecondaryLanguageBackground(int, Color) + * @see #getSecondaryLanguageCount() + */ + public void setHighlightSecondaryLanguages(boolean highlight) { + if (this.highlightSecondaryLanguages != highlight) { + highlightSecondaryLanguages = highlight; + repaint(); + firePropertyChange(HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY, !highlight, highlight); + } + } + + /** + * Sets the color to use when painting hyperlinks. + * + * @param fg + * The color to use when painting hyperlinks. + * @throws NullPointerException + * If fg is null. + * @see #getHyperlinkForeground() + * @see #setHyperlinksEnabled(boolean) + */ + public void setHyperlinkForeground(Color fg) { + if (fg == null) { + throw new NullPointerException("fg cannot be null"); + } + hyperlinkFG = fg; + } + + /** + * Sets whether hyperlinks are enabled for this text area. This method fires a + * property change event of type {@link #HYPERLINKS_ENABLED_PROPERTY}. + * + * @param enabled + * Whether hyperlinks are enabled. + * @see #getHyperlinksEnabled() + */ + public void setHyperlinksEnabled(boolean enabled) { + if (this.hyperlinksEnabled != enabled) { + this.hyperlinksEnabled = enabled; + repaint(); + firePropertyChange(HYPERLINKS_ENABLED_PROPERTY, !enabled, enabled); + } + } + + public void setLinkGenerator(LinkGenerator generator) { + this.linkGenerator = generator; + } + + /** + * Sets the mask for the key used to toggle whether we are scanning for + * hyperlinks with mouse hovering. The default value is + * CTRL_DOWN_MASK. + * + * @param mask + * The mask to use. This should be some bitwise combination of + * {@link InputEvent#CTRL_DOWN_MASK}, + * {@link InputEvent#ALT_DOWN_MASK}, + * {@link InputEvent#SHIFT_DOWN_MASK} or + * {@link InputEvent#META_DOWN_MASK}. For invalid values, behavior is + * undefined. + * @see InputEvent + */ + public void setLinkScanningMask(int mask) { + mask &= (InputEvent.CTRL_DOWN_MASK | InputEvent.META_DOWN_MASK | InputEvent.ALT_DOWN_MASK + | InputEvent.SHIFT_DOWN_MASK); + if (mask == 0) { + throw new IllegalArgumentException( + "mask argument should be " + "some combination of InputEvent.*_DOWN_MASK fields"); + } + linkScanningMask = mask; + } + + /** + * Toggles whether "mark occurrences" is enabled. This method fires a property + * change event of type {@link #MARK_OCCURRENCES_PROPERTY}. + * + * @param markOccurrences + * Whether "Mark Occurrences" should be enabled. + * @see #getMarkOccurrences() + * @see #setMarkOccurrencesColor(Color) + */ + public void setMarkOccurrences(boolean markOccurrences) { + if (markOccurrences) { + if (markOccurrencesSupport == null) { + markOccurrencesSupport = new MarkOccurrencesSupport(); + markOccurrencesSupport.install(this); + firePropertyChange(MARK_OCCURRENCES_PROPERTY, false, true); + } + } else { + if (markOccurrencesSupport != null) { + markOccurrencesSupport.uninstall(); + markOccurrencesSupport = null; + firePropertyChange(MARK_OCCURRENCES_PROPERTY, true, false); + } + } + } + + /** + * Sets the "mark occurrences" color. + * + * @param color + * The new color. This cannot be null. + * @see #getMarkOccurrencesColor() + * @see #setMarkOccurrences(boolean) + */ + public void setMarkOccurrencesColor(Color color) { + markOccurrencesColor = color; + if (markOccurrencesSupport != null) { + markOccurrencesSupport.setColor(color); + } + } + + /** + * Sets the delay between when the caret is moved and when "marked occurrences" + * are highlighted. + * + * @param delay + * The new delay. This must be greater than {@code 0}. + * @see #getMarkOccurrencesDelay() + * @see #getMarkOccurrences() + */ + public void setMarkOccurrencesDelay(int delay) { + if (delay <= 0) { + throw new IllegalArgumentException("Delay must be > 0"); + } + if (delay != this.markOccurrencesDelay) { + this.markOccurrencesDelay = delay; + if (markOccurrencesSupport != null) { + markOccurrencesSupport.setDelay(delay); + } + } + } + + /** + * Sets the color used as the background for a matched bracket. + * + * @param color + * The color to use. If this is null, then no special + * background is painted behind a matched bracket. + * @see #getMatchedBracketBGColor + * @see #setMatchedBracketBorderColor + * @see #setPaintMarkOccurrencesBorder(boolean) + */ + public void setMatchedBracketBGColor(Color color) { + matchedBracketBGColor = color; + if (match != null) { + repaint(); + } + } + + /** + * Sets the color used as the border for a matched bracket. + * + * @param color + * The color to use. + * @see #getMatchedBracketBorderColor + * @see #setMatchedBracketBGColor + */ + public void setMatchedBracketBorderColor(Color color) { + matchedBracketBorderColor = color; + if (match != null) { + repaint(); + } + } + + /** + * Toggles whether a border should be painted around marked occurrences. + * + * @param paintBorder + * Whether to paint a border. + * @see #getPaintMarkOccurrencesBorder() + * @see #setMarkOccurrencesColor(Color) + * @see #setMarkOccurrences(boolean) + */ + public void setPaintMarkOccurrencesBorder(boolean paintBorder) { + paintMarkOccurrencesBorder = paintBorder; + if (markOccurrencesSupport != null) { + markOccurrencesSupport.setPaintBorder(paintBorder); + } + } + + /** + * Sets whether the bracket at the caret position is painted as a "match" when a + * matched bracket is found. Note that this property does nothing if + * {@link #isBracketMatchingEnabled()} returns false. + *

+ * + * This method fires a property change event of type + * {@link #PAINT_MATCHED_BRACKET_PAIR_PROPERTY}. + * + * @param paintPair + * Whether both brackets in a bracket pair should be highlighted when + * bracket matching is enabled. + * @see #getPaintMatchedBracketPair() + * @see #isBracketMatchingEnabled() + * @see #setBracketMatchingEnabled(boolean) + */ + public void setPaintMatchedBracketPair(boolean paintPair) { + if (paintPair != paintMatchedBracketPair) { + paintMatchedBracketPair = paintPair; + doBracketMatching(); + repaint(); + firePropertyChange(PAINT_MATCHED_BRACKET_PAIR_PROPERTY, !paintMatchedBracketPair, paintMatchedBracketPair); + } + } + + /** + * Toggles whether tab lines are painted. This method fires a property change + * event of type {@link #TAB_LINES_PROPERTY}. + * + * @param paint + * Whether tab lines are painted. + * @see #getPaintTabLines() + * @see #setTabLineColor(Color) + */ + public void setPaintTabLines(boolean paint) { + if (paint != paintTabLines) { + paintTabLines = paint; + repaint(); + firePropertyChange(TAB_LINES_PROPERTY, !paint, paint); + } + } + + /** + * Sets the parser delay. This is the delay that must occur between edits for + * any registered {@link Parser}s to run. + * + * @param millis + * The new parser delay, in milliseconds. This must be greater than + * zero. + * @see #getParserDelay() + */ + public void setParserDelay(int millis) { + if (parserManager == null) { + parserManager = new ParserManager(this); + } + parserManager.setDelay(millis); + } + + /** + * Applications typically have no need to modify this value. + *

+ * + * Workaround for JTextComponents allowing the caret to be rendered entirely + * off-screen if the entire "previous" character fit entirely. + * + * @param rhsCorrection + * The amount of space to add to the x-axis preferred span. This + * should be non-negative. + * @see #getRightHandSideCorrection() + */ + public void setRightHandSideCorrection(int rhsCorrection) { + if (rhsCorrection < 0) { + throw new IllegalArgumentException("correction should be > 0"); + } + if (rhsCorrection != this.rhsCorrection) { + this.rhsCorrection = rhsCorrection; + revalidate(); + repaint(); + } + } + + /** + * Sets the background color to use for a secondary language. + * + * @param index + * The language index. Note that these are 1-based, not 0-based, and + * should be in the range 1-getSecondaryLanguageCount(), + * inclusive. + * @param color + * The new color, or null for none. + * @see #getSecondaryLanguageBackground(int) + * @see #getSecondaryLanguageCount() + */ + public void setSecondaryLanguageBackground(int index, Color color) { + index--; + Color old = secondaryLanguageBackgrounds[index]; + if ((color == null && old != null) || (color != null && !color.equals(old))) { + secondaryLanguageBackgrounds[index] = color; + if (getHighlightSecondaryLanguages()) { + repaint(); + } + } + } + + /** + * Sets whether a small popup window should display the text on the line + * containing a matched bracket whenever a matched bracket is off- screen. + * + * @param show + * Whether to show the popup. + * @see #getShowMatchedBracketPopup() + */ + public void setShowMatchedBracketPopup(boolean show) { + showMatchedBracketPopup = show; + } + + /** + * Sets what type of syntax highlighting this editor is doing. This method fires + * a property change of type {@link #SYNTAX_STYLE_PROPERTY}. + * + * @param styleKey + * The syntax editing style to use, for example, + * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or + * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. + * @see #getSyntaxEditingStyle() + * @see SyntaxConstants + */ + public void setSyntaxEditingStyle(String styleKey) { + if (styleKey == null) { + styleKey = SYNTAX_STYLE_NONE; + } + if (!styleKey.equals(syntaxStyleKey)) { + String oldStyle = syntaxStyleKey; + syntaxStyleKey = styleKey; + ((RSyntaxDocument) getDocument()).setSyntaxStyle(styleKey); + firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); + setActiveLineRange(-1, -1); + } + + } + + /** + * Sets all of the colors used in syntax highlighting to the colors specified. + * This uses a shallow copy of the color scheme so that multiple text areas can + * share the same color scheme and have their properties changed simultaneously. + *

+ * + * This method fires a property change event of type + * {@link #SYNTAX_SCHEME_PROPERTY}. + * + * @param scheme + * The instance of SyntaxScheme to use. + * @see #getSyntaxScheme() + */ + public void setSyntaxScheme(SyntaxScheme scheme) { + + // NOTE: We don't check whether colorScheme is the same as the + // current scheme because DecreaseFontSizeAction and + // IncreaseFontSizeAction need it this way. + // FIXME: Find a way around this. + + SyntaxScheme old = this.syntaxScheme; + this.syntaxScheme = scheme; + + // Recalculate the line height. We do this here instead of in + // refreshFontMetrics() as this method is called less often and we + // don't need the rendering hints to get the font's height. + calculateLineHeight(); + + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + + // Updates the margin line and "matched bracket" highlight + updateMarginLineX(); + lastBracketMatchPos = -1; + doBracketMatching(); + + // Force the current line highlight to be repainted, even though + // the caret's location hasn't changed. + forceCurrentLineHighlightRepaint(); + + // So encompassing JScrollPane will have its scrollbars updated. + revalidate(); + + firePropertyChange(SYNTAX_SCHEME_PROPERTY, old, this.syntaxScheme); + + } + + /** + * If templates are enabled, all currently-known templates are forgotten and all + * templates are loaded from all files in the specified directory ending in + * "*.xml". If templates aren't enabled, nothing happens. + * + * @param dir + * The directory containing files ending in extension + * .xml that contain templates to load. + * @return true if the load was successful; false if + * either templates aren't currently enabled or the load failed somehow + * (most likely, the directory doesn't exist). + * @see #getTemplatesEnabled + * @see #setTemplatesEnabled + * @see #saveTemplates + */ + public static synchronized boolean setTemplateDirectory(String dir) { + if (getTemplatesEnabled() && dir != null) { + File directory = new File(dir); + if (directory.isDirectory()) { + return getCodeTemplateManager().setTemplateDirectory(directory) > -1; + } + boolean created = directory.mkdir(); + if (created) { + return getCodeTemplateManager().setTemplateDirectory(directory) > -1; + } + } + return false; + } + + /** + * Enables or disables templates. + *

+ * + * Templates are a set of "shorthand identifiers" that you can configure so that + * you only have to type a short identifier (such as "forb") to insert a larger + * amount of code into the document (such as: + *

+ * + *

+	 *   for (<caret>) {
+	 *
+	 *   }
+	 * 
+ * + * Templates are a shared resource among all instances of + * RSyntaxTextArea; that is, templates can only be enabled/disabled + * for all text areas globally, not individually, and all text areas have access + * of the same templates. This should not be an issue; rather, it should be + * beneficial as it promotes uniformity among all text areas in an application. + *

+ * + * For more flexible boilerplate code insertion, consider using the TemplateCompletion + * class in the + * AutoComplete add-on + * library. + * + * @param enabled + * Whether or not templates should be enabled. + * @see #getTemplatesEnabled() + */ + public static synchronized void setTemplatesEnabled(boolean enabled) { + templatesEnabled = enabled; + } + + /** + * Sets the color use to paint tab lines. This method fires a property change + * event of type {@link #TAB_LINE_COLOR_PROPERTY}. + * + * @param c + * The color. If this value is null, the default (gray) + * is used. + * @see #getTabLineColor() + * @see #setPaintTabLines(boolean) + * @see #getPaintTabLines() + */ + public void setTabLineColor(Color c) { + + if (c == null) { + c = Color.gray; + } + + if (!c.equals(tabLineColor)) { + Color old = tabLineColor; + tabLineColor = c; + if (getPaintTabLines()) { + repaint(); + } + firePropertyChange(TAB_LINE_COLOR_PROPERTY, old, tabLineColor); + } + + } + + /** + * Sets whether "focusable" tool tips are used instead of standard ones. + * Focusable tool tips are tool tips that the user can click on, resize, copy + * from, and clink links in. This method fires a property change event of type + * {@link #FOCUSABLE_TIPS_PROPERTY}. + * + * @param use + * Whether to use focusable tool tips. + * @see #getUseFocusableTips() + * @see FocusableTip + */ + public void setUseFocusableTips(boolean use) { + if (use != useFocusableTips) { + useFocusableTips = use; + firePropertyChange(FOCUSABLE_TIPS_PROPERTY, !use, use); + } + } + + /** + * Sets whether selected text should use the "selected text color" property (set + * via {@link #setSelectedTextColor(Color)}). This is the typical behavior of + * text components. By default, RSyntaxTextArea does not do this, so that token + * styles are visible even in selected regions of text. This method fires a + * property change event of type {@link #USE_SELECTED_TEXT_COLOR_PROPERTY}. + * + * @param use + * Whether to use the "selected text" color when painting text in + * selected regions. + * @see #getUseSelectedTextColor() + */ + public void setUseSelectedTextColor(boolean use) { + if (use != useSelectedTextColor) { + useSelectedTextColor = use; + firePropertyChange(USE_SELECTED_TEXT_COLOR_PROPERTY, !use, use); + } + } + + /** + * Sets whether whitespace is visible. This method fires a property change of + * type {@link #VISIBLE_WHITESPACE_PROPERTY}. + * + * @param visible + * Whether whitespace should be visible. + * @see #isWhitespaceVisible() + */ + public void setWhitespaceVisible(boolean visible) { + if (whitespaceVisible != visible) { + this.whitespaceVisible = visible; + tokenPainter = visible ? new VisibleWhitespaceTokenPainter() : (TokenPainter) new DefaultTokenPainter(); + repaint(); + firePropertyChange(VISIBLE_WHITESPACE_PROPERTY, !visible, visible); + } + } + + /** + * Resets the editor state after the user clicks on a hyperlink or releases the + * hyperlink modifier. + */ + private void stopScanningForLinks() { + if (isScanningForLinks) { + Cursor c = getCursor(); + isScanningForLinks = false; + linkGeneratorResult = null; + hoveredOverLinkOffset = -1; + if (c != null && c.getType() == Cursor.HAND_CURSOR) { + setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); + repaint(); // TODO: Repaint just the affected line. + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public void undoLastAction() { + super.undoLastAction(); + // Occasionally marked occurrences' Positions are in invalid states + // due to how javax.swing.text.AbstractDocument tracks the start and + // end offsets. This is usually not needed, but can be when the last + // token in the Document is a marked occurrence, and an undo or redo + // occurs which clears most of the document text. In that case it is + // possible for the end Position to be reset to something small, but + // the start offset to be its prior valid (start > end). + ((RSyntaxTextAreaHighlighter) getHighlighter()).clearMarkOccurrencesHighlights(); + } + + /** + * Returns the token at the specified position in the view. + * + * @param p + * The position in the view. + * @return The token, or null if no token is at that position. + * @see #modelToToken(int) + */ + /* + * TODO: This is a little inefficient. This should convert view coordinates to + * the underlying token (if any). The way things currently are, we're calling + * getTokenListForLine() twice (once in viewToModel() and once here). + */ + public Token viewToToken(Point p) { + return modelToToken(viewToModel(p)); + } + + /** + * Renders the text on the line containing the "matched bracket" after a delay. + */ + private final class MatchedBracketPopupTimer extends Timer implements ActionListener, CaretListener { + + private MatchedBracketPopup popup; + private int origDot; + private int matchedBracketOffs; + + private MatchedBracketPopupTimer() { + super(350, null); + addActionListener(this); + setRepeats(false); + } + + @Override + public void actionPerformed(ActionEvent e) { + + if (popup != null) { + popup.dispose(); + } + + Window window = SwingUtilities.getWindowAncestor(RSyntaxTextArea.this); + popup = new MatchedBracketPopup(window, RSyntaxTextArea.this, matchedBracketOffs); + popup.pack(); + popup.setVisible(true); + + } + + @Override + public void caretUpdate(CaretEvent e) { + int dot = e.getDot(); + if (dot != origDot) { + stop(); + removeCaretListener(this); + if (popup != null) { + popup.dispose(); + } + } + } + + /** + * Restarts this timer, and stores a new offset to paint. + * + * @param matchedBracketOffs + * The offset of the new matched bracket. + */ + public void restart(int matchedBracketOffs) { + this.origDot = getCaretPosition(); + this.matchedBracketOffs = matchedBracketOffs; + this.restart(); + } + + @Override + public void start() { + super.start(); + addCaretListener(this); + } + + } + + /** + * A timer that animates the "bracket matching" animation. + */ + private class BracketMatchingTimer extends Timer implements ActionListener { + + private int pulseCount; + + BracketMatchingTimer() { + super(20, null); + addActionListener(this); + setCoalesce(false); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isBracketMatchingEnabled()) { + if (match != null) { + updateAndInvalidate(match); + } + if (dotRect != null && getPaintMatchedBracketPair()) { + updateAndInvalidate(dotRect); + } + if (++pulseCount == 8) { + pulseCount = 0; + stop(); + } + } + } + + private void init(Rectangle r) { + r.x += 3; + r.y += 3; + r.width -= 6; + r.height -= 6; // So animation can "grow" match + } + + @Override + public void start() { + init(match); + if (dotRect != null && getPaintMatchedBracketPair()) { + init(dotRect); + } + pulseCount = 0; + super.start(); + } + + private void updateAndInvalidate(Rectangle r) { + if (pulseCount < 5) { + r.x--; + r.y--; + r.width += 2; + r.height += 2; + repaint(r.x, r.y, r.width, r.height); + } else if (pulseCount < 7) { + r.x++; + r.y++; + r.width -= 2; + r.height -= 2; + repaint(r.x - 2, r.y - 2, r.width + 5, r.height + 5); + } + } + + } + + /** + * Handles hyperlinks. + */ + private class RSyntaxTextAreaMutableCaretEvent extends RTextAreaMutableCaretEvent { + + private Insets insets; + + protected RSyntaxTextAreaMutableCaretEvent(RTextArea textArea) { + super(textArea); + insets = new Insets(0, 0, 0, 0); + } + + private HyperlinkEvent createHyperlinkEvent() { + HyperlinkEvent he = null; + if (linkGeneratorResult != null) { + he = linkGeneratorResult.execute(); + linkGeneratorResult = null; + } else { + Token t = modelToToken(hoveredOverLinkOffset); + URL url = null; + String desc = null; + try { + String temp = t.getLexeme(); + // URI's need "http://" prefix for web URL's to work. + if (temp.startsWith("www.")) { + temp = "http://" + temp; + } + url = new URL(temp); + } catch (MalformedURLException mue) { + desc = mue.getMessage(); + } + he = new HyperlinkEvent(RSyntaxTextArea.this, HyperlinkEvent.EventType.ACTIVATED, url, desc); + } + return he; + } + + private boolean equal(LinkGeneratorResult e1, LinkGeneratorResult e2) { + return e1.getSourceOffset() == e2.getSourceOffset(); + } + + @Override + public void mouseClicked(MouseEvent e) { + if (getHyperlinksEnabled() && isScanningForLinks && hoveredOverLinkOffset > -1) { + HyperlinkEvent he = createHyperlinkEvent(); + if (he != null) { + fireHyperlinkUpdate(he); + } + stopScanningForLinks(); + } + } + + @Override + public void mouseMoved(MouseEvent e) { + + super.mouseMoved(e); + + if (!getHyperlinksEnabled()) { + return; + } + + // If our link scanning mask is pressed... + if ((e.getModifiersEx() & linkScanningMask) == linkScanningMask) { + + // GitHub issue #25 - links identified at "edges" of editor + // should not be activated if mouse is in margin insets. + insets = getInsets(insets); + if (insets != null) { + int x = e.getX(); + int y = e.getY(); + if (x <= insets.left || y < insets.top) { + if (isScanningForLinks) { + stopScanningForLinks(); + } + return; + } + } + + isScanningForLinks = true; + Token t = viewToToken(e.getPoint()); + if (t != null) { + // Copy token, viewToModel() unfortunately modifies Token + t = new TokenImpl(t); + } + Cursor c2 = null; + if (t != null && t.isHyperlink()) { + if (hoveredOverLinkOffset == -1 || hoveredOverLinkOffset != t.getOffset()) { + hoveredOverLinkOffset = t.getOffset(); + repaint(); + } + c2 = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); + } else if (t != null && linkGenerator != null) { + int offs = viewToModel(e.getPoint()); + LinkGeneratorResult newResult = linkGenerator.isLinkAtOffset(RSyntaxTextArea.this, offs); + if (newResult != null) { + // Repaint if we're at a new link now. + if (linkGeneratorResult == null || !equal(newResult, linkGeneratorResult)) { + repaint(); + } + linkGeneratorResult = newResult; + hoveredOverLinkOffset = t.getOffset(); + c2 = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); + } else { + // Repaint if we've moved off of a link. + if (linkGeneratorResult != null) { + repaint(); + } + c2 = Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR); + hoveredOverLinkOffset = -1; + linkGeneratorResult = null; + } + } else { + c2 = Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR); + hoveredOverLinkOffset = -1; + linkGeneratorResult = null; + } + if (getCursor() != c2) { + setCursor(c2); + // TODO: Repaint just the affected line(s). + repaint(); // Link either left or went into. + } + } else { + if (isScanningForLinks) { + stopScanningForLinks(); + } + } + + } + + } + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.properties new file mode 100644 index 0000000..26d2181 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Folding + +Action.ToggleCurrentFold.Name=Toggle Current Fold +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Toggles the fold at the caret position. +Action.CollapseAllFolds.Name=Collapse All Folds +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Collapses all folds. +Action.CollapseCommentFolds.Name=Collapse All Comments +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Collapses all comment folds. +Action.ExpandAllFolds.Name=Expand All Folds +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Expands all folds. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java new file mode 100644 index 0000000..491a850 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java @@ -0,0 +1,79 @@ +/* + * 10/27/2004 + * + * RSyntaxTextAreaDefaultInputMap.java - The default input map for + * RSyntaxTextAreas. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +import javax.swing.KeyStroke; + +import org.fife.ui.rtextarea.RTADefaultInputMap; + + +/** + * The default input map for an RSyntaxTextArea. + * Currently, the new key bindings include: + *

    + *
  • Shift+Tab indents the current line or currently selected lines + * to the left. + *
+ * + * @author Robert Futrell + * @version 1.0 + */ +@SuppressWarnings({ "checkstyle:linelength" }) +public class RSyntaxTextAreaDefaultInputMap extends RTADefaultInputMap { + + /** + * Constructs the default input map for an RSyntaxTextArea. + */ + public RSyntaxTextAreaDefaultInputMap() { + + int defaultMod = getDefaultModifier(); + //int ctrl = InputEvent.CTRL_MASK; + int shift = InputEvent.SHIFT_MASK; + //int alt = InputEvent.ALT_MASK; + int defaultShift = defaultMod|shift; + + put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, shift), RSyntaxTextAreaEditorKit.rstaDecreaseIndentAction); + put(KeyStroke.getKeyStroke('}'), RSyntaxTextAreaEditorKit.rstaCloseCurlyBraceAction); + + put(KeyStroke.getKeyStroke('/'), RSyntaxTextAreaEditorKit.rstaCloseMarkupTagAction); + int os = RSyntaxUtilities.getOS(); + if (os==RSyntaxUtilities.OS_WINDOWS || os==RSyntaxUtilities.OS_MAC_OSX) { + // *nix causes trouble with CloseMarkupTagAction and ToggleCommentAction. + // It triggers both KEY_PRESSED ctrl+'/' and KEY_TYPED '/' events when the + // user presses ctrl+'/', but Windows and OS X do not. If we try to "move" + // the KEY_TYPED event for '/' to KEY_PRESSED, it'll work for Linux boxes + // with QWERTY keyboard layouts, but non-QUERTY users won't be able to type + // a '/' character at all then (!). Rather than try to hack together a + // solution by trying to detect the IM locale and do different things for + // different OSes & keyboard layouts, we do the simplest thing and + // (unfortunately) don't have a ToggleCommentAction for *nix out-of-the-box. + // Applications can add one easily enough if they want one. + put(KeyStroke.getKeyStroke(KeyEvent.VK_SLASH, defaultMod), RSyntaxTextAreaEditorKit.rstaToggleCommentAction); + } + + put(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultMod), RSyntaxTextAreaEditorKit.rstaGoToMatchingBracketAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, defaultMod), RSyntaxTextAreaEditorKit.rstaCollapseFoldAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, defaultMod), RSyntaxTextAreaEditorKit.rstaExpandFoldAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_DIVIDE, defaultMod), RSyntaxTextAreaEditorKit.rstaCollapseAllFoldsAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_MULTIPLY, defaultMod), RSyntaxTextAreaEditorKit.rstaExpandAllFoldsAction); + + // NOTE: no modifiers => mapped to keyTyped. If we had "0" as a second + // second parameter, we'd get the template action (keyPressed) AND the + // default space action (keyTyped). + //put(KeyStroke.getKeyStroke(' '), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, defaultShift), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java new file mode 100644 index 0000000..233d92c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java @@ -0,0 +1,2113 @@ +/* + * 08/29/2004 + * + * RSyntaxTextAreaEditorKit.java - The editor kit used by RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Component; +import java.awt.Font; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.text.CharacterIterator; +import java.util.ResourceBundle; +import java.util.Stack; + +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JScrollPane; +import javax.swing.KeyStroke; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.Caret; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Segment; +import javax.swing.text.TextAction; + +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldCollapser; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; +import org.fife.ui.rsyntaxtextarea.templates.CodeTemplate; +import org.fife.ui.rtextarea.IconRowHeader; +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextAreaEditorKit; +import org.fife.ui.rtextarea.RecordableTextAction; + + +/** + * An extension of RTextAreaEditorKit that adds functionality for + * programming-specific stuff. There are currently subclasses to handle: + * + *
    + *
  • Toggling code folds.
  • + *
  • Aligning "closing" curly braces with their matches, if the current + * programming language uses curly braces to identify code blocks.
  • + *
  • Copying the current selection as RTF.
  • + *
  • Block indentation (increasing the indent of one or multiple lines)
  • + *
  • Block un-indentation (decreasing the indent of one or multiple lines) + *
  • + *
  • Inserting a "code template" when a configurable key (e.g. a space) is + * pressed
  • + *
  • Decreasing the point size of all fonts in the text area
  • + *
  • Increasing the point size of all fonts in the text area
  • + *
  • Moving the caret to the "matching bracket" of the one at the current + * caret position
  • + *
  • Toggling whether the currently selected lines are commented out.
  • + *
  • Better selection of "words" on mouse double-clicks for programming + * languages.
  • + *
  • Better keyboard navigation via Ctrl+arrow keys for programming + * languages.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + */ +@SuppressWarnings({ "checkstyle:constantname" }) +public class RSyntaxTextAreaEditorKit extends RTextAreaEditorKit { + + private static final long serialVersionUID = 1L; + + public static final String rstaCloseCurlyBraceAction = "RSTA.CloseCurlyBraceAction"; + public static final String rstaCloseMarkupTagAction = "RSTA.CloseMarkupTagAction"; + public static final String rstaCollapseAllFoldsAction = "RSTA.CollapseAllFoldsAction"; + public static final String rstaCollapseAllCommentFoldsAction = "RSTA.CollapseAllCommentFoldsAction"; + public static final String rstaCollapseFoldAction = "RSTA.CollapseFoldAction"; + public static final String rstaCopyAsRtfAction = "RSTA.CopyAsRtfAction"; + public static final String rstaDecreaseIndentAction = "RSTA.DecreaseIndentAction"; + public static final String rstaExpandAllFoldsAction = "RSTA.ExpandAllFoldsAction"; + public static final String rstaExpandFoldAction = "RSTA.ExpandFoldAction"; + public static final String rstaGoToMatchingBracketAction = "RSTA.GoToMatchingBracketAction"; + public static final String rstaPossiblyInsertTemplateAction = "RSTA.TemplateAction"; + public static final String rstaToggleCommentAction = "RSTA.ToggleCommentAction"; + public static final String rstaToggleCurrentFoldAction = "RSTA.ToggleCurrentFoldAction"; + + private static final String MSG = "org.fife.ui.rsyntaxtextarea.RSyntaxTextArea"; + private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); + + + /** + * The actions that RSyntaxTextAreaEditorKit adds to those of + * RTextAreaEditorKit. + */ + private static final Action[] defaultActions = { + new CloseCurlyBraceAction(), + new CloseMarkupTagAction(), + new BeginWordAction(beginWordAction, false), + new BeginWordAction(selectionBeginWordAction, true), + new ChangeFoldStateAction(rstaCollapseFoldAction, true), + new ChangeFoldStateAction(rstaExpandFoldAction, false), + new CollapseAllFoldsAction(), + new CopyAsRtfAction(), + //new DecreaseFontSizeAction(), + new DecreaseIndentAction(), + new DeletePrevWordAction(), + new DumbCompleteWordAction(), + new EndAction(endAction, false), + new EndAction(selectionEndAction, true), + new EndWordAction(endWordAction, false), + new EndWordAction(endWordAction, true), + new ExpandAllFoldsAction(), + new GoToMatchingBracketAction(), + new InsertBreakAction(), + //new IncreaseFontSizeAction(), + new InsertTabAction(), + new NextWordAction(nextWordAction, false), + new NextWordAction(selectionNextWordAction, true), + new PossiblyInsertTemplateAction(), + new PreviousWordAction(previousWordAction, false), + new PreviousWordAction(selectionPreviousWordAction, true), + new SelectWordAction(), + new ToggleCommentAction(), + }; + + + /** + * Constructor. + */ + public RSyntaxTextAreaEditorKit() { + } + + + /** + * Returns the default document used by RSyntaxTextAreas. + * + * @return The document. + */ + @Override + public Document createDefaultDocument() { + return new RSyntaxDocument(SyntaxConstants.SYNTAX_STYLE_NONE); + } + + + /** + * Overridden to return a row header that is aware of folding. + * + * @param textArea The text area. + * @return The icon row header. + */ + @Override + public IconRowHeader createIconRowHeader(RTextArea textArea) { + return new FoldingAwareIconRowHeader((RSyntaxTextArea)textArea); + } + + + /** + * Fetches the set of commands that can be used + * on a text component that is using a model and + * view produced by this kit. + * + * @return the command list + */ + @Override + public Action[] getActions() { + return TextAction.augmentList(super.getActions(), + RSyntaxTextAreaEditorKit.defaultActions); + } + + + /** + * Returns localized text for an action. There's definitely a better place + * for this functionality. + * + * @param key The key into the action resource bundle. + * @return The localized text. + */ + public static String getString(String key) { + return msg.getString(key); + } + + + /** + * Positions the caret at the beginning of the word. This class is here + * to better handle finding the "beginning of the word" for programming + * languages. + */ + protected static class BeginWordAction + extends RTextAreaEditorKit.BeginWordAction { + + private Segment seg; + + protected BeginWordAction(String name, boolean select) { + super(name, select); + seg = new Segment(); + } + + @Override + protected int getWordStart(RTextArea textArea, int offs) + throws BadLocationException { + + if (offs==0) { + return offs; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + int line = textArea.getLineOfOffset(offs); + int start = textArea.getLineStartOffset(line); + if (offs==start) { + return start; + } + int end = textArea.getLineEndOffset(line); + if (line!=textArea.getLineCount()-1) { + end--; + } + doc.getText(start, end-start, seg); + + // Determine the "type" of char at offs - lower case, upper case, + // whitespace or other. We take special care here as we're starting + // in the middle of the Segment to check whether we're already at + // the "beginning" of a word. + int firstIndex = seg.getBeginIndex() + (offs-start) - 1; + seg.setIndex(firstIndex); + char ch = seg.current(); + char nextCh = offs==end ? 0 : seg.array[seg.getIndex() + 1]; + + // The "word" is a group of letters and/or digits + int languageIndex = 0; // TODO + if (doc.isIdentifierChar(languageIndex, ch)) { + if (offs!=end && !doc.isIdentifierChar(languageIndex, nextCh)) { + return offs; + } + do { + ch = seg.previous(); + } while (doc.isIdentifierChar(languageIndex, ch) && ch != CharacterIterator.DONE); + } + + // The "word" is whitespace + else if (Character.isWhitespace(ch)) { + if (offs!=end && !Character.isWhitespace(nextCh)) { + return offs; + } + do { + ch = seg.previous(); + } while (Character.isWhitespace(ch)); + } + + // Otherwise, the "word" a single "something else" char (operator, + // etc.). + + offs -= firstIndex - seg.getIndex() + 1;//seg.getEndIndex() - seg.getIndex(); + if (ch!=Segment.DONE && nextCh!='\n') { + offs++; + } + + return offs; + + } + + } + + + /** + * Expands or collapses the nearest fold. + */ + public static class ChangeFoldStateAction extends FoldRelatedAction { + + private boolean collapse; + + public ChangeFoldStateAction(String name, boolean collapse) { + super(name); + this.collapse = collapse; + } + + public ChangeFoldStateAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + Fold fold = getClosestFold(rsta); + if (fold!=null) { + fold.setCollapsed(collapse); + } + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return getName(); + } + + } + + + /** + * Action that (optionally) aligns a closing curly brace with the line + * containing its matching opening curly brace. + */ + public static class CloseCurlyBraceAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + private Point bracketInfo; + private Segment seg; + + public CloseCurlyBraceAction() { + super(rstaCloseCurlyBraceAction); + seg = new Segment(); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); + + int languageIndex = 0; + int dot = textArea.getCaretPosition(); + if (dot>0) { + Token t = RSyntaxUtilities.getTokenAtOffset(rsta, dot-1); + languageIndex = t==null ? 0 : t.getLanguageIndex(); + } + boolean alignCurlyBraces = rsta.isAutoIndentEnabled() && + doc.getCurlyBracesDenoteCodeBlocks(languageIndex); + + if (alignCurlyBraces) { + textArea.beginAtomicEdit(); + } + + try { + + textArea.replaceSelection("}"); + + // If the user wants to align curly braces... + if (alignCurlyBraces) { + + Element root = doc.getDefaultRootElement(); + dot = rsta.getCaretPosition() - 1; // Start before '}' + int line = root.getElementIndex(dot); + Element elem = root.getElement(line); + int start = elem.getStartOffset(); + + // Get the current line's text up to the '}' entered. + try { + doc.getText(start, dot-start, seg); + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + return; + } + + // Only attempt to align if there's only whitespace up to + // the '}' entered. + for (int i=0; i-1) { + try { + String ws = RSyntaxUtilities.getLeadingWhitespace( + doc, bracketInfo.y); + rsta.replaceRange(ws, start, dot); + } catch (BadLocationException ble) { + ble.printStackTrace(); + return; + } + } + + } + + } finally { + if (alignCurlyBraces) { + textArea.endAtomicEdit(); + } + } + + } + + @Override + public final String getMacroID() { + return rstaCloseCurlyBraceAction; + } + + } + + + /** + * (Optionally) completes a closing markup tag. + */ + public static class CloseMarkupTagAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + public CloseMarkupTagAction() { + super(rstaCloseMarkupTagAction); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); + + Caret c = rsta.getCaret(); + boolean selection = c.getDot()!=c.getMark(); + rsta.replaceSelection("/"); + + // Don't automatically complete a tag if there was a selection + int dot = c.getDot(); + + if (doc.getLanguageIsMarkup() && + doc.getCompleteMarkupCloseTags() && + !selection && rsta.getCloseMarkupTags() && dot>1) { + + try { + + // Check actual char before token type, since it's quicker + char ch = doc.charAt(dot-2); + if (ch=='<' || ch=='[') { + + Token t = doc.getTokenListForLine( + rsta.getCaretLineNumber()); + t = RSyntaxUtilities.getTokenAtOffset(t, dot-1); + if (t!=null && t.getType()==Token.MARKUP_TAG_DELIMITER) { + //System.out.println("Huzzah - closing tag!"); + String tagName = discoverTagName(doc, dot); + if (tagName!=null) { + rsta.replaceSelection(tagName + (char)(ch+2)); + } + } + + } + + } catch (BadLocationException ble) { // Never happens + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + ble.printStackTrace(); + } + + } + + } + + /** + * Discovers the name of the tag being closed. Assumes standard + * SGML-style markup tags. + * + * @param doc The document to parse. + * @param dot The location of the caret. This should be right after + * the start of a closing tag token (e.g. "</" + * or "[" in the case of BBCode). + * @return The name of the tag to close, or null if it + * could not be determined. + */ + private String discoverTagName(RSyntaxDocument doc, int dot) { + + Stack stack = new Stack(); + + Element root = doc.getDefaultRootElement(); + int curLine = root.getElementIndex(dot); + + for (int i=0; i<=curLine; i++) { + + Token t = doc.getTokenListForLine(i); + while (t!=null && t.isPaintable()) { + + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.isSingleChar('<') || t.isSingleChar('[')) { + t = t.getNextToken(); + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_NAME || + // Being lenient here and also checking + // for attributes, in case they + // (incorrectly) have whitespace between + // the '<' char and the element name. + t.getType()==Token.MARKUP_TAG_ATTRIBUTE) { + stack.push(t.getLexeme()); + break; + } + t = t.getNextToken(); + } + } + else if (t.length()==2 && t.charAt(0)=='/' && + (t.charAt(1)=='>' || + t.charAt(1)==']')) { + if (!stack.isEmpty()) { // Always true for valid XML + stack.pop(); + } + } + else if (t.length()==2 && + (t.charAt(0)=='<' || t.charAt(0)=='[') && + t.charAt(1)=='/') { + String tagName = null; + if (!stack.isEmpty()) { // Always true for valid XML + tagName = stack.pop(); + } + if (t.getEndOffset()>=dot) { + return tagName; + } + } + } + + t = t==null ? null : t.getNextToken(); + + } + + } + + return null; // Should never happen + + } + + @Override + public String getMacroID() { + return getName(); + } + + } + + + /** + * Collapses all comment folds. + */ + public static class CollapseAllCommentFoldsAction extends FoldRelatedAction{ + + private static final long serialVersionUID = 1L; + + public CollapseAllCommentFoldsAction() { + super(rstaCollapseAllCommentFoldsAction); + setProperties(msg, "Action.CollapseCommentFolds"); + } + + public CollapseAllCommentFoldsAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + FoldCollapser collapser = new FoldCollapser(); + collapser.collapseFolds(rsta.getFoldManager()); + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaCollapseAllCommentFoldsAction; + } + + } + + + /** + * Collapses all folds. + */ + public static class CollapseAllFoldsAction extends FoldRelatedAction { + + private static final long serialVersionUID = 1L; + + public CollapseAllFoldsAction() { + this(false); + } + + public CollapseAllFoldsAction(boolean localizedName) { + super(rstaCollapseAllFoldsAction); + if (localizedName) { + setProperties(msg, "Action.CollapseAllFolds"); + } + } + + public CollapseAllFoldsAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + FoldCollapser collapser = new FoldCollapser() { + @Override + public boolean getShouldCollapse(Fold fold) { + return true; + } + }; + collapser.collapseFolds(rsta.getFoldManager()); + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaCollapseAllFoldsAction; + } + + } + + + /** + * Action for copying text as RTF. + */ + public static class CopyAsRtfAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + public CopyAsRtfAction() { + super(rstaCopyAsRtfAction); + } + + public CopyAsRtfAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + ((RSyntaxTextArea)textArea).copyAsRtf(); + textArea.requestFocusInWindow(); + } + + @Override + public final String getMacroID() { + return getName(); + } + + } + + + /** + * Action for decreasing the font size of all fonts in the text area. + */ + public static class DecreaseFontSizeAction + extends RTextAreaEditorKit.DecreaseFontSizeAction { + + private static final long serialVersionUID = 1L; + + public DecreaseFontSizeAction() { + super(); + } + + public DecreaseFontSizeAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + SyntaxScheme scheme = rsta.getSyntaxScheme(); + + // All we need to do is update all of the fonts in syntax + // schemes, then call setSyntaxHighlightingColorScheme with the + // same scheme already being used. This relies on the fact that + // that method does not check whether the new scheme is different + // from the old scheme before updating. + + boolean changed = false; + int count = scheme.getStyleCount(); + for (int i=0; i=MINIMUM_SIZE) { + // Shrink by decreaseAmount. + ss.font = font.deriveFont(newSize); + changed = true; + } + else if (oldSize>MINIMUM_SIZE) { + // Can't shrink by full decreaseAmount, but + // can shrink a little bit. + ss.font = font.deriveFont(MINIMUM_SIZE); + changed = true; + } + } + } + } + + // Do the text area's font also. + Font font = rsta.getFont(); + float oldSize = font.getSize2D(); + float newSize = oldSize - decreaseAmount; + if (newSize>=MINIMUM_SIZE) { + // Shrink by decreaseAmount. + rsta.setFont(font.deriveFont(newSize)); + changed = true; + } + else if (oldSize>MINIMUM_SIZE) { + // Can't shrink by full decreaseAmount, but + // can shrink a little bit. + rsta.setFont(font.deriveFont(MINIMUM_SIZE)); + changed = true; + } + + // If we updated at least one font, update the screen. If + // all of the fonts were already the minimum size, beep. + if (changed) { + rsta.setSyntaxScheme(scheme); + // NOTE: This is a hack to get an encompassing + // RTextScrollPane to repaint its line numbers to account + // for a change in line height due to a font change. I'm + // not sure why we need to do this here but not when we + // change the syntax highlighting color scheme via the + // Options dialog... setSyntaxHighlightingColorScheme() + // calls revalidate() which won't repaint the scroll pane + // if scrollbars don't change, which is why we need this. + Component parent = rsta.getParent(); + if (parent instanceof javax.swing.JViewport) { + parent = parent.getParent(); + if (parent instanceof JScrollPane) { + parent.repaint(); + } + } + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + + } + + } + + + /** + * Action for when un-indenting lines (either the current line if there is + * selection, or all selected lines if there is one). + */ + public static class DecreaseIndentAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + private Segment s; + + public DecreaseIndentAction() { + this(rstaDecreaseIndentAction); + } + + public DecreaseIndentAction(String name) { + super(name); + s = new Segment(); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + Document document = textArea.getDocument(); + Element map = document.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int line1 = map.getElementIndex(dot); + int tabSize = textArea.getTabSize(); + + // If there is a selection, indent all lines in the selection. + // Otherwise, indent the line the caret is on. + if (dot!=mark) { + // Note that we cheaply reuse variables here, so don't + // take their names to mean what they are. + int line2 = map.getElementIndex(mark); + dot = Math.min(line1, line2); + mark = Math.max(line1, line2); + Element elem; + textArea.beginAtomicEdit(); + try { + for (line1=dot; line1i) { + // If the first character is a tab, remove it. + if (s.array[i]=='\t') { + doc.remove(start, 1); + } + // Otherwise, see if the first character is a space. If it + // is, remove all contiguous whitespaces at the beginning of + // this line, up to the tab size. + else if (s.array[i]==' ') { + i++; + int toRemove = 1; + while (i start) { + char ch = doc.charAt(offs); + if (isIdentifierChar(ch)) { + offs--; + } + } + else { // offs == start => previous word is on previous line + if (line == 0) { + return -1; + } + elem = root.getElement(--line); + offs = elem.getEndOffset() - 1; + } + + int prevWordStart = getPreviousWordStartInLine(doc, elem, offs); + while (prevWordStart == -1 && line > 0) { + line--; + elem = root.getElement(line); + prevWordStart = getPreviousWordStartInLine(doc, elem, + elem.getEndOffset()); + } + + return prevWordStart; + + } + + private int getPreviousWordStartInLine(RSyntaxDocument doc, + Element elem, int offs) throws BadLocationException { + + int start = elem.getStartOffset(); + int cur = offs; + + // Skip any whitespace or non-word chars + while (cur >= start) { + char ch = doc.charAt(cur); + if (isIdentifierChar(ch)) { + break; + } + cur--; + } + if (cur < start) { + // Empty line or nothing but whitespace/non-word chars + return -1; + } + + return getWordStartImpl(doc, elem, cur); + + } + + @Override + protected int getWordEnd(RTextArea textArea, int offs) + throws BadLocationException { + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Element elem = root.getElement(line); + int end = elem.getEndOffset() - 1; + + int wordEnd = offs; + while (wordEnd <= end) { + if (!isIdentifierChar(doc.charAt(wordEnd))) { + break; + } + wordEnd++; + } + + return wordEnd; + + } + + @Override + protected int getWordStart(RTextArea textArea, int offs) + throws BadLocationException { + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Element elem = root.getElement(line); + return getWordStartImpl(doc, elem, offs); + } + + private static int getWordStartImpl(RSyntaxDocument doc, + Element elem, int offs) throws BadLocationException { + + int start = elem.getStartOffset(); + + int wordStart = offs; + while (wordStart >= start) { + char ch = doc.charAt(wordStart); + // Ignore newlines so we work when caret is at end of line + if (!isIdentifierChar(ch) && ch != '\n') { + break; + } + wordStart--; + } + + return wordStart==offs ? offs : wordStart + 1; + + } + + /** + * Overridden to not suggest word completions if the text right before + * the caret contains non-word characters, such as '/' or '%'. + * + * @param prefix The prefix characters before the caret. + * @return Whether the prefix could be part of a "word" in the context + * of the text area's current content. + */ + @Override + protected boolean isAcceptablePrefix(String prefix) { + return prefix.length() > 0 && + isIdentifierChar(prefix.charAt(prefix.length()-1)); + } + + /** + * Returns whether the specified character should be considered part + * of an identifier. + * + * @param ch The character. + * @return Whether the character is part of an identifier. + */ + private static boolean isIdentifierChar(char ch) { + //return doc.isIdentifierChar(languageIndex, ch); + return Character.isLetterOrDigit(ch) || ch == '_' || ch == '$'; + } + + } + + + /** + * Positions the caret at the end of the word. This class is here to + * better handle finding the "end of the word" in programming languages. + */ + protected static class EndWordAction + extends RTextAreaEditorKit.EndWordAction { + + private Segment seg; + + protected EndWordAction(String name, boolean select) { + super(name, select); + seg = new Segment(); + } + + @Override + protected int getWordEnd(RTextArea textArea, int offs) + throws BadLocationException { + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + if (offs==doc.getLength()) { + return offs; + } + + int line = textArea.getLineOfOffset(offs); + int end = textArea.getLineEndOffset(line); + if (line!=textArea.getLineCount()-1) { + end--; // Hide newline + } + if (offs==end) { + return end; + } + doc.getText(offs, end-offs, seg); + + // Determine the "type" of char at offs - letter/digit, + // whitespace or other + char ch = seg.first(); + + // The "word" is a group of letters and/or digits + int languageIndex = 0; // TODO + if (doc.isIdentifierChar(languageIndex, ch)) { + do { + ch = seg.next(); + } while (doc.isIdentifierChar(languageIndex, ch) && + ch != CharacterIterator.DONE); + } + + // The "word" is whitespace. + else if (Character.isWhitespace(ch)) { + + do { + ch = seg.next(); + } while (Character.isWhitespace(ch)); + } + + // Otherwise, the "word" is a single character of some other type + // (operator, etc.). + + offs += seg.getIndex() - seg.getBeginIndex(); + return offs; + + } + + } + + + /** + * Expands all folds. + */ + public static class ExpandAllFoldsAction extends FoldRelatedAction { + + private static final long serialVersionUID = 1L; + + public ExpandAllFoldsAction() { + this(false); + } + + public ExpandAllFoldsAction(boolean localizedName) { + super(rstaExpandAllFoldsAction); + if (localizedName) { + setProperties(msg, "Action.ExpandAllFolds"); + } + } + + public ExpandAllFoldsAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + FoldManager fm = rsta.getFoldManager(); + for (int i=0; i-1) { + // Go to the position AFTER the bracket so the previous + // bracket (which we were just on) is highlighted. + rsta.setCaretPosition(bracketInfo.y+1); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaGoToMatchingBracketAction; + } + + } + + + /** + * Action for increasing the font size of all fonts in the text area. + */ + public static class IncreaseFontSizeAction + extends RTextAreaEditorKit.IncreaseFontSizeAction { + + private static final long serialVersionUID = 1L; + + public IncreaseFontSizeAction() { + super(); + } + + public IncreaseFontSizeAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + SyntaxScheme scheme = rsta.getSyntaxScheme(); + + // All we need to do is update all of the fonts in syntax + // schemes, then call setSyntaxHighlightingColorScheme with the + // same scheme already being used. This relies on the fact that + // that method does not check whether the new scheme is different + // from the old scheme before updating. + + boolean changed = false; + int count = scheme.getStyleCount(); + for (int i=0; ipos that + * is NOT a whitespace char, or -1 if only + * whitespace chars follow pos (or it is the end + * position in the string). + */ + private static int atEndOfLine(int pos, String s, int sLen) { + for (int i=pos; i0) { + StringBuilder sb = new StringBuilder(); + if (line==textArea.getLineCount()-1) { + sb.append('\n'); + } + if (leadingWS!=null) { + sb.append(leadingWS); + } + sb.append("}\n"); + int dot = textArea.getCaretPosition(); + int end = textArea.getLineEndOffsetOfCurrentLine(); + // Insert at end of line, not at dot: they may have + // pressed Enter in the middle of the line and brought + // some text (though it must be whitespace and/or + // comments) down onto the new line. + textArea.insert(sb.toString(), end); + textArea.setCaretPosition(dot); // Caret may have moved + } + + } + + } + + } + + } + + + /** + * Action for inserting tabs. This is extended to "block indent" a + * group of contiguous lines if they are selected. + */ + public static class InsertTabAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + public InsertTabAction() { + super(insertTabAction); + } + + public InsertTabAction(String name) { + super(name); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + Document document = textArea.getDocument(); + Element map = document.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int dotLine = map.getElementIndex(dot); + int markLine = map.getElementIndex(mark); + + // If there is a multi-line selection, indent all lines in + // the selection. + if (dotLine!=markLine) { + int first = Math.min(dotLine, markLine); + int last = Math.max(dotLine, markLine); + Element elem; int start; + + // Since we're using Document.insertString(), we must mimic the + // soft tab behavior provided by RTextArea.replaceSelection(). + String replacement = "\t"; + if (textArea.getTabsEmulated()) { + StringBuilder sb = new StringBuilder(); + int temp = textArea.getTabSize(); + for (int i=0; i0 && + // ((mod&ActionEvent.ALT_MASK)==(mod&ActionEvent.CTRL_MASK))) { + // char ch = str.charAt(0); + // if (ch>=0x20 && ch!=0x7F) + // textArea.replaceSelection(str); + //} + textArea.replaceSelection(" "); + } + + @Override + public final String getMacroID() { + return rstaPossiblyInsertTemplateAction; + } + + } + + + /** + * Action to move the selection and/or caret. Constructor indicates + * direction to use. This class overrides the behavior defined in + * {@link RTextAreaEditorKit} to better skip "words" in source code. + */ + public static class PreviousWordAction + extends RTextAreaEditorKit.PreviousWordAction { + + private Segment seg; + + public PreviousWordAction(String nm, boolean select) { + super(nm, select); + seg = new Segment(); + } + + /** + * Overridden to do better with skipping "words" in code. + */ + @Override + protected int getPreviousWord(RTextArea textArea, int offs) + throws BadLocationException { + + if (offs==0) { + return offs; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + int start = root.getElement(line).getStartOffset(); + if (offs==start) {// If we're already at the start of the line... + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { // End of next visible line + FoldManager fm = rsta.getFoldManager(); + while (--line>=0 && fm.isLineHidden(line)); + if (line>=0) { // Found an earlier visible line + offs = root.getElement(line).getEndOffset() - 1; + } + // No earlier visible line - we must be at offs==0... + return offs; + } + else { + return start-1; // End of previous line. + } + } + doc.getText(start, offs-start, seg); + + // Determine the "type" of char at offs - lower case, upper case, + // whitespace or other + char ch = seg.last(); + + // Skip any "leading" whitespace + while (Character.isWhitespace(ch)) { + ch = seg.previous(); + } + + // Skip the group of letters and/or digits + int languageIndex = 0; + if (doc.isIdentifierChar(languageIndex, ch)) { + do { + ch = seg.previous(); + } while (doc.isIdentifierChar(languageIndex, ch) && + ch != CharacterIterator.DONE); + } + + // Skip groups of "anything else" (operators, etc.). + else if (!Character.isWhitespace(ch)) { + do { + ch = seg.previous(); + } while (ch!=Segment.DONE && + !(doc.isIdentifierChar(languageIndex, ch) || + Character.isWhitespace(ch))); + } + + offs -= seg.getEndIndex() - seg.getIndex(); + if (ch!=Segment.DONE) { + offs++; + } + + return offs; + + } + + } + + + /** + * Selects the word around the caret. This class is here to better + * handle selecting "words" in programming languages. + */ + public static class SelectWordAction + extends RTextAreaEditorKit.SelectWordAction { + + @Override + protected void createActions() { + start = new BeginWordAction("pigdog", false); + end = new EndWordAction("pigdog", true); + } + + } + + + /** + * Action that toggles whether the currently selected lines are + * commented. + */ + public static class ToggleCommentAction extends RecordableTextAction { + + public ToggleCommentAction() { + super(rstaToggleCommentAction); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element map = doc.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int line1 = map.getElementIndex(dot); + int line2 = map.getElementIndex(mark); + int start = Math.min(line1, line2); + int end = Math.max(line1, line2); + + Token t = doc.getTokenListForLine(start); + int languageIndex = t!=null ? t.getLanguageIndex() : 0; + String[] startEnd = doc.getLineCommentStartAndEnd(languageIndex); + + if (startEnd==null) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + // Don't toggle comment on last line if there is no + // text selected on it. + if (start!=end) { + Element elem = map.getElement(end); + if (Math.max(dot, mark)==elem.getStartOffset()) { + end--; + } + } + + textArea.beginAtomicEdit(); + try { + boolean add = getDoAdd(doc,map, start,end, startEnd); + for (line1=start; line1<=end; line1++) { + Element elem = map.getElement(line1); + handleToggleComment(elem, doc, startEnd, add); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + } finally { + textArea.endAtomicEdit(); + } + + } + + private boolean getDoAdd(Document doc, Element map, int startLine, + int endLine, String[] startEnd) + throws BadLocationException { + boolean doAdd = false; + for (int i=startLine; i<=endLine; i++) { + Element elem = map.getElement(i); + int start = elem.getStartOffset(); + String t = doc.getText(start, elem.getEndOffset()-start-1); + if (!t.startsWith(startEnd[0]) || + (startEnd[1]!=null && !t.endsWith(startEnd[1]))) { + doAdd = true; + break; + } + } + return doAdd; + } + + private void handleToggleComment(Element elem, Document doc, + String[] startEnd, boolean add) throws BadLocationException { + int start = elem.getStartOffset(); + int end = elem.getEndOffset() - 1; + if (add) { + doc.insertString(start, startEnd[0], null); + if (startEnd[1]!=null) { + doc.insertString(end+startEnd[0].length(), startEnd[1], + null); + } + } + else { + doc.remove(start, startEnd[0].length()); + if (startEnd[1]!=null) { + int temp = startEnd[1].length(); + doc.remove(end-startEnd[0].length()-temp, temp); + } + } + } + + @Override + public final String getMacroID() { + return rstaToggleCommentAction; + } + + } + + + /** + * Toggles the fold at the current caret position or line. + */ + public static class ToggleCurrentFoldAction extends FoldRelatedAction { + + private static final long serialVersionUID = 1L; + + public ToggleCurrentFoldAction() { + super(rstaToggleCurrentFoldAction); + setProperties(msg, "Action.ToggleCurrentFold"); + } + + public ToggleCurrentFoldAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + Fold fold = getClosestFold(rsta); + if (fold!=null) { + fold.toggleCollapsedState(); + } + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaToggleCurrentFoldAction; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java new file mode 100644 index 0000000..1b3f948 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java @@ -0,0 +1,291 @@ +/* + * 04/23/2009 + * + * RSyntaxTextAreaHighlighter.java - Highlighter for RSyntaxTextAreas. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Shape; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.swing.plaf.TextUI; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.JTextComponent; +import javax.swing.text.View; + +import org.fife.ui.rsyntaxtextarea.parser.Parser; +import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; +import org.fife.ui.rtextarea.RTextAreaHighlighter; +import org.fife.ui.rtextarea.SmartHighlightPainter; + + +/** + * The highlighter implementation used by {@link RSyntaxTextArea}s. It knows to + * always paint "marked occurrences" highlights below selection highlights, + * and squiggle underline highlights above all other highlights.

+ * + * Most of this code is copied from javax.swing.text.DefaultHighlighter; + * unfortunately, we cannot re-use much of it since it is package private. + * + * @author Robert Futrell + * @version 1.0 + */ +public class RSyntaxTextAreaHighlighter extends RTextAreaHighlighter { + + /** + * Marked occurrences in the document (to be painted separately from + * other highlights). + */ + private List markedOccurrences; + + /** + * Highlights from document parsers. These should be painted "on top of" + * all other highlights to ensure they are always above the selection. + */ + private List parserHighlights; + + /** + * The default color used for parser notices when none is specified. + */ + private static final Color DEFAULT_PARSER_NOTICE_COLOR = Color.RED; + + + /** + * Constructor. + */ + public RSyntaxTextAreaHighlighter() { + markedOccurrences = new ArrayList(); + parserHighlights = new ArrayList(0); // Often unused + } + + + /** + * Adds a special "marked occurrence" highlight. + * + * @param start + * @param end + * @param p + * @return A tag to reference the highlight later. + * @throws BadLocationException + * @see #clearMarkOccurrencesHighlights() + */ + Object addMarkedOccurrenceHighlight(int start, int end, + SmartHighlightPainter p) throws BadLocationException { + Document doc = textArea.getDocument(); + TextUI mapper = textArea.getUI(); + // Always layered highlights for marked occurrences. + SyntaxLayeredHighlightInfoImpl i = new SyntaxLayeredHighlightInfoImpl(); + i.setPainter(p); + i.setStartOffset(doc.createPosition(start)); + // HACK: Use "end-1" to prevent chars the user types at the "end" of + // the highlight to be absorbed into the highlight (default Highlight + // behavior). + i.setEndOffset(doc.createPosition(end-1)); + markedOccurrences.add(i); + mapper.damageRange(textArea, start, end); + return i; + } + + + /** + * Adds a highlight from a parser. + * + * @param notice The notice from a {@link Parser}. + * @return A tag with which to reference the highlight. + * @throws BadLocationException + * @see #clearParserHighlights() + * @see #clearParserHighlights(Parser) + */ + HighlightInfo addParserHighlight(ParserNotice notice, HighlightPainter p) + throws BadLocationException { + + Document doc = textArea.getDocument(); + TextUI mapper = textArea.getUI(); + + int start = notice.getOffset(); + int end = 0; + if (start==-1) { // Could just define an invalid line number + int line = notice.getLine(); + Element root = doc.getDefaultRootElement(); + if (line>=0 && line i = parserHighlights.iterator(); + while (i.hasNext()) { + + SyntaxLayeredHighlightInfoImpl info = i.next(); + + if (info.notice.getParser()==parser) { + if (info.width > 0 && info.height > 0) { + textArea.repaint(info.x, info.y, info.width, info.height); + } + i.remove(); + } + + } + + } + + + /** + * {@inheritDoc} + */ + @Override + public void deinstall(JTextComponent c) { + super.deinstall(c); + markedOccurrences.clear(); + parserHighlights.clear(); + } + + + /** + * Returns a list of "marked occurrences" in the text area. If there are + * no marked occurrences, this will be an empty list. + * + * @return The list of marked occurrences, or an empty list if none. The + * contents of this list will be of type {@link DocumentRange}. + */ + public List getMarkedOccurrences() { + List list = new ArrayList(markedOccurrences.size()); + for (HighlightInfo info : markedOccurrences) { + int start = info.getStartOffset(); + int end = info.getEndOffset() + 1; // HACK + if (start <= end) { + // Occasionally a Marked Occurrence can have a lost end offset + // but not start offset (replacing entire text content with + // new content, and a marked occurrence is on the last token + // in the document). + DocumentRange range = new DocumentRange(start, end); + list.add(range); + } + } + return list; + } + + + @Override + public void paintLayeredHighlights(Graphics g, int lineStart, int lineEnd, + Shape viewBounds, JTextComponent editor, View view) { + paintListLayered(g, lineStart,lineEnd, viewBounds, editor, view, markedOccurrences); + super.paintLayeredHighlights(g, lineStart, lineEnd, viewBounds, editor, view); + paintListLayered(g, lineStart,lineEnd, viewBounds, editor, view, parserHighlights); + } + + + /** + * Removes a parser highlight from this view. + * + * @param tag The reference to the highlight. + * @see #addParserHighlight(ParserNotice, javax.swing.text.Highlighter.HighlightPainter) + */ + void removeParserHighlight(HighlightInfo tag) { + repaintListHighlight(tag); + parserHighlights.remove(tag); + } + + + /** + * Highlight info implementation used for parser notices and marked + * occurrences. + */ + private static class SyntaxLayeredHighlightInfoImpl extends + LayeredHighlightInfoImpl { + + private ParserNotice notice;//Color color; // Used only by Parser highlights. + + @Override + public Color getColor() { + //return color; + Color color = null; + if (notice!=null) { + color = notice.getColor(); + if (color==null) { + color = DEFAULT_PARSER_NOTICE_COLOR; + } + } + return color; + } + + @Override + public String toString() { + return "[SyntaxLayeredHighlightInfoImpl: " + + "startOffs=" + getStartOffset() + + ", endOffs=" + getEndOffset() + + ", color=" + getColor() + + "]"; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java new file mode 100644 index 0000000..521721b --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java @@ -0,0 +1,269 @@ +/* + * 02/24/2004 + * + * RSyntaxTextAreaUI.java - UI for an RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Rectangle; +import java.beans.PropertyChangeEvent; + +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.UIManager; +import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.InputMapUIResource; +import javax.swing.text.BadLocationException; +import javax.swing.text.EditorKit; +import javax.swing.text.Element; +import javax.swing.text.Highlighter; +import javax.swing.text.JTextComponent; +import javax.swing.text.View; + +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextAreaUI; + + +/** + * UI used by RSyntaxTextArea. This allows us to implement + * syntax highlighting. + * + * @author Robert Futrell + * @version 0.1 + */ +public class RSyntaxTextAreaUI extends RTextAreaUI { + + private static final String SHARED_ACTION_MAP_NAME = "RSyntaxTextAreaUI.actionMap"; + private static final String SHARED_INPUT_MAP_NAME = "RSyntaxTextAreaUI.inputMap"; + private static final EditorKit DEFAULT_KIT = new RSyntaxTextAreaEditorKit(); + + + public static ComponentUI createUI(JComponent ta) { + return new RSyntaxTextAreaUI(ta); + } + + + /** + * Constructor. + */ + public RSyntaxTextAreaUI(JComponent rSyntaxTextArea) { + super(rSyntaxTextArea); + } + + + /** + * Creates the view for an element. + * + * @param elem The element. + * @return The view. + */ + @Override + public View create(Element elem) { + RTextArea c = getRTextArea(); + if (c instanceof RSyntaxTextArea) { + RSyntaxTextArea area = (RSyntaxTextArea) c; + View v; + if (area.getLineWrap()) { + v = new WrappedSyntaxView(elem); + } + else { + v = new SyntaxView(elem); + } + return v; + } + return null; + } + + + /** + * Creates the highlighter to use for syntax text areas. + * + * @return The highlighter. + */ + @Override + protected Highlighter createHighlighter() { + return new RSyntaxTextAreaHighlighter(); + } + + + /** + * Returns the name to use to cache/fetch the shared action map. This + * should be overridden by subclasses if the subclass has its own custom + * editor kit to install, so its actions get picked up. + * + * @return The name of the cached action map. + */ + @Override + protected String getActionMapName() { + return SHARED_ACTION_MAP_NAME; + } + + + /** + * Fetches the EditorKit for the UI. + * + * @param tc The text component for which this UI is installed. + * @return The editor capabilities. + * @see javax.swing.plaf.TextUI#getEditorKit + */ + @Override + public EditorKit getEditorKit(JTextComponent tc) { + return DEFAULT_KIT; + } + + + /** + * Get the InputMap to use for the UI.

+ * + * This method is not named getInputMap() because there is + * a package-private method in BasicTextAreaUI with that name. + * Thus, creating a new method with that name causes certain compilers to + * issue warnings that you are not actually overriding the original method + * (since it is package-private). + */ + @Override + protected InputMap getRTextAreaInputMap() { + InputMap map = new InputMapUIResource(); + InputMap shared = (InputMap)UIManager.get(SHARED_INPUT_MAP_NAME); + if (shared==null) { + shared = new RSyntaxTextAreaDefaultInputMap(); + UIManager.put(SHARED_INPUT_MAP_NAME, shared); + } + //KeyStroke[] keys = shared.allKeys(); + //for (int i=0; i " + shared.get(keys[i])); + map.setParent(shared); + return map; + } + + + @Override + protected void paintEditorAugmentations(Graphics g) { + super.paintEditorAugmentations(g); + paintMatchedBracket(g); + } + + + /** + * Paints the "matched bracket", if any. + * + * @param g The graphics context. + */ + protected void paintMatchedBracket(Graphics g) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isBracketMatchingEnabled()) { + Rectangle match = rsta.getMatchRectangle(); + if (match!=null) { + paintMatchedBracketImpl(g, rsta, match); + } + if (rsta.getPaintMatchedBracketPair()) { + Rectangle dotRect = rsta.getDotRectangle(); + if (dotRect!=null) { // should always be true + paintMatchedBracketImpl(g, rsta, dotRect); + } + } + } + } + + + protected void paintMatchedBracketImpl(Graphics g, RSyntaxTextArea rsta, + Rectangle r) { + // We must add "-1" to the height because otherwise we'll paint below + // the region that gets invalidated. + if (rsta.getAnimateBracketMatching()) { + Color bg = rsta.getMatchedBracketBGColor(); + final int arcWH = 5; + if (bg!=null) { + g.setColor(bg); + g.fillRoundRect(r.x,r.y, r.width,r.height-1, arcWH, arcWH); + } + g.setColor(rsta.getMatchedBracketBorderColor()); + g.drawRoundRect(r.x,r.y, r.width,r.height-1, arcWH, arcWH); + } + else { + Color bg = rsta.getMatchedBracketBGColor(); + if (bg!=null) { + g.setColor(bg); + g.fillRect(r.x,r.y, r.width,r.height-1); + } + g.setColor(rsta.getMatchedBracketBorderColor()); + g.drawRect(r.x,r.y, r.width,r.height-1); + } + } + + + /** + * Gets called whenever a bound property is changed on this UI's + * RSyntaxTextArea. + * + * @param e The property change event. + */ + @Override + protected void propertyChange(PropertyChangeEvent e) { + + String name = e.getPropertyName(); + + // If they change the syntax scheme, we must do this so that + // WrappedSyntaxView(_TEST) updates its child views properly. + if (name.equals(RSyntaxTextArea.SYNTAX_SCHEME_PROPERTY)) { + modelChanged(); + } + + // Everything else is general to all RTextAreas. + else { + super.propertyChange(e); + } + + } + + + /** + * Updates the view. This should be called when the underlying + * RSyntaxTextArea changes its syntax editing style. + */ + public void refreshSyntaxHighlighting() { + modelChanged(); + } + + + /** + * Returns the y-coordinate of the specified line.

+ * + * This method is quicker than using traditional + * modelToView(int) calls, as the entire bounding box isn't + * computed. + */ + @Override + public int yForLine(int line) throws BadLocationException { + Rectangle alloc = getVisibleEditorRect(); + if (alloc!=null) { + RSTAView view = (RSTAView)getRootView(textArea).getView(0); + return view.yForLine(alloc, line); + } + return -1; + } + + + /** + * Returns the y-coordinate of the line containing a specified offset.

+ * + * This is faster than calling modelToView(offs).y, so it is + * preferred if you do not need the actual bounding box. + */ + @Override + public int yForLineContaining(int offs) throws BadLocationException { + Rectangle alloc = getVisibleEditorRect(); + if (alloc!=null) { + RSTAView view = (RSTAView)getRootView(textArea).getView(0); + return view.yForLineContaining(alloc, offs); + } + return -1; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ar.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ar.properties new file mode 100644 index 0000000..aefa81c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ar.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=\u0637\u0648\u064a + +Action.ToggleCurrentFold.Name=\u063a\u064a\u0651\u0631 \u0648\u0636\u0639\u064a\u0629 \u0627\u0644\u0637\u0648\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=\u0645\u0646 \u0623\u062c\u0644 \u062a\u063a\u064a\u064a\u0631 \u0648\u0636\u0639\u064a\u0629 \u0627\u0644\u0637\u0648\u064a\u0629 \u0641\u064a \u0645\u0648\u0642\u0639 \u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u062d\u0627\u0644\u064a +Action.CollapseAllFolds.Name=\u0642\u0644\u0635 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u064a\u0627\u062a +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=\u0645\u0646 \u0623\u062c\u0644 \u062a\u0642\u0644\u064a\u0635 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u064a\u0627\u062a +Action.CollapseCommentFolds.Name=\u0642\u0644\u0635 \u062c\u0645\u064a\u0639 \u0627\u0644\u062a\u0639\u0644\u064a\u0642\u0627\u062a +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=\u0645\u0646 \u0623\u062c\u0644 \u062a\u0642\u0644\u064a\u0635 \u062c\u0645\u064a\u0639 \u0637\u064a\u0627\u062a \u0627\u0644\u062a\u0639\u0644\u064a\u0642\u0627\u062a +Action.ExpandAllFolds.Name=\u0648\u0633\u0639 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u064a\u0627\u062a +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=\u0645\u0646 \u0623\u062c\u0644 \u062a\u0648\u0633\u064a\u0639 \u062c\u0645\u064a\u0639 \u0627\u0644\u0637\u064a\u0627\u062a. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_de.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_de.properties new file mode 100644 index 0000000..06b1fe7 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_de.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Klappung + +Action.ToggleCurrentFold.Name=Aktuellen Block umschalten +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Schaltet den Block an der Position der Schreibmarke um. +Action.CollapseAllFolds.Name=Action.CollapseAllFolds.Name=Alle Bl\u00f6cke zuklappen +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Klappt alle Bl\u00f6cke zu. +Action.CollapseCommentFolds.Name=Alle Kommentarbl\u00f6cke zuklappen +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Klappt alle Kommentarbl\u00f6cke zu. +Action.ExpandAllFolds.Name=Alle Bl\u00f6cke aufklappen +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Klappt alle Bl\u00f6cke auf. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_es.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_es.properties new file mode 100644 index 0000000..3fc3e58 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_es.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Folding + +Action.ToggleCurrentFold.Name=Ver Fold (solapa) actual +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Mostrar el fold en la posici\u00f3n del cursor +Action.CollapseAllFolds.Name=Ocultar todos los folds +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Oculta todos los folds +Action.CollapseCommentFolds.Name=Ocultar todos los comentarios +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Oculta todos los comentarios +Action.ExpandAllFolds.Name=Expandir todos las solapas (folds) +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Expande todas las solapas (folds) diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_fr.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_fr.properties new file mode 100644 index 0000000..1362d49 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_fr.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Pliage + +Action.ToggleCurrentFold.Name=Active ou d\u00e9sactive le pli actuel +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Active ou d\u00e9sactive le pli \u00e0 la position du curseur. +Action.CollapseAllFolds.Name=Comprimer tous les plis +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Comprime tous les plis. +Action.CollapseCommentFolds.Name=Comprimer tous les commentaires +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Comprime tous les plis commentaires. +Action.ExpandAllFolds.Name=D\u00e9comprimer tous les plis +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=D\u00e9comprime tous les plis. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_hu.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_hu.properties new file mode 100644 index 0000000..2d36e8f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_hu.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=\u00d6sszevon\u00e1s + +Action.ToggleCurrentFold.Name=A jelenlegi \u00f6sszevon\u00e1s megjelen\u00edt\u00e9se/rejt\u00e9se. +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Megjelen\u00edti, illetve elt\u00fcnteti az \u00f6sszevon\u00e1st a kurzor poz\u00edci\u00f3j\u00e1ban. +Action.CollapseAllFolds.Name=\u00d6sszevon\u00e1sok rejt\u00e9se. +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=\u00d6sszevon\u00e1sok rejt\u00e9se. +Action.CollapseCommentFolds.Name=Az \u00f6sszes megjegyz\u00e9s elrejt\u00e9se +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Megjegyz\u00e9s \u00f6sszevon\u00e1sok rejt\u00e9se. +Action.ExpandAllFolds.Name=\u00d6sszevon\u00e1sok kiterjeszt\u00e9se +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=\u00d6sszevon\u00e1sok kiterjeszt\u00e9se. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_in.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_in.properties new file mode 100644 index 0000000..26d2181 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_in.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Folding + +Action.ToggleCurrentFold.Name=Toggle Current Fold +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Toggles the fold at the caret position. +Action.CollapseAllFolds.Name=Collapse All Folds +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Collapses all folds. +Action.CollapseCommentFolds.Name=Collapse All Comments +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Collapses all comment folds. +Action.ExpandAllFolds.Name=Expand All Folds +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Expands all folds. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_it.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_it.properties new file mode 100644 index 0000000..1ac2556 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_it.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Folding + +Action.ToggleCurrentFold.Name=Imposta il fold corrente +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Imposta il fold alla posizione corrente. +Action.CollapseAllFolds.Name=Raggruppa tutti i fold +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Raggruppa tutti i fold. +Action.CollapseCommentFolds.Name=Raggruppa tutti i commenti +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Raggruppa tutti i commenti. +Action.ExpandAllFolds.Name=Espandi tutti i fold +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Espandi tutti i fold. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ja.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ja.properties new file mode 100644 index 0000000..3b6f19f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ja.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=\u30d5\u30a9\u30eb\u30c7\u30a3\u30f3\u30b0 + +Action.ToggleCurrentFold.Name=\u30ad\u30e3\u30ec\u30c3\u30c8\u5074\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u30c8\u30b0\u30eb\u3059\u308b\u3002 +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=\u30ad\u30e3\u30ec\u30c3\u30c8\u5074\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u30c8\u30b0\u30eb\u3059\u308b\u3002 +Action.CollapseAllFolds.Name=\u5168\u3066\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u6298\u308a\u305f\u305f\u3080 +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=\u5168\u3066\u306e\u3075\u3049\u308b\u3069\u3092\u6298\u308a\u305f\u305f\u3080 +Action.CollapseCommentFolds.Name=\u5168\u3066\u306e\u30b3\u30e1\u30f3\u30c8\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u6298\u308a\u305f\u305f\u3080 +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=\u5168\u3066\u306e\u30b3\u30e1\u30f3\u30c8\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u6298\u308a\u305f\u305f\u3080 +Action.ExpandAllFolds.Name=\u5168\u3066\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u5c55\u958b\u3059\u308b +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=\u5168\u3066\u306e\u30d5\u30a9\u30eb\u30c9\u3092\u5c55\u958b\u3059\u308b diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ko.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ko.properties new file mode 100644 index 0000000..7b4412f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ko.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=\ucf54\ub4dc \uac10\ucd94\uae30 + +Action.ToggleCurrentFold.Name=\ud604\uc7ac \ucf54\ub4dc \uac10\ucd94\uae30 \ud1a0\uae00 +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=\uce90\ub7ff \uc704\uce58\uc5d0\uc11c \ucf54\ub4dc \uac10\ucd94\uae30\ub97c \ud1a0\uae00\ud569\ub2c8\ub2e4. +Action.CollapseAllFolds.Name=\ubaa8\ub4e0 \ucf54\ub4dc \uac10\ucd94\uae30 \uc811\uae30 +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=\ubaa8\ub4e0 \ucf54\ub4dc \uac10\ucd94\uae30\ub97c \uc811\uc2b5\ub2c8\ub2e4. +Action.CollapseCommentFolds.Name=\ubaa8\ub4e0 \uc8fc\uc11d \uac10\ucd94\uae30 \uc811\uae30 +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=\ubaa8\ub4e0 \uc8fc\uc11d \uac10\ucd94\uae30\ub97c \uc811\uc2b5\ub2c8\ub2e4. +Action.ExpandAllFolds.Name=\ubaa8\ub4e0 \ucf54\ub4dc \uac10\ucd94\uae30 \ud3bc\uce58\uae30 +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=\ubaa8\ub4e0 \ucf54\ub4dc \uac10\ucd94\uae30\ub97c \ud3bc\uce69\ub2c8\ub2e4. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_nl.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_nl.properties new file mode 100644 index 0000000..26d2181 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_nl.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Folding + +Action.ToggleCurrentFold.Name=Toggle Current Fold +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Toggles the fold at the caret position. +Action.CollapseAllFolds.Name=Collapse All Folds +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Collapses all folds. +Action.CollapseCommentFolds.Name=Collapse All Comments +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Collapses all comment folds. +Action.ExpandAllFolds.Name=Expand All Folds +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Expands all folds. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pl.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pl.properties new file mode 100644 index 0000000..f437ef4 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pl.properties @@ -0,0 +1,15 @@ +ContextMenu.Folding=Zwijanie + +Action.ToggleCurrentFold.Name=Reguluj zwini\u0119cie +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Ustawia zwini\u0119cie na pozycji karetki. +Action.CollapseAllFolds.Name=Zwi\u0144 wszystkie zwini\u0119cia +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Zwija wszystkie zwini\u0119cia. +Action.CollapseCommentFolds.Name=Zwi\u0144 wszystkie komentarze +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Zwija wszystkie zwini\u0119cia z komentarzami. +Action.ExpandAllFolds.Name=Rozwi\u0144 zwini\u0119cia +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Rozwija wszystkie zwini\u0119cia. + diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pt_BR.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pt_BR.properties new file mode 100644 index 0000000..94e099d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pt_BR.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Dobramento de c\u00f3digo + +Action.ToggleCurrentFold.Name=Alternar o dobramento atual +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Alterna o dobramento na posi\u00e7\u00e3o do cursor. +Action.CollapseAllFolds.Name=Recolher o dobramento de c\u00f3digo +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Recolher o dobramento de c\u00f3digo. +Action.CollapseCommentFolds.Name=Recolher o dobramento de coment\u00e1rios +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Recolher o dobramento de coment\u00e1rios. +Action.ExpandAllFolds.Name=Expandir o dobramento de c\u00f3digo +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Expandir o dobramento de c\u00f3digo. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ru.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ru.properties new file mode 100644 index 0000000..4095dea --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ru.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 + +Action.ToggleCurrentFold.Name=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u043b\u043e\u043a +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0443\u0440\u0441\u043e\u0440\u0430 +Action.CollapseAllFolds.Name=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0438 +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 +Action.CollapseCommentFolds.Name=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0431\u043b\u043e\u043a\u0430 +Action.ExpandAllFolds.Name=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0438 +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_tr.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_tr.properties new file mode 100644 index 0000000..b60e397 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_tr.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Katlama + +Action.ToggleCurrentFold.Name=\u015eu Anki Kat\u0131 Geni\u015flet/Katla +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=\u0130\u015faret\u00e7inin bulundu\u011fu kat\u0131 geni\u015fletir/katlar. +Action.CollapseAllFolds.Name=T\u00fcm Katlar\u0131 Katla +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=T\u00fcm katlar\u0131 katlar. +Action.CollapseCommentFolds.Name=T\u00fcm Yorumlar\u0131 Katla +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=T\u00fcm yorumlar\u0131 katlar. +Action.ExpandAllFolds.Name=T\u00fcm Katlar\u0131 Geni\u015flet +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=T\u00fcm katlar\u0131 geni\u015fletir. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_CN.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_CN.properties new file mode 100644 index 0000000..17d973c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_CN.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=\u6298\u53e0 + +Action.ToggleCurrentFold.Name=\u6298\u53e0/\u5f00\u542f\u672c\u533a\u6bb5 +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=\u6298\u53e0/\u5f00\u542f\u63d2\u5165\u7b26\u6240\u5728\u4f4d\u7f6e. +Action.CollapseAllFolds.Name=\u53d6\u6d88\u6240\u6709\u4ee3\u7801\u6298\u53e0 +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=\u53d6\u6d88\u6240\u6709\u4ee3\u7801\u6298\u53e0. +Action.CollapseCommentFolds.Name=\u53d6\u6d88\u6ce8\u91ca\u4ee3\u7801\u6298\u53e0 +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=\u53d6\u6d88\u6ce8\u91ca\u4ee3\u7801\u6298\u53e0. +Action.ExpandAllFolds.Name=\u6253\u5f00\u6240\u6709\u4ee3\u7801\u6298\u53e0 +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=\u6253\u5f00\u6240\u6709\u4ee3\u7801\u6298\u53e0. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_TW.properties b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_TW.properties new file mode 100644 index 0000000..26d2181 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_TW.properties @@ -0,0 +1,14 @@ +ContextMenu.Folding=Folding + +Action.ToggleCurrentFold.Name=Toggle Current Fold +Action.ToggleCurrentFold.Mnemonic=F +Action.ToggleCurrentFold.Desc=Toggles the fold at the caret position. +Action.CollapseAllFolds.Name=Collapse All Folds +Action.CollapseAllFolds.Mnemonic=O +Action.CollapseAllFolds.Desc=Collapses all folds. +Action.CollapseCommentFolds.Name=Collapse All Comments +Action.CollapseCommentFolds.Mnemonic=C +Action.CollapseCommentFolds.Desc=Collapses all comment folds. +Action.ExpandAllFolds.Name=Expand All Folds +Action.ExpandAllFolds.Mnemonic=E +Action.ExpandAllFolds.Desc=Expands all folds. diff --git a/src/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java b/src/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java new file mode 100644 index 0000000..0e0e633 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java @@ -0,0 +1,1566 @@ +/* + * 08/06/2004 + * + * RSyntaxUtilities.java - Utility methods used by RSyntaxTextArea and its + * views. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Container; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.Toolkit; +import java.util.Map; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import javax.swing.JLabel; +import javax.swing.JTextArea; +import javax.swing.JViewport; +import javax.swing.SwingConstants; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.Caret; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Position; +import javax.swing.text.Segment; +import javax.swing.text.TabExpander; +import javax.swing.text.View; + +import org.fife.ui.rsyntaxtextarea.TokenUtils.TokenSubList; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; +import org.fife.ui.rtextarea.Gutter; +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextScrollPane; + + +/** + * Utility methods used by RSyntaxTextArea and its associated + * classes. + * + * @author Robert Futrell + * @version 0.2 + */ +public final class RSyntaxUtilities implements SwingConstants { + + /** + * Integer constant representing a Windows-variant OS. + */ + public static final int OS_WINDOWS = 1; + + /** + * Integer constant representing Mac OS X. + */ + public static final int OS_MAC_OSX = 2; + + /** + * Integer constant representing Linux. + */ + public static final int OS_LINUX = 4; + + /** + * Integer constant representing an "unknown" OS. 99.99% of the + * time, this means some UNIX variant (AIX, SunOS, etc.). + */ + public static final int OS_OTHER = 8; + + /** + * Used for the color of hyperlinks when a LookAndFeel uses light text + * against a dark background. + */ + private static final Color LIGHT_HYPERLINK_FG = new Color(0xd8ffff); + + private static final int OS = getOSImpl(); + + //private static final int DIGIT_MASK = 1; + private static final int LETTER_MASK = 2; + //private static final int WHITESPACE_MASK = 4; + //private static final int UPPER_CASE_MASK = 8; + private static final int HEX_CHARACTER_MASK = 16; + private static final int LETTER_OR_DIGIT_MASK = 32; + private static final int BRACKET_MASK = 64; + private static final int JAVA_OPERATOR_MASK = 128; + + /** + * A lookup table used to quickly decide if a 16-bit Java char is a + * US-ASCII letter (A-Z or a-z), a digit, a whitespace char (either space + * (0x0020) or tab (0x0009)), etc. This method should be faster + * than Character.isLetter, Character.isDigit, + * and Character.isWhitespace because we know we are dealing + * with ASCII chars and so don't have to worry about code planes, etc. + */ + private static final int[] DATA_TABLE = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, // 0-15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 + 4, 128, 0, 0, 0, 128, 128, 0, 64, 64, 128, 128, 0, 128, 0, 128, // 32-47 + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 128, 0, 128, 128, 128, 128, // 48-63 + 0, 58, 58, 58, 58, 58, 58, 42, 42, 42, 42, 42, 42, 42, 42, 42, // 64-79 + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 64, 0, 64, 128, 0, // 80-95 + 0, 50, 50, 50, 50, 50, 50, 34, 34, 34, 34, 34, 34, 34, 34, 34, // 96-111 + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 64, 128, 64, 128, 0, // 112-127 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 240-255. + }; + + /** + * Used in bracket matching methods. + */ + private static Segment charSegment = new Segment(); + + /** + * Used in token list manipulation methods. + */ + private static final TokenImpl TEMP_TOKEN = new TokenImpl(); + + /** + * Used internally. + */ + private static final char[] JS_KEYWORD_RETURN = { 'r', 'e', 't', 'u', 'r', 'n' }; + private static final char[] JS_AND = { '&', '&' }; + private static final char[] JS_OR = { '|', '|' }; + + /** + * Used internally. + */ + private static final String BRACKETS = "{([})]"; + + + /** + * An unused constructor to prevent instantiation, and keep static analysis + * tools happy. + */ + private RSyntaxUtilities() { // NOSONAR + // Private constructor to prevent instantiation. + } + + + /** + * Returns a string with characters that are special to HTML (such as + * <, > and &) replaced + * by their HTML escape sequences. + * + * @param s The input string. + * @param newlineReplacement What to replace newline characters with. + * If this is null, they are simply removed. + * @param inPreBlock Whether this HTML will be in within pre + * tags. If this is true, spaces will be kept as-is; + * otherwise, they will be converted to " ". + * @return The escaped version of s. + */ + public static String escapeForHtml(String s, + String newlineReplacement, boolean inPreBlock) { + + if (s==null) { + return null; + } + if (newlineReplacement==null) { + newlineReplacement = ""; + } + final String tabString = " "; + boolean lastWasSpace = false; + + StringBuilder sb = new StringBuilder(); + + for (int i=0; i': + sb.append(">"); + lastWasSpace = false; + break; + case '\'': + sb.append("'"); + lastWasSpace = false; + break; + case '"': + sb.append("""); + lastWasSpace = false; + break; + case '/': // OWASP-recommended even though unnecessary + sb.append("/"); + lastWasSpace = false; + break; + default: + sb.append(ch); + lastWasSpace = false; + break; + } + } + + return sb.toString(); + + } + + + /** + * Returns the rendering hints for text that will most accurately reflect + * those of the native windowing system. + * + * @return The rendering hints, or null if they cannot be + * determined. + */ + public static Map getDesktopAntiAliasHints() { + return (Map)Toolkit.getDefaultToolkit(). + getDesktopProperty("awt.font.desktophints"); + } + + + /** + * Returns the color to use for the line underneath a folded region line. + * + * @param textArea The text area. + * @return The color to use. + */ + public static Color getFoldedLineBottomColor(RSyntaxTextArea textArea) { + Color color = Color.gray; + Gutter gutter = RSyntaxUtilities.getGutter(textArea); + if (gutter!=null) { + color = gutter.getFoldIndicatorForeground(); + } + return color; + } + + + /** + * Returns the gutter component of the scroll pane containing a text + * area, if any. + * + * @param textArea The text area. + * @return The gutter, or null if the text area is not in + * an {@link RTextScrollPane}. + * @see RTextScrollPane#getGutter() + */ + public static Gutter getGutter(RTextArea textArea) { + Gutter gutter = null; + Container parent = textArea.getParent(); + if (parent instanceof JViewport) { + parent = parent.getParent(); + if (parent instanceof RTextScrollPane) { + RTextScrollPane sp = (RTextScrollPane)parent; + gutter = sp.getGutter(); // Should always be non-null + } + } + return gutter; + } + + + /** + * Returns the color to use for hyperlink-style components. This method + * will return Color.blue unless it appears that the current + * LookAndFeel uses light text on a dark background, in which case a + * brighter alternative is returned. + * + * @return The color to use for hyperlinks. + * @see #isLightForeground(Color) + */ + public static Color getHyperlinkForeground() { + + // This property is defined by all standard LaFs, even Nimbus (!), + // but you never know what crazy LaFs there are... + Color fg = UIManager.getColor("Label.foreground"); + if (fg==null) { + fg = new JLabel().getForeground(); + } + + return isLightForeground(fg) ? LIGHT_HYPERLINK_FG : Color.blue; + + } + + + /** + * Returns the leading whitespace of a string. + * + * @param text The String to check. + * @return The leading whitespace. + * @see #getLeadingWhitespace(Document, int) + */ + public static String getLeadingWhitespace(String text) { + int count = 0; + int len = text.length(); + while (countoffs is not a valid offset + * in the document. + * @see #getLeadingWhitespace(String) + */ + public static String getLeadingWhitespace(Document doc, int offs) + throws BadLocationException { + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Element elem = root.getElement(line); + int startOffs = elem.getStartOffset(); + int endOffs = elem.getEndOffset() - 1; + String text = doc.getText(startOffs, endOffs-startOffs); + return getLeadingWhitespace(text); + } + + + private static Element getLineElem(Document d, int offs) { + Element map = d.getDefaultRootElement(); + int index = map.getElementIndex(offs); + Element elem = map.getElement(index); + if ((offs>=elem.getStartOffset()) && (offsp0, as this is + * the character where the x-pixel value is 0. + * + * @param textArea The text area containing the text. + * @param s A segment in which to load the line. This is passed in so we + * don't have to reallocate a new Segment for each + * call. + * @param p0 The starting position in the physical line in the document. + * @param p1 The position for which to get the bounding box in the view. + * @param e How to expand tabs. + * @param rect The rectangle whose x- and width-values are changed to + * represent the bounding box of p1. This is reused + * to keep from needlessly reallocating Rectangles. + * @param x0 The x-coordinate (pixel) marking the left-hand border of the + * text. This is useful if the text area has a border, for example. + * @return The bounding box in the view of the character p1. + * @throws BadLocationException If p0 or p1 is + * not a valid location in the specified text area's document. + * @throws IllegalArgumentException If p0 and p1 + * are not on the same line. + */ + public static Rectangle getLineWidthUpTo(RSyntaxTextArea textArea, + Segment s, int p0, int p1, + TabExpander e, Rectangle rect, + int x0) + throws BadLocationException { + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + + // Ensure p0 and p1 are valid document positions. + if (p0<0) { + throw new BadLocationException("Invalid document position", p0); + } + else if (p1>doc.getLength()) { + throw new BadLocationException("Invalid document position", p1); + } + + // Ensure p0 and p1 are in the same line, and get the start/end + // offsets for that line. + Element map = doc.getDefaultRootElement(); + int lineNum = map.getElementIndex(p0); + // We do ">1" because p1 might be the first position on the next line + // or the last position on the previous one. + // if (lineNum!=map.getElementIndex(p1)) + if (Math.abs(lineNum-map.getElementIndex(p1))>1) { + throw new IllegalArgumentException("p0 and p1 are not on the " + + "same line (" + p0 + ", " + p1 + ")."); + } + + // Get the token list. + Token t = doc.getTokenListForLine(lineNum); + + // Modify the token list 't' to begin at p0 (but still have correct + // token types, etc.), and get the x-location (in pixels) of the + // beginning of this new token list. + TokenSubList subList = TokenUtils.getSubTokenList(t, p0, e, textArea, + 0, TEMP_TOKEN); + t = subList.tokenList; + + rect = t.listOffsetToView(textArea, e, p1, x0, rect); + return rect; + + } + + + /** + * Returns the location of the bracket paired with the one at the current + * caret position. + * + * @param textArea The text area. + * @param input A point to use as the return value. If this is + * null, a new object is created and returned. + * @return A point representing the matched bracket info. The "x" field + * is the offset of the bracket at the caret position (either just + * before or just after the caret), and the "y" field is the offset + * of the matched bracket. Both "x" and "y" will be + * -1 if there isn't a matching bracket (or the caret + * isn't on a bracket). + */ + public static Point getMatchingBracketPosition(RSyntaxTextArea textArea, + Point input) { + + if (input==null) { + input = new Point(); + } + input.setLocation(-1, -1); + + try { + + // Actually position just BEFORE caret. + int caretPosition = textArea.getCaretPosition() - 1; + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + char bracket = 0; + + // If the caret was at offset 0, we can't check "to its left." + if (caretPosition>=0) { + bracket = doc.charAt(caretPosition); + } + + // Try to match a bracket "to the right" of the caret if one + // was not found on the left. + int index = BRACKETS.indexOf(bracket); + if (index==-1 && caretPosition

    + *
  • SwingConstants.WEST + *
  • SwingConstants.EAST + *
  • SwingConstants.NORTH + *
  • SwingConstants.SOUTH + *
+ * @return the location within the model that best represents the next + * location visual position + * @exception BadLocationException + * @exception IllegalArgumentException if direction + * doesn't have one of the legal values above + */ + public static int getNextVisualPositionFrom(int pos, Position.Bias b, + Shape a, int direction, + Position.Bias[] biasRet, View view) + throws BadLocationException { + + RSyntaxTextArea target = (RSyntaxTextArea)view.getContainer(); + biasRet[0] = Position.Bias.Forward; + + // Do we want the "next position" above, below, to the left or right? + switch (direction) { + + case NORTH: + case SOUTH: + if (pos == -1) { + pos = (direction == NORTH) ? + Math.max(0, view.getEndOffset() - 1) : + view.getStartOffset(); + break; + } + Caret c = (target != null) ? target.getCaret() : null; + // YECK! Ideally, the x location from the magic caret + // position would be passed in. + Point mcp; + if (c != null) { + mcp = c.getMagicCaretPosition(); + } + else { + mcp = null; + } + int x; + if (mcp == null) { + Rectangle loc = target.modelToView(pos); + x = (loc == null) ? 0 : loc.x; + } + else { + x = mcp.x; + } + if (direction == NORTH) { + pos = getPositionAbove(target,pos,x,(TabExpander)view); + } + else { + pos = getPositionBelow(target,pos,x,(TabExpander)view); + } + break; + + case WEST: + int endOffs = view.getEndOffset(); + if(pos == -1) { + pos = Math.max(0, endOffs - 1); + } + else { + pos = Math.max(0, pos - 1); + if (target.isCodeFoldingEnabled()) { + int last = pos==endOffs-1 ? target.getLineCount()-1 : + target.getLineOfOffset(pos+1); + int current = target.getLineOfOffset(pos); + if (last!=current) { // If moving up a line... + FoldManager fm = target.getFoldManager(); + if (fm.isLineHidden(current)) { + while (--current>0 && fm.isLineHidden(current)); + pos = target.getLineEndOffset(current) - 1; + } + } + } + } + break; + + case EAST: + if(pos == -1) { + pos = view.getStartOffset(); + } + else { + pos = Math.min(pos + 1, view.getDocument().getLength()); + if (target.isCodeFoldingEnabled()) { + int last = pos==0 ? 0 : target.getLineOfOffset(pos-1); + int current = target.getLineOfOffset(pos); + if (last!=current) { // If moving down a line... + FoldManager fm = target.getFoldManager(); + if (fm.isLineHidden(current)) { + int lineCount = target.getLineCount(); + while (++current -1) { + os = OS_WINDOWS; + } + else if (osName.indexOf("mac os x") > -1) { + os = OS_MAC_OSX; + } + else if (osName.indexOf("linux") > -1) { + os = OS_LINUX; + } + else { + os = OS_OTHER; + } + } + return os; + } + + + /** + * Returns the flags necessary to create a {@link Pattern}. + * + * @param matchCase Whether the pattern should be case sensitive. + * @param others Any other flags. This may be 0. + * @return The flags. + */ + public static int getPatternFlags(boolean matchCase, int others) { + if (!matchCase) { + others |= Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE; + } + return others; + } + + + /** + * Determines the position in the model that is closest to the given + * view location in the row above. The component given must have a + * size to compute the result. If the component doesn't have a size + * a value of -1 will be returned. + * + * @param c the editor + * @param offs the offset in the document >= 0 + * @param x the X coordinate >= 0 + * @return the position >= 0 if the request can be computed, otherwise + * a value of -1 will be returned. + * @exception BadLocationException if the offset is out of range + */ + public static int getPositionAbove(RSyntaxTextArea c, int offs, + float x, TabExpander e) throws BadLocationException { + + TokenOrientedView tov = (TokenOrientedView)e; + Token token = tov.getTokenListForPhysicalLineAbove(offs); + if (token==null) { + return -1; + } + else if (token.getType()==Token.NULL) { + int line = c.getLineOfOffset(offs); // Sure to be >0 ?? + return c.getLineStartOffset(line-1); + } + + else { + return token.getListOffset(c, e, c.getMargin().left, x); + } + + } + + + /** + * Determines the position in the model that is closest to the given + * view location in the row below. The component given must have a + * size to compute the result. If the component doesn't have a size + * a value of -1 will be returned. + * + * @param c the editor + * @param offs the offset in the document >= 0 + * @param x the X coordinate >= 0 + * @return the position >= 0 if the request can be computed, otherwise + * a value of -1 will be returned. + * @exception BadLocationException if the offset is out of range + */ + public static int getPositionBelow(RSyntaxTextArea c, int offs, + float x, TabExpander e) throws BadLocationException { + + TokenOrientedView tov = (TokenOrientedView)e; + Token token = tov.getTokenListForPhysicalLineBelow(offs); + if (token==null) { + return -1; + } + else if (token.getType()==Token.NULL) { + int line = c.getLineOfOffset(offs); // Sure to be > c.getLineCount()-1 ?? +// return c.getLineStartOffset(line+1); +FoldManager fm = c.getFoldManager(); +line = fm.getVisibleLineBelow(line); +return c.getLineStartOffset(line); + } + + else { + return token.getListOffset(c, e, c.getMargin().left, x); + } + + } + + + /** + * Returns the last non-whitespace, non-comment token, starting with the + * specified line. + * + * @param doc The document. + * @param line The line at which to start looking. + * @return The last non-whitespace, non-comment token, or null + * if there isn't one. + * @see #getNextImportantToken(Token, RSyntaxTextArea, int) + * @see #getPreviousImportantTokenFromOffs(RSyntaxDocument, int) + */ + public static Token getPreviousImportantToken(RSyntaxDocument doc, + int line) { + if (line<0) { + return null; + } + Token t = doc.getTokenListForLine(line); + if (t!=null) { + t = t.getLastNonCommentNonWhitespaceToken(); + if (t!=null) { + return t; + } + } + return getPreviousImportantToken(doc, line-1); + } + + + /** + * Returns the last non-whitespace, non-comment token, before the + * specified offset. + * + * @param doc The document. + * @param offs The ending offset for the search. + * @return The last non-whitespace, non-comment token, or null + * if there isn't one. + * @see #getPreviousImportantToken(RSyntaxDocument, int) + * @see #getNextImportantToken(Token, RSyntaxTextArea, int) + */ + public static Token getPreviousImportantTokenFromOffs( + RSyntaxDocument doc, int offs) { + + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Token t = doc.getTokenListForLine(line); + + // Check line containing offs + Token target = null; + while (t!=null && t.isPaintable() && !t.containsPosition(offs)) { + if (!t.isCommentOrWhitespace()) { + target = t; + } + t = t.getNextToken(); + } + + // Check previous line(s) + if (target==null) { + target = RSyntaxUtilities.getPreviousImportantToken(doc, line-1); + } + + return target; + + } + + + /** + * Returns the token at the specified offset. + * + * @param textArea The text area. + * @param offset The offset of the token. + * @return The token, or null if the offset is not valid. + * @see #getTokenAtOffset(RSyntaxDocument, int) + * @see #getTokenAtOffset(Token, int) + */ + public static Token getTokenAtOffset(RSyntaxTextArea textArea, + int offset) { + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + return RSyntaxUtilities.getTokenAtOffset(doc, offset); + } + + + /** + * Returns the token at the specified offset. + * + * @param doc The document. + * @param offset The offset of the token. + * @return The token, or null if the offset is not valid. + * @see #getTokenAtOffset(RSyntaxTextArea, int) + * @see #getTokenAtOffset(Token, int) + */ + public static Token getTokenAtOffset(RSyntaxDocument doc, + int offset) { + Element root = doc.getDefaultRootElement(); + int lineIndex = root.getElementIndex(offset); + Token t = doc.getTokenListForLine(lineIndex); + return RSyntaxUtilities.getTokenAtOffset(t, offset); + } + + + /** + * Returns the token at the specified index, or null if + * the given offset isn't in this token list's range.
+ * Note that this method does NOT check to see if tokenList + * is null; callers should check for themselves. + * + * @param tokenList The list of tokens in which to search. + * @param offset The offset at which to get the token. + * @return The token at offset, or null if + * none of the tokens are at that offset. + * @see #getTokenAtOffset(RSyntaxTextArea, int) + * @see #getTokenAtOffset(RSyntaxDocument, int) + */ + public static Token getTokenAtOffset(Token tokenList, int offset) { + for (Token t=tokenList; t!=null && t.isPaintable(); t=t.getNextToken()){ + if (t.containsPosition(offset)) { + return t; + } + } + return null; + } + + + /** + * Returns the end of the word at the given offset. + * + * @param textArea The text area. + * @param offs The offset into the text area's content. + * @return The end offset of the word. + * @throws BadLocationException If offs is invalid. + * @see #getWordStart(RSyntaxTextArea, int) + */ + public static int getWordEnd(RSyntaxTextArea textArea, int offs) + throws BadLocationException { + + Document doc = textArea.getDocument(); + int endOffs = textArea.getLineEndOffsetOfCurrentLine(); + int lineEnd = Math.min(endOffs, doc.getLength()); + if (offs == lineEnd) { // End of the line. + return offs; + } + + String s = doc.getText(offs, lineEnd-offs-1); + if (s!=null && s.length()>0) { // Should always be true + int i = 0; + int count = s.length(); + char ch = s.charAt(i); + if (Character.isWhitespace(ch)) { + while (ioffs is invalid. + * @see #getWordEnd(RSyntaxTextArea, int) + */ + public static int getWordStart(RSyntaxTextArea textArea, int offs) + throws BadLocationException { + + Document doc = textArea.getDocument(); + Element line = getLineElem(doc, offs); + if (line == null) { + throw new BadLocationException("No word at " + offs, offs); + } + + int lineStart = line.getStartOffset(); + if (offs==lineStart) { // Start of the line. + return offs; + } + + int endOffs = Math.min(offs+1, doc.getLength()); + String s = doc.getText(lineStart, endOffs-lineStart); + if(s != null && s.length() > 0) { + int i = s.length() - 1; + char ch = s.charAt(i); + if (Character.isWhitespace(ch)) { + while (i>0 && Character.isWhitespace(s.charAt(i-1))) { + i--; + } + offs = lineStart + i; + } + else if (Character.isLetterOrDigit(ch)) { + while (i>0 && Character.isLetterOrDigit(s.charAt(i-1))) { + i--; + } + offs = lineStart + i; + } + + } + + return offs; + + } + + + /** + * Determines the width of the given token list taking tabs + * into consideration. This is implemented in a 1.1 style coordinate + * system where ints are used and 72dpi is assumed.

+ * + * This method also assumes that the passed-in token list begins at + * x-pixel 0 in the view (for tab purposes). + * + * @param tokenList The tokenList list representing the text. + * @param textArea The text area in which this token list resides. + * @param e The tab expander. This value cannot be null. + * @return The width of the token list, in pixels. + */ + public static float getTokenListWidth(Token tokenList, + RSyntaxTextArea textArea, + TabExpander e) { + return getTokenListWidth(tokenList, textArea, e, 0); + } + + + /** + * Determines the width of the given token list taking tabs + * into consideration. This is implemented in a 1.1 style coordinate + * system where ints are used and 72dpi is assumed.

+ * + * @param tokenList The token list list representing the text. + * @param textArea The text area in which this token list resides. + * @param e The tab expander. This value cannot be null. + * @param x0 The x-pixel coordinate of the start of the token list. + * @return The width of the token list, in pixels. + * @see #getTokenListWidthUpTo + */ + public static float getTokenListWidth(final Token tokenList, + RSyntaxTextArea textArea, + TabExpander e, float x0) { + float width = x0; + for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { + width += t.getWidth(textArea, e, width); + } + return width - x0; + } + + + /** + * Determines the width of the given token list taking tabs into + * consideration and only up to the given index in the document + * (exclusive). + * + * @param tokenList The token list representing the text. + * @param textArea The text area in which this token list resides. + * @param e The tab expander. This value cannot be null. + * @param x0 The x-pixel coordinate of the start of the token list. + * @param upTo The document position at which you want to stop, + * exclusive. If this position is before the starting position + * of the token list, a width of 0 will be + * returned; similarly, if this position comes after the entire + * token list, the width of the entire token list is returned. + * @return The width of the token list, in pixels, up to, but not + * including, the character at position upTo. + * @see #getTokenListWidth + */ + public static float getTokenListWidthUpTo(final Token tokenList, + RSyntaxTextArea textArea, TabExpander e, + float x0, int upTo) { + float width = 0; + for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { + if (t.containsPosition(upTo)) { + return width + t.getWidthUpTo(upTo-t.getOffset(), textArea, e, + x0+width); + } + width += t.getWidth(textArea, e, x0+width); + } + return width; + } + + + /** + * Returns whether or not this character is a "bracket" to be matched by + * such programming languages as C, C++, and Java. + * + * @param ch The character to check. + * @return Whether or not the character is a "bracket" - one of '(', ')', + * '[', ']', '{', and '}'. + */ + public static boolean isBracket(char ch) { + // We need the first condition as it might be that ch>255, and thus + // not in our table. '}' is the highest-valued char in the bracket + // set. + return ch<='}' && (DATA_TABLE[ch]&BRACKET_MASK)>0; + } + + + /** + * Returns whether or not a character is a digit (0-9). + * + * @param ch The character to check. + * @return Whether or not the character is a digit. + */ + public static boolean isDigit(char ch) { + // We do it this way as we'd need to do two conditions anyway (first + // to check that ch<255 so it can index into our table, then whether + // that table position has the digit mask). + return ch>='0' && ch<='9'; + } + + + /** + * Returns whether or not this character is a hex character. This method + * accepts both upper- and lower-case letters a-f. + * + * @param ch The character to check. + * @return Whether or not the character is a hex character 0-9, a-f, or + * A-F. + */ + public static boolean isHexCharacter(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). 'f' is the highest-valued + // char that is a valid hex character. + return (ch<='f') && (DATA_TABLE[ch]&HEX_CHARACTER_MASK)>0; + } + + + /** + * Returns whether a character is a Java operator. Note that C and C++ + * operators are the same as Java operators. + * + * @param ch The character to check. + * @return Whether or not the character is a Java operator. + */ + public static boolean isJavaOperator(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). '~' is the highest-valued + // char that is a valid Java operator. + return (ch<='~') && (DATA_TABLE[ch]&JAVA_OPERATOR_MASK)>0; + } + + + /** + * Returns whether a character is a US-ASCII letter (A-Z or a-z). + * + * @param ch The character to check. + * @return Whether or not the character is a US-ASCII letter. + */ + public static boolean isLetter(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). + return (ch<='z') && (DATA_TABLE[ch]&LETTER_MASK)>0; + } + + + /** + * Returns whether or not a character is a US-ASCII letter or a digit. + * + * @param ch The character to check. + * @return Whether or not the character is a US-ASCII letter or a digit. + */ + public static boolean isLetterOrDigit(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). + return (ch<='z') && (DATA_TABLE[ch]&LETTER_OR_DIGIT_MASK)>0; + } + + + /** + * Returns whether the specified color is "light" to use as a foreground. + * Colors that return true indicate that the current Look and + * Feel probably uses light text colors on a dark background. + * + * @param fg The foreground color. + * @return Whether it is a "light" foreground color. + * @see #getHyperlinkForeground() + */ + public static boolean isLightForeground(Color fg) { + return fg.getRed()>0xa0 && fg.getGreen()>0xa0 && fg.getBlue()>0xa0; + } + + + /** + * Returns whether the specified token is a single non-word char (e.g. not + * in [A-Za-z]. This is a HACK to work around the fact that + * many standard token makers return things like semicolons and periods as + * {@link Token#IDENTIFIER}s just to make the syntax highlighting coloring + * look a little better. + * + * @param t The token to check. This cannot be null. + * @return Whether the token is a single non-word char. + */ + public static boolean isNonWordChar(Token t) { + return t.length()==1 && !RSyntaxUtilities.isLetter(t.charAt(0)); + } + + + /** + * Returns whether or not a character is a whitespace character (either + * a space ' ' or tab '\t'). This checks for the Unicode character values + * 0x0020 and 0x0009. + * + * @param ch The character to check. + * @return Whether or not the character is a whitespace character. + */ + public static boolean isWhitespace(char ch) { + // We do it this way as we'd need to do two conditions anyway (first + // to check that ch<255 so it can index into our table, then whether + // that table position has the whitespace mask). + return ch==' ' || ch=='\t'; + } + + + /** + * Repaints the gutter in a text area's scroll pane, if necessary. + * + * @param textArea The text area. + */ + public static void possiblyRepaintGutter(RTextArea textArea) { + Gutter gutter = RSyntaxUtilities.getGutter(textArea); + if (gutter!=null) { + gutter.repaint(); + } + } + + + /** + * Returns whether a regular expression token can follow the specified + * token in JavaScript. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one in + * JavaScript. + */ + public static boolean regexCanFollowInJavaScript(Token t) { + char ch; + // We basically try to mimic Eclipse's JS editor's behavior here. + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' || + ch=='!' || + ch=='&' + )) || + /* Operators "==", "===", "!=", "!==", "&&", "||" */ + (t.getType()==Token.OPERATOR && + (t.charAt(t.length()-1)=='=' || + t.is(JS_AND) || t.is(JS_OR))) || + t.is(Token.RESERVED_WORD_2, JS_KEYWORD_RETURN); + } + + + /** + * Selects a range of text in a text component. If the new selection is + * outside of the previous viewable rectangle, then the view is centered + * around the new selection. + * + * @param textArea The text component whose selection is to be centered. + * @param range The range to select. + */ + public static void selectAndPossiblyCenter(JTextArea textArea, + DocumentRange range, boolean select) { + + int start = range.getStartOffset(); + int end = range.getEndOffset(); + + boolean foldsExpanded = false; + if (textArea instanceof RSyntaxTextArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + FoldManager fm = rsta.getFoldManager(); + if (fm.isCodeFoldingSupportedAndEnabled()) { + foldsExpanded = fm.ensureOffsetNotInClosedFold(start); + foldsExpanded |= fm.ensureOffsetNotInClosedFold(end); + } + } + + if (select) { + textArea.setSelectionStart(start); + textArea.setSelectionEnd(end); + } + + Rectangle r = null; + try { + r = textArea.modelToView(start); + if (r==null) { // Not yet visible; i.e. JUnit tests + return; + } + if (end!=start) { + r = r.union(textArea.modelToView(end)); + } + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + if (select) { + textArea.setSelectionStart(start); + textArea.setSelectionEnd(end); + } + return; + } + + Rectangle visible = textArea.getVisibleRect(); + + // If the new selection is already in the view, don't scroll, + // as that is visually jarring. + if (!foldsExpanded && visible.contains(r)) { + if (select) { + textArea.setSelectionStart(start); + textArea.setSelectionEnd(end); + } + return; + } + + visible.x = r.x - (visible.width - r.width) / 2; + visible.y = r.y - (visible.height - r.height) / 2; + + Rectangle bounds = textArea.getBounds(); + Insets i = textArea.getInsets(); + bounds.x = i.left; + bounds.y = i.top; + bounds.width -= i.left + i.right; + bounds.height -= i.top + i.bottom; + + if (visible.x < bounds.x) { + visible.x = bounds.x; + } + + if (visible.x + visible.width > bounds.x + bounds.width) { + visible.x = bounds.x + bounds.width - visible.width; + } + + if (visible.y < bounds.y) { + visible.y = bounds.y; + } + + if (visible.y + visible.height > bounds.y + bounds.height) { + visible.y = bounds.y + bounds.height - visible.height; + } + + textArea.scrollRectToVisible(visible); + + } + + + /** + * If the character is an upper-case US-ASCII letter, it returns the + * lower-case version of that letter; otherwise, it just returns the + * character. + * + * @param ch The character to lower-case (if it is a US-ASCII upper-case + * character). + * @return The lower-case version of the character. + */ + public static char toLowerCase(char ch) { + // We can logical OR with 32 because A-Z are 65-90 in the ASCII table + // and none of them have the 6th bit (32) set, and a-z are 97-122 in + // the ASCII table, which is 32 over from A-Z. + // We do it this way as we'd need to do two conditions anyway (first + // to check that ch<255 so it can index into our table, then whether + // that table position has the upper-case mask). + if (ch>='A' && ch<='Z') { + return (char)(ch | 0x20); + } + return ch; + } + + + /** + * Creates a regular expression pattern that matches a "wildcard" pattern. + * + * @param wildcard The wildcard pattern. + * @param matchCase Whether the pattern should be case sensitive. + * @param escapeStartChar Whether to escape a starting '^' + * character. + * @return The pattern. + */ + public static Pattern wildcardToPattern(String wildcard, boolean matchCase, + boolean escapeStartChar) { + + int flags = RSyntaxUtilities.getPatternFlags(matchCase, 0); + + StringBuilder sb = new StringBuilder(); + for (int i=0; i0 || escapeStartChar) { + sb.append('\\'); + } + sb.append('^'); + break; + case '\\': + case '.': case '|': + case '+': case '-': + case '$': + case '[': case ']': + case '{': case '}': + case '(': case ')': + sb.append('\\').append(ch); + break; + default: + sb.append(ch); + break; + } + } + + Pattern p = null; + try { + p = Pattern.compile(sb.toString(), flags); + } catch (PatternSyntaxException pse) { + pse.printStackTrace(); + p = Pattern.compile(".+"); + } + + return p; + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RTfToText.java b/src/org/fife/ui/rsyntaxtextarea/RTfToText.java new file mode 100644 index 0000000..67e6a4a --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RTfToText.java @@ -0,0 +1,237 @@ +/* + * 07/28/2008 + * + * RtfToText.java - Returns the plain text version of RTF documents. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringReader; + + +/** + * Gets the plain text version of RTF documents.

+ * + * This is used by RtfTransferable to return the plain text + * version of the transferable when the receiver does not support RTF. + * + * @author Robert Futrell + * @version 1.0 + */ +final class RtfToText { + + private Reader r; + private StringBuilder sb; + private StringBuilder controlWord; + private int blockCount; + private boolean inControlWord; + + + /** + * Private constructor. + * + * @param r The reader to read RTF text from. + */ + private RtfToText(Reader r) { + this.r = r; + sb = new StringBuilder(); + controlWord = new StringBuilder(); + blockCount = 0; + inControlWord = false; + } + + + /** + * Converts the RTF text read from this converter's Reader + * into plain text. It is the caller's responsibility to close the + * reader after this method is called. + * + * @return The plain text. + * @throws IOException If an IO error occurs. + */ + private String convert() throws IOException { + + // Skip over first curly brace as the whole file is in '{' and '}' + int i = r.read(); + if (i!='{') { + throw new IOException("Invalid RTF file"); + } + + while ((i=r.read())!=-1) { + + char ch = (char)i; + switch (ch) { + case '{': + if (inControlWord && controlWord.length()==0) { // "\{" + sb.append('{'); + controlWord.setLength(0); + inControlWord = false; + } + else { + blockCount++; + } + break; + case '}': + if (inControlWord && controlWord.length()==0) { // "\}" + sb.append('}'); + controlWord.setLength(0); + inControlWord = false; + } + else { + blockCount--; + } + break; + case '\\': + if (blockCount==0) { + if (inControlWord) { + if (controlWord.length()==0) { // "\\" + sb.append('\\'); + controlWord.setLength(0); + inControlWord = false; + } + else { + endControlWord(); + inControlWord = true; + } + } + else { + inControlWord = true; + } + } + break; + case ' ': + if (blockCount==0) { + if (inControlWord) { + endControlWord(); + } + else { + sb.append(' '); + } + } + break; + case '\r': + case '\n': + if (blockCount==0) { + if (inControlWord) { + endControlWord(); + } + // Otherwise, ignore + } + break; + default: + if (blockCount==0) { + if (inControlWord) { + controlWord.append(ch); + } + else { + sb.append(ch); + } + } + break; + } + + } + + return sb.toString(); + + } + + + /** + * Ends a control word. Checks whether it is a common one that affects + * the plain text output (such as "par" or "tab") + * and updates the text buffer accordingly. + */ + private void endControlWord() { + String word = controlWord.toString(); + if ("par".equals(word)) { + sb.append('\n'); + } + else if ("tab".equals(word)) { + sb.append('\t'); + } + controlWord.setLength(0); + inControlWord = false; + } + + + /** + * Converts the contents of the specified byte array representing + * an RTF document into plain text. + * + * @param rtf The byte array representing an RTF document. + * @return The contents of the RTF document, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(byte[] rtf) throws IOException { + return getPlainText(new ByteArrayInputStream(rtf)); + } + + + /** + * Converts the contents of the specified RTF file to plain text. + * + * @param file The RTF file to convert. + * @return The contents of the file, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(File file) throws IOException { + return getPlainText(new BufferedReader(new FileReader(file))); + } + + + /** + * Converts the contents of the specified input stream to plain text. + * The input stream will be closed when this method returns. + * + * @param in The input stream to convert. This will be closed when this + * method returns. + * @return The contents of the stream, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(InputStream in) throws IOException { + return getPlainText(new InputStreamReader(in, "US-ASCII")); + } + + + /** + * Converts the contents of the specified Reader to plain text. + * + * @param r The Reader. This will be closed when this method + * returns. + * @return The contents of the Reader, in plain text. + * @throws IOException If an IO error occurs. + */ + private static String getPlainText(Reader r) throws IOException { + try { + RtfToText converter = new RtfToText(r); + return converter.convert(); + } finally { + r.close(); + } + } + + + /** + * Converts the contents of the specified String to plain text. + * + * @param rtf A string whose contents represent an RTF document. + * @return The contents of the String, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(String rtf) throws IOException { + return getPlainText(new StringReader(rtf)); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RtfGenerator.java b/src/org/fife/ui/rsyntaxtextarea/RtfGenerator.java new file mode 100644 index 0000000..f9503d5 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RtfGenerator.java @@ -0,0 +1,483 @@ +/* + * 07/28/2008 + * + * RtfGenerator.java - Generates RTF via a simple Java API. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Toolkit; +import java.util.ArrayList; +import java.util.List; + +import org.fife.ui.rtextarea.RTextArea; + + +/** + * Generates RTF text via a simple Java API.

+ * + * The following RTF features are supported: + *

    + *
  • Fonts + *
  • Font sizes + *
  • Foreground and background colors + *
  • Bold, italic, and underline + *
+ * + * The RTF generated isn't really "optimized," but it will do, especially for + * small amounts of text, such as what's common when copy-and-pasting. It + * tries to be sufficient for the use case of copying syntax highlighted + * code: + *
    + *
  • It assumes that tokens changing foreground color often is fairly + * common. + *
  • It assumes that background highlighting is fairly uncommon. + *
+ * + * @author Robert Futrell + * @version 1.0 + */ +public class RtfGenerator { + + private List fontList; + private List colorList; + private StringBuilder document; + private boolean lastWasControlWord; + private int lastFontIndex; + private int lastFGIndex; + private boolean lastBold; + private boolean lastItalic; + private int lastFontSize; + + /** + * Java2D assumes a 72 dpi screen resolution, but on Windows the screen + * resolution is either 96 dpi or 120 dpi, depending on your font display + * settings. This is an attempt to make the RTF generated match the + * size of what's displayed in the RSyntaxTextArea. + */ + private int screenRes; + + /** + * The default font size for RTF. This is point size, in half + * points. + */ + private static final int DEFAULT_FONT_SIZE = 12;//24; + + + /** + * Constructor. + */ + public RtfGenerator() { + fontList = new ArrayList(1); // Usually only 1. + colorList = new ArrayList(1); // Usually only 1. + document = new StringBuilder(); + reset(); + } + + + /** + * Adds a newline to the RTF document. + * + * @see #appendToDoc(String, Font, Color, Color) + */ + public void appendNewline() { + document.append("\\par"); + document.append('\n'); // Just for ease of reading RTF. + lastWasControlWord = false; + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param fg The foreground of the text. If this is null, + * the default foreground color is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @see #appendNewline() + */ + public void appendToDoc(String text, Font f, Color fg, Color bg) { + appendToDoc(text, f, fg, bg, false); + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @param underline Whether the text should be underlined. + * @see #appendNewline() + */ + public void appendToDocNoFG(String text, Font f, Color bg, + boolean underline) { + appendToDoc(text, f, null, bg, underline, false); + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param fg The foreground of the text. If this is null, + * the default foreground color is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @param underline Whether the text should be underlined. + * @see #appendNewline() + */ + public void appendToDoc(String text, Font f, Color fg, Color bg, + boolean underline) { + appendToDoc(text, f, fg, bg, underline, true); + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param fg The foreground of the text. If this is null, + * the default foreground color is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @param underline Whether the text should be underlined. + * @param setFG Whether the foreground specified by fg should + * be honored (if it is non-null). + * @see #appendNewline() + */ + public void appendToDoc(String text, Font f, Color fg, Color bg, + boolean underline, boolean setFG) { + + if (text!=null) { + + // Set font to use, if different from last addition. + int fontIndex = f==null ? 0 : (getFontIndex(fontList, f)+1); + if (fontIndex!=lastFontIndex) { + document.append("\\f").append(fontIndex); + lastFontIndex = fontIndex; + lastWasControlWord = true; + } + + // Set styles to use. + if (f!=null) { + int fontSize = fixFontSize(f.getSize2D()*2); // Half points! + if (fontSize!=lastFontSize) { + document.append("\\fs").append(fontSize); + lastFontSize = fontSize; + lastWasControlWord = true; + } + if (f.isBold()!=lastBold) { + document.append(lastBold ? "\\b0" : "\\b"); + lastBold = !lastBold; + lastWasControlWord = true; + } + if (f.isItalic()!=lastItalic) { + document.append(lastItalic ? "\\i0" : "\\i"); + lastItalic = !lastItalic; + lastWasControlWord = true; + } + } + else { // No font specified - assume neither bold nor italic. + if (lastFontSize!=DEFAULT_FONT_SIZE) { + document.append("\\fs").append(DEFAULT_FONT_SIZE); + lastFontSize = DEFAULT_FONT_SIZE; + lastWasControlWord = true; + } + if (lastBold) { + document.append("\\b0"); + lastBold = false; + lastWasControlWord = true; + } + if (lastItalic) { + document.append("\\i0"); + lastItalic = false; + lastWasControlWord = true; + } + } + if (underline) { + document.append("\\ul"); + lastWasControlWord = true; + } + + // Set the foreground color. + if (setFG) { + int fgIndex = 0; + if (fg!=null) { // null => fg color index 0 + fgIndex = getColorIndex(colorList, fg)+1; + } + if (fgIndex!=lastFGIndex) { + document.append("\\cf").append(fgIndex); + lastFGIndex = fgIndex; + lastWasControlWord = true; + } + } + + // Set the background color. + if (bg!=null) { + int pos = getColorIndex(colorList, bg); + document.append("\\highlight").append(pos+1); + lastWasControlWord = true; + } + + if (lastWasControlWord) { + document.append(' '); // Delimiter + lastWasControlWord = false; + } + escapeAndAdd(document, text); + + // Reset everything that was set for this text fragment. + if (bg!=null) { + document.append("\\highlight0"); + lastWasControlWord = true; + } + if (underline) { + document.append("\\ul0"); + lastWasControlWord = true; + } + + } + + } + + + /** + * Appends some text to a buffer, with special care taken for special + * characters as defined by the RTF spec. + * + *
    + *
  • All tab characters are replaced with the string + * "\tab" + *
  • '\', '{' and '}' are changed to "\\", "\{" and "\}" + *
+ * + * @param text The text to append (with tab chars substituted). + * @param sb The buffer to append to. + */ + private void escapeAndAdd(StringBuilder sb, String text) { + int count = text.length(); + for (int i=0; i + * + * Java2D assumes 72 dpi. On systems with larger dpi (Windows, GTK, etc.), + * font rendering will appear too small if we simply return a Java "Font" + * object's getSize() value. We need to adjust it for the screen + * resolution. + * + * @param pointSize A Java Font's point size, as returned from + * getSize2D(). + * @return The font point size, adjusted for the current screen resolution. + * This will allow other applications to render fonts the same + * size as they appear in the Java application. + */ + private int fixFontSize(float pointSize) { + if (screenRes!=72) { // Java2D assumes 72 dpi + pointSize = Math.round(pointSize*72f/screenRes); + } + return (int)pointSize; + } + + + /** + * Returns the index of the specified item in a list. If the item + * is not in the list, it is added, and its new index is returned. + * + * @param list The list (possibly) containing the item. + * @param item The item to get the index of. + * @return The index of the item. + */ + private static int getColorIndex(List list, Color item) { + int pos = list.indexOf(item); + if (pos==-1) { + list.add(item); + pos = list.size()-1; + } + return pos; + } + + + private String getColorTableRtf() { + + // Example: + // "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue255; }" + + StringBuilder sb = new StringBuilder(); + + sb.append("{\\colortbl ;"); + for (Color c : colorList) { + sb.append("\\red").append(c.getRed()); + sb.append("\\green").append(c.getGreen()); + sb.append("\\blue").append(c.getBlue()); + sb.append(';'); + } + sb.append("}"); + + return sb.toString(); + + } + + + /** + * Returns the index of the specified font in a list of fonts. This + * method only checks for a font by its family name; its attributes such + * as bold and italic are ignored.

+ * + * If the font is not in the list, it is added, and its new index is + * returned. + * + * @param list The list (possibly) containing the font. + * @param font The font to get the index of. + * @return The index of the font. + */ + private static int getFontIndex(List list, Font font) { + String fontName = font.getFamily(); + for (int i=0; iString. + */ + public String getRtf() { + + StringBuilder sb = new StringBuilder(); + sb.append("{"); + + // Header + sb.append("\\rtf1\\ansi\\ansicpg1252"); + sb.append("\\deff0"); // First font in font table is the default + sb.append("\\deflang1033"); + sb.append("\\viewkind4"); // "Normal" view + sb.append("\\uc\\pard\\f0"); + sb.append("\\fs20"); // Font size in half-points (default 24) + sb.append(getFontTableRtf()).append('\n'); + sb.append(getColorTableRtf()).append('\n'); + + // Content + sb.append(document); + + sb.append("}"); + + //System.err.println("*** " + sb.length()); + return sb.toString(); + + } + + + /** + * Resets this generator. All document information and content is + * cleared. + */ + public void reset() { + fontList.clear(); + colorList.clear(); + document.setLength(0); + lastWasControlWord = false; + lastFontIndex = 0; + lastFGIndex = 0; + lastBold = false; + lastItalic = false; + lastFontSize = DEFAULT_FONT_SIZE; + screenRes = Toolkit.getDefaultToolkit().getScreenResolution(); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/RtfTransferable.java b/src/org/fife/ui/rsyntaxtextarea/RtfTransferable.java new file mode 100644 index 0000000..e4efda5 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/RtfTransferable.java @@ -0,0 +1,96 @@ +/* + * 07/28/2008 + * + * RtfTransferable.java - Used during drag-and-drop to represent RTF text. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringReader; + + +/** + * Object used during copy/paste and DnD operations to represent RTF text. + * It can return the text being moved as either RTF or plain text. This + * class is basically the same as + * java.awt.datatransfer.StringSelection, except that it can also + * return the text as RTF. + * + * @author Robert Futrell + * @version 1.0 + */ +class RtfTransferable implements Transferable { + + /** + * The RTF data, in bytes (the RTF is 7-bit ascii). + */ + private byte[] data; + + + /** + * The "flavors" the text can be returned as. + */ + private static final DataFlavor[] FLAVORS = { + new DataFlavor("text/rtf", "RTF"), + DataFlavor.stringFlavor, + DataFlavor.plainTextFlavor // deprecated + }; + + + /** + * Constructor. + * + * @param data The RTF data. + */ + RtfTransferable(byte[] data) { + this.data = data; + } + + + @Override + public Object getTransferData(DataFlavor flavor) + throws UnsupportedFlavorException, IOException { + if (flavor.equals(FLAVORS[0])) { // RTF + return new ByteArrayInputStream(data==null ? new byte[0] : data); + } + else if (flavor.equals(FLAVORS[1])) { // stringFlavor + return data==null ? "" : RtfToText.getPlainText(data); + } + else if (flavor.equals(FLAVORS[2])) { // plainTextFlavor (deprecated) + String text = ""; // Valid if data==null + if (data!=null) { + text = RtfToText.getPlainText(data); + } + return new StringReader(text); + } + else { + throw new UnsupportedFlavorException(flavor); + } + } + + + @Override + public DataFlavor[] getTransferDataFlavors() { + return FLAVORS.clone(); + } + + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + for (int i=0; i + * + * This class must be used as a LayerPainter. + * + * @author Robert Futrell + * @version 1.0 + */ +public class SquiggleUnderlineHighlightPainter + extends ChangeableHighlightPainter { + + private static final int AMT = 2; + + /** + * Constructor. + * + * @param color The color of the squiggle. This cannot be + * null. + */ + public SquiggleUnderlineHighlightPainter(Color color) { + super(color); + setPaint(color); + } + + + /** + * Paints a portion of a highlight. + * + * @param g the graphics context + * @param offs0 the starting model offset >= 0 + * @param offs1 the ending model offset >= offs1 + * @param bounds the bounding box of the view, which is not + * necessarily the region to paint. + * @param c the editor + * @param view View painting for + * @return region drawing occurred in + */ + @Override + public Shape paintLayer(Graphics g, int offs0, int offs1, + Shape bounds, JTextComponent c, View view) { + + g.setColor((Color)getPaint()); + + if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { + // Contained in view, can just use bounds. + Rectangle alloc; + if (bounds instanceof Rectangle) { + alloc = (Rectangle)bounds; + } + else { + alloc = bounds.getBounds(); + } + paintSquiggle(g, alloc); + return alloc; + } + + // Otherwise, should only render part of View. + try { + // --- determine locations --- + Shape shape = view.modelToView(offs0, Position.Bias.Forward, + offs1,Position.Bias.Backward, + bounds); + Rectangle r = (shape instanceof Rectangle) ? + (Rectangle)shape : shape.getBounds(); + paintSquiggle(g, r); + return r; + } catch (BadLocationException e) { + e.printStackTrace(); // can't render + } + + // Only if exception + return null; + + } + + + /** + * Paints a squiggle underneath text in the specified rectangle. + * + * @param g The graphics context with which to paint. + * @param r The rectangle containing the text. + */ + protected void paintSquiggle(Graphics g, Rectangle r) { + int x = r.x; + int y = r.y + r.height - AMT; + int delta = -AMT; + while (xRSyntaxTextArea has a corresponding Style; this + * Style tells us the following things: + * + *

    + *
  • What foreground color to use for tokens of this type.
  • + *
  • What background color to use.
  • + *
  • The font to use.
  • + *
  • Whether the token should be underlined.
  • + *
+ * + * @author Robert Futrell + * @version 0.6 + */ +@SuppressWarnings({ "checkstyle:visibilitymodifier" }) +public class Style implements Cloneable { + + public static final Color DEFAULT_FOREGROUND = Color.BLACK; + public static final Color DEFAULT_BACKGROUND = null; + public static final Font DEFAULT_FONT = null; + + public Color foreground; + public Color background; + public boolean underline; + public Font font; + + public FontMetrics fontMetrics; + + + /** + * Creates a new style defaulting to black foreground, no + * background, and no styling. + */ + public Style() { + this(DEFAULT_FOREGROUND); + } + + + /** + * Creates a new style with the specified foreground and no styling. + * + * @param fg The foreground color to use. + */ + public Style(Color fg) { + this(fg, DEFAULT_BACKGROUND); + } + + + /** + * Creates a new style with the specified colors and no styling. + * + * @param fg The foreground color to use. + * @param bg The background color to use. + */ + public Style(Color fg, Color bg) { + this(fg, bg, DEFAULT_FONT); + } + + + /** + * Creates a new style. + * + * @param fg The foreground color to use. + * @param bg The background color to use. + * @param font The font for this syntax scheme. + */ + public Style(Color fg, Color bg, Font font) { + this(fg, bg, font, false); + } + + + /** + * Creates a new style. + * + * @param fg The foreground color to use. + * @param bg The background color to use. + * @param font The font for this syntax scheme. + * @param underline Whether or not to underline tokens with this style. + */ + public Style(Color fg, Color bg, Font font, boolean underline) { + foreground = fg; + background = bg; + this.font = font; + this.underline = underline; + this.fontMetrics = font==null ? null : + new JPanel().getFontMetrics(font); // Default, no rendering hints! + } + + + /** + * Returns whether or not two (possibly null) objects are + * equal. + */ + private boolean areEqual(Object o1, Object o2) { + return (o1==null && o2==null) || (o1!=null && o1.equals(o2)); + } + + + /** + * Returns a deep copy of this object. + * + * @return The copy. + */ + @Override + public Object clone() { + Style clone = null; + try { + clone = (Style)super.clone(); + } catch (CloneNotSupportedException cnse) { // Never happens + cnse.printStackTrace(); + return null; + } + clone.foreground = foreground; + clone.background = background; + clone.font = font; + clone.underline = underline; + clone.fontMetrics = fontMetrics; + return clone; + } + + + /** + * Returns whether or not two syntax schemes are equal. + * + * @param o2 The object with which to compare this syntax scheme. + * @return Whether or not these two syntax schemes represent the same + * scheme. + */ + @Override + public boolean equals(Object o2) { + if (o2 instanceof Style) { + Style ss2 = (Style)o2; + if (this.underline==ss2.underline && + areEqual(foreground, ss2.foreground) && + areEqual(background, ss2.background) && + areEqual(font, ss2.font) && + areEqual(fontMetrics, ss2.fontMetrics)) { + return true; + } + } + return false; + } + + + /** + * Computes the hash code to use when adding this syntax scheme to + * hash tables.

+ * + * This method is implemented, since {@link #equals(Object)} is implemented, + * to keep FindBugs happy. + * + * @return The hash code. + */ + @Override + public int hashCode() { + int hashCode = underline ? 1 : 0; + if (foreground!=null) { + hashCode ^= foreground.hashCode(); + } + if (background!=null) { + hashCode ^= background.hashCode(); + } + return hashCode; + } + + + /** + * Returns a string representation of this style. + * + * @return A string representation of this style. + */ + @Override + public String toString() { + return "[Style: foreground: " + foreground + + ", background: " + background + ", underline: " + + underline + ", font: " + font + "]"; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java b/src/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java new file mode 100644 index 0000000..454a3a2 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java @@ -0,0 +1,320 @@ +/* + * 03/08/2004 + * + * SyntaxConstants.java - Constants used by RSyntaxTextArea and friends. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + + +/** + * Constants that define the different programming languages understood by + * RSyntaxTextArea. These constants are the values you can pass + * to {@link RSyntaxTextArea#setSyntaxEditingStyle(String)} to get syntax + * highlighting.

+ * + * By default, all RSyntaxTextAreas can render all of these + * languages, but this can be changed (the list can be augmented or completely + * overwritten) on a per-text area basis. What languages can be rendered is + * actually managed by the {@link TokenMakerFactory} installed on the text + * area's {@link RSyntaxDocument}. By default, all + * RSyntaxDocumenets have a factory installed capable of handling + * all of these languages. + * + * @author Robert Futrell + * @version 1.0 + */ +public interface SyntaxConstants { + + /** + * Style meaning don't syntax highlight anything. + */ + String SYNTAX_STYLE_NONE = "text/plain"; + + + /** + * Style for highlighting ActionScript. + */ + String SYNTAX_STYLE_ACTIONSCRIPT = "text/actionscript"; + + + /** + * Style for highlighting x86 assembler. + */ + String SYNTAX_STYLE_ASSEMBLER_X86 = "text/asm"; + + + /** + * Style for highlighting BBCode. + */ + String SYNTAX_STYLE_BBCODE = "text/bbcode"; + + + /** + * Style for highlighting C. + */ + String SYNTAX_STYLE_C = "text/c"; + + + /** + * Style for highlighting Clojure. + */ + String SYNTAX_STYLE_CLOJURE = "text/clojure"; + + + /** + * Style for highlighting C++. + */ + String SYNTAX_STYLE_CPLUSPLUS = "text/cpp"; + + + /** + * Style for highlighting C#. + */ + String SYNTAX_STYLE_CSHARP = "text/cs"; + + + /** + * Style for highlighting CSS. + */ + String SYNTAX_STYLE_CSS = "text/css"; + + + /** + * Syntax style for highlighting D. + */ + String SYNTAX_STYLE_D = "text/d"; + + + /** + * Syntax style for highlighting Dockerfiles. + */ + String SYNTAX_STYLE_DOCKERFILE = "text/dockerfile"; + + + /** + * Style for highlighting Dart. + */ + String SYNTAX_STYLE_DART = "text/dart"; + + + /** + * Style for highlighting Delphi/Pascal. + */ + String SYNTAX_STYLE_DELPHI = "text/delphi"; + + + /** + * Style for highlighting DTD files. + */ + String SYNTAX_STYLE_DTD = "text/dtd"; + + + /** + * Style for highlighting Fortran. + */ + String SYNTAX_STYLE_FORTRAN = "text/fortran"; + + + /** + * Style for highlighting Groovy. + */ + String SYNTAX_STYLE_GROOVY = "text/groovy"; + + + /** + * Style for highlighting hosts files. + */ + String SYNTAX_STYLE_HOSTS = "text/hosts"; + + + /** + * Style for highlighting .htaccess files. + */ + String SYNTAX_STYLE_HTACCESS = "text/htaccess"; + + + /** + * Style for highlighting HTML. + */ + String SYNTAX_STYLE_HTML = "text/html"; + + + /** + * Style for highlighting INI files. + */ + String SYNTAX_STYLE_INI = "text/ini"; + + + /** + * Style for highlighting Java. + */ + String SYNTAX_STYLE_JAVA = "text/java"; + + + /** + * Style for highlighting Java. + */ + String SYNTAX_STYLE_JAVA_DISASSEMBLE = "text/javaassembly"; + + + /** + * Style for highlighting JavaScript. + */ + String SYNTAX_STYLE_JAVASCRIPT = "text/javascript"; + + + /** + * Style for highlighting JSON. + */ + String SYNTAX_STYLE_JSON = "text/json"; + + + /** + * Style for highlighting .jshintrc files (JSON with comments, so can be + * used for other times when you want this behavior). + */ + String SYNTAX_STYLE_JSON_WITH_COMMENTS = "text/jshintrc"; + + + /** + * Style for highlighting JSP. + */ + String SYNTAX_STYLE_JSP = "text/jsp"; + + + /** + * Style for highlighting LaTeX. + */ + String SYNTAX_STYLE_LATEX = "text/latex"; + + + /** + * Style for highlighting Less. + */ + String SYNTAX_STYLE_LESS = "text/less"; + + + /** + * Style for highlighting Lisp. + */ + String SYNTAX_STYLE_LISP = "text/lisp"; + + + /** + * Style for highlighting Lua. + */ + String SYNTAX_STYLE_LUA = "text/lua"; + + + /** + * Style for highlighting makefiles. + */ + String SYNTAX_STYLE_MAKEFILE = "text/makefile"; + + + /** + * Style for highlighting MXML. + */ + String SYNTAX_STYLE_MXML = "text/mxml"; + + + /** + * Style for highlighting NSIS install scripts. + */ + String SYNTAX_STYLE_NSIS = "text/nsis"; + + + /** + * Style for highlighting Perl. + */ + String SYNTAX_STYLE_PERL = "text/perl"; + + + /** + * Style for highlighting PHP. + */ + String SYNTAX_STYLE_PHP = "text/php"; + + + /** + * Style for highlighting properties files. + */ + String SYNTAX_STYLE_PROPERTIES_FILE = "text/properties"; + + + /** + * Style for highlighting Python. + */ + String SYNTAX_STYLE_PYTHON = "text/python"; + + + /** + * Style for highlighting Ruby. + */ + String SYNTAX_STYLE_RUBY = "text/ruby"; + + + /** + * Style for highlighting SAS keywords. + */ + String SYNTAX_STYLE_SAS = "text/sas"; + + + /** + * Style for highlighting Scala. + */ + String SYNTAX_STYLE_SCALA = "text/scala"; + + + /** + * Style for highlighting SQL. + */ + String SYNTAX_STYLE_SQL = "text/sql"; + + + /** + * Style for highlighting Tcl. + */ + String SYNTAX_STYLE_TCL = "text/tcl"; + + + /** + * Style for highlighting TypeScript. + */ + String SYNTAX_STYLE_TYPESCRIPT = "text/typescript"; + + + /** + * Style for highlighting UNIX shell keywords. + */ + String SYNTAX_STYLE_UNIX_SHELL = "text/unix"; + + + /** + * Style for highlighting Visual Basic. + */ + String SYNTAX_STYLE_VISUAL_BASIC = "text/vb"; + + + /** + * Style for highlighting Windows batch files. + */ + String SYNTAX_STYLE_WINDOWS_BATCH = "text/bat"; + + + /** + * Style for highlighting XML. + */ + String SYNTAX_STYLE_XML = "text/xml"; + + + /** + * Syntax style for highlighting YAML. + */ + String SYNTAX_STYLE_YAML = "text/yaml"; + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java b/src/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java new file mode 100644 index 0000000..478ad46 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java @@ -0,0 +1,732 @@ +/* + * 02/26/2004 + * + * SyntaxScheme.java - The set of colors and tokens used by an RSyntaxTextArea + * to color tokens. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; + +import javax.swing.text.StyleContext; + +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.XMLReaderFactory; + + +/** + * The set of colors and styles used by an RSyntaxTextArea to + * color tokens.

+ * You can use this class to programmatically set the fonts and colors used in + * an RSyntaxTextArea, but for more powerful, externalized control, consider + * using {@link Theme}s instead. + * + * @author Robert Futrell + * @version 1.0 + * @see Theme + */ +@SuppressWarnings({ "checkstyle:magicnumber" }) +public class SyntaxScheme implements Cloneable, TokenTypes { + + private Style[] styles; + + private static final String VERSION = "*ver1"; + + + /** + * Creates a color scheme that either has all color values set to + * a default value or set to null. + * + * @param useDefaults If true, all color values will + * be set to default colors; if false, all colors + * will be initially null. + */ + public SyntaxScheme(boolean useDefaults) { + styles = new Style[DEFAULT_NUM_TOKEN_TYPES]; + if (useDefaults) { + restoreDefaults(null); + } + } + + + /** + * Creates a default color scheme. + * + * @param baseFont The base font to use. Keywords will be a bold version + * of this font, and comments will be an italicized version of this + * font. + */ + public SyntaxScheme(Font baseFont) { + this(baseFont, true); + } + + + /** + * Creates a default color scheme. + * + * @param baseFont The base font to use. Keywords will be a bold version + * of this font, and comments will be an italicized version of this + * font. + * @param fontStyles Whether bold and italic should be used in the scheme + * (vs. all tokens using a plain font). + */ + public SyntaxScheme(Font baseFont, boolean fontStyles) { + styles = new Style[DEFAULT_NUM_TOKEN_TYPES]; + restoreDefaults(baseFont, fontStyles); + } + + + /** + * Changes the "base font" for this syntax scheme. This is called by + * RSyntaxTextArea when its font changes via + * setFont(). This looks for tokens that use a derivative of + * the text area's old font (but bolded and/or italicized) and make them + * use the new font with those stylings instead. This is desirable because + * most programmers prefer a single font to be used in their text editor, + * but might want bold (say for keywords) or italics. + * + * @param old The old font of the text area. + * @param font The new font of the text area. + */ + void changeBaseFont(Font old, Font font) { + for (int i=0; itrue if this color scheme and + * otherScheme are the same scheme; + * false otherwise. + */ + @Override + public boolean equals(Object otherScheme) { + + // No need for null check; instanceof takes care of this for us, + // i.e. "if (!(null instanceof Foo))" evaluates to "true". + if (!(otherScheme instanceof SyntaxScheme)) { + return false; + } + + Style[] otherSchemes = ((SyntaxScheme)otherScheme).styles; + + int length = styles.length; + for (int i=0; i"$rrggbb". + * + * @param c The color. + * @return The string representation of the color. + */ + private static String getHexString(Color c) { + return "$" + Integer.toHexString((c.getRGB() & 0xffffff)+0x1000000). + substring(1); + } + + + /** + * Returns the specified style. + * + * @param index The index of the style. + * @return The style. + * @see #setStyle(int, Style) + * @see #getStyleCount() + */ + public Style getStyle(int index) { + return styles[index]; + } + + + /** + * Returns the number of styles. + * + * @return The number of styles. + * @see #getStyle(int) + */ + public int getStyleCount() { + return styles.length; + } + + + /** + * Used by third party implementors e.g. SquirreL SQL. Most applications do + * not need to call this method. + *

+ * Note that the returned array is not a copy of the style data; editing the + * array will modify the styles used by any RSyntaxTextArea + * using this scheme. + * + * @return The style array. + * @see #setStyles(Style[]) + */ + public Style[] getStyles() { + return styles; + } + + + /** + * This is implemented to be consistent with {@link #equals(Object)}. + * This is a requirement to keep FindBugs happy. + * + * @return The hash code for this object. + */ + @Override + public int hashCode() { + // Keep me fast. Iterating over *all* syntax schemes contained is + // probably much slower than a "bad" hash code here. + int hashCode = 0; + int count = styles.length; + for (int i=0; i + * + * Consider using the {@link Theme} class for saving and loading RSTA + * styles rather than using this API. + * + * @param baseFont The font to use as the "base" for the syntax scheme. + * If this is null, a default monospaced font is used. + * @param in The stream to load from. It is up to the caller to close this + * stream when they are done. + * @return The syntax scheme. + * @throws IOException If an IO error occurs. + */ + public static SyntaxScheme load(Font baseFont, InputStream in) + throws IOException { + if (baseFont==null) { + baseFont = RSyntaxTextArea.getDefaultFont(); + } + return SyntaxSchemeLoader.load(baseFont, in); + } + + + /** + * Loads a syntax highlighting color scheme from a string created from + * toCommaSeparatedString. This method is useful for saving + * and restoring color schemes.

+ * + * Consider using the {@link Theme} class for saving and loading RSTA + * styles rather than using this API. + * + * @param string A string generated from {@link #toCommaSeparatedString()}. + * @return A color scheme. + * @see #toCommaSeparatedString() + */ + public static SyntaxScheme loadFromString(String string) { + return loadFromString(string, DEFAULT_NUM_TOKEN_TYPES); + } + + + /** + * Loads a syntax highlighting color scheme from a string created from + * toCommaSeparatedString. This method is useful for saving + * and restoring color schemes.

+ * + * Consider using the {@link Theme} class for saving and loading RSTA + * styles rather than using this API. + * + * @param string A string generated from {@link #toCommaSeparatedString()}. + * @param tokenTypeCount The number of token types saved in this string. + * This should be the number of token types saved by your custom + * SyntaxScheme subclass, + * or {@link TokenTypes#DEFAULT_NUM_TOKEN_TYPES} if you used the + * standard implementation (which most people will). + * @return A color scheme. + * @see #loadFromString(String) + * @see #toCommaSeparatedString() + */ + public static SyntaxScheme loadFromString(String string, + int tokenTypeCount) { + + SyntaxScheme scheme = new SyntaxScheme(true); + + try { + + if (string!=null) { + + String[] tokens = string.split(",", -1); + + // Check the version string, use defaults if incompatible + if (tokens.length==0 || !VERSION.equals(tokens[0])) { + return scheme; // Still set to defaults + } + + int tokenCount = tokenTypeCount*7 + 1; // Version string + if (tokens.length!=tokenCount) { + throw new Exception( + "Not enough tokens in packed color scheme: expected " + + tokenCount + ", found " + tokens.length); + } + + // Use StyleContext to create fonts to get composite fonts for + // Asian glyphs. + StyleContext sc = StyleContext.getDefaultStyleContext(); + + // Loop through each token style. Format: + // "index,(fg|-),(bg|-),(t|f),((font,style,size)|(-,,))" + for (int i=0; i keep fg as null + fg = stringToColor(temp); + } + Color bg = null; temp = tokens[pos+2]; + if (!"-".equals(temp)) { // "-" => keep bg as null + bg = stringToColor(temp); + } + + // Check for "true" or "false" since we don't want to + // accidentally suck in an int representing the next + // packed color, and any string != "true" means false. + temp = tokens[pos+3]; + if (!"t".equals(temp) && !"f".equals(temp)) { + throw new Exception("Expected 't' or 'f', found " + temp); + } + boolean underline = "t".equals(temp); + + Font font = null; + String family = tokens[pos+4]; + if (!"-".equals(family)) { + font = sc.getFont(family, + Integer.parseInt(tokens[pos+5]), // style + Integer.parseInt(tokens[pos+6])); // size + } + scheme.styles[i] = new Style(fg, bg, font, underline); + + } + + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return scheme; + + } + + + void refreshFontMetrics(Graphics2D g2d) { + // It is assumed that any rendering hints are already applied to g2d. + for (int i=0; inull, then a default monospaced font is + * used. + */ + public void restoreDefaults(Font baseFont) { + restoreDefaults(baseFont, true); + } + + + /** + * Restores all colors and fonts to their default values. + * + * @param baseFont The base font to use when creating this scheme. If + * this is null, then a default monospaced font is + * used. + * @param fontStyles Whether bold and italic should be used in the scheme + * (vs. all tokens using a plain font). + */ + public void restoreDefaults(Font baseFont, boolean fontStyles) { + + // Colors used by tokens. + Color comment = new Color(0,128,0); + Color docComment = new Color(164,0,0); + Color markupComment = new Color(0, 96, 0); + Color keyword = Color.BLUE; + Color dataType = new Color(0,128,128); + Color function = new Color(173,128,0); + Color preprocessor = new Color(128,128,128); + Color operator = new Color(128, 64, 64); + Color regex = new Color(0,128,164); + Color variable = new Color(255,153,0); + Color literalNumber = new Color(100,0,200); + Color literalString = new Color(220,0,156); + Color error = new Color(148,148,0); + + // (Possible) special font styles for keywords and comments. + if (baseFont==null) { + baseFont = RSyntaxTextArea.getDefaultFont(); + } + Font commentFont = baseFont; + Font keywordFont = baseFont; + if (fontStyles) { + // WORKAROUND for Sun JRE bug 6282887 (Asian font bug in 1.4/1.5) + // That bug seems to be hidden now, see 6289072 instead. + StyleContext sc = StyleContext.getDefaultStyleContext(); + Font boldFont = sc.getFont(baseFont.getFamily(), Font.BOLD, + baseFont.getSize()); + Font italicFont = sc.getFont(baseFont.getFamily(), Font.ITALIC, + baseFont.getSize()); + commentFont = italicFont;//baseFont.deriveFont(Font.ITALIC); + keywordFont = boldFont;//baseFont.deriveFont(Font.BOLD); + } + + styles[COMMENT_EOL] = new Style(comment, null, commentFont); + styles[COMMENT_MULTILINE] = new Style(comment, null, commentFont); + styles[COMMENT_DOCUMENTATION] = new Style(docComment, null, commentFont); + styles[COMMENT_KEYWORD] = new Style(new Color(255,152,0), null, commentFont); + styles[COMMENT_MARKUP] = new Style(Color.gray, null, commentFont); + styles[RESERVED_WORD] = new Style(keyword, null, keywordFont); + styles[RESERVED_WORD_2] = new Style(keyword, null, keywordFont); + styles[FUNCTION] = new Style(function); + styles[LITERAL_BOOLEAN] = new Style(literalNumber); + styles[LITERAL_NUMBER_DECIMAL_INT] = new Style(literalNumber); + styles[LITERAL_NUMBER_FLOAT] = new Style(literalNumber); + styles[LITERAL_NUMBER_HEXADECIMAL] = new Style(literalNumber); + styles[LITERAL_STRING_DOUBLE_QUOTE] = new Style(literalString); + styles[LITERAL_CHAR] = new Style(literalString); + styles[LITERAL_BACKQUOTE] = new Style(literalString); + styles[DATA_TYPE] = new Style(dataType, null, keywordFont); + styles[VARIABLE] = new Style(variable); + styles[REGEX] = new Style(regex); + styles[ANNOTATION] = new Style(Color.gray); + styles[IDENTIFIER] = new Style(null); + styles[WHITESPACE] = new Style(Color.gray); + styles[SEPARATOR] = new Style(Color.RED); + styles[OPERATOR] = new Style(operator); + styles[PREPROCESSOR] = new Style(preprocessor); + styles[MARKUP_TAG_DELIMITER] = new Style(Color.RED); + styles[MARKUP_TAG_NAME] = new Style(Color.BLUE); + styles[MARKUP_TAG_ATTRIBUTE] = new Style(new Color(63,127,127)); + styles[MARKUP_TAG_ATTRIBUTE_VALUE]= new Style(literalString); + styles[MARKUP_COMMENT] = new Style(markupComment, null, commentFont); + styles[MARKUP_DTD] = new Style(function); + styles[MARKUP_PROCESSING_INSTRUCTION] = new Style(preprocessor); + styles[MARKUP_CDATA] = new Style(new Color(0xcc6600)); + styles[MARKUP_CDATA_DELIMITER] = new Style(new Color(0x008080)); + styles[MARKUP_ENTITY_REFERENCE] = new Style(dataType); + styles[ERROR_IDENTIFIER] = new Style(error); + styles[ERROR_NUMBER_FORMAT] = new Style(error); + styles[ERROR_STRING_DOUBLE] = new Style(error); + styles[ERROR_CHAR] = new Style(error); + + // Issue #34: If an application modifies TokenTypes to add new built-in + // token types, we'll get NPEs if not all styles are initialized. + for (int i=0; i$', it is assumed to be in hex, otherwise it is + * assumed to be decimal. So, for example, both of these: + *

+	 * "$00ff00"
+	 * "65280"
+	 * 
+ * will return new Color(0, 255, 0). + * + * @param s The string to evaluate. + * @return The color. + */ + private static Color stringToColor(String s) { + // Check for decimal as well as hex, for backward + // compatibility (fix from GwynEvans on forums) + char ch = s.charAt(0); + return new Color((ch=='$' || ch=='#') ? + Integer.parseInt(s.substring(1),16) : + Integer.parseInt(s)); + } + + + /** + * Returns this syntax highlighting scheme as a comma-separated list of + * values as follows: + *
    + *
  • If a color is non-null, it is added as a 24-bit integer + * of the form ((r<*lt;16) | (g<*lt;8) | (b)); if + * it is null, it is added as "-,". + *
  • The font and style (bold/italic) is added as an integer like so: + * "family, style, size". + *
  • The entire syntax highlighting scheme is thus one long string of + * color schemes of the format "i,[fg],[bg],uline,[style], + * where: + *
      + *
    • i is the index of the syntax scheme. + *
    • fg and bg are the foreground and background + * colors for the scheme, and may be null (represented by + * -). + *
    • uline is whether or not the font should be + * underlined, and is either t or f. + *
    • style is the family,style,size + * triplet described above. + *
    + *
+ * + * @return A string representing the rgb values of the colors. + * @see #loadFromString(String) + */ + public String toCommaSeparatedString() { + + StringBuilder sb = new StringBuilder(VERSION); + sb.append(','); + + for (int i=0; iSyntaxScheme from an XML file. + */ + private static class SyntaxSchemeLoader extends DefaultHandler { + + private Font baseFont; + private SyntaxScheme scheme; + + SyntaxSchemeLoader(Font baseFont) { + scheme = new SyntaxScheme(baseFont); + } + + public static SyntaxScheme load(Font baseFont, InputStream in) + throws IOException { + SyntaxSchemeLoader parser = null; + try { + XMLReader reader = XMLReaderFactory.createXMLReader(); + parser = new SyntaxSchemeLoader(baseFont); + parser.baseFont = baseFont; + reader.setContentHandler(parser); + InputSource is = new InputSource(in); + is.setEncoding("UTF-8"); + reader.parse(is); + } catch (SAXException se) { + throw new IOException(se.toString()); + } + return parser.scheme; + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attrs) { + + if ("style".equals(qName)) { + + String type = attrs.getValue("token"); + Field field = null; + try { + field = Token.class.getField(type); + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + System.err.println("Invalid token type: " + type); + return; + } + + if (field.getType()==int.class) { + + int index = 0; + try { + index = field.getInt(scheme); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return; + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + String fgStr = attrs.getValue("fg"); + if (fgStr!=null) { + Color fg = stringToColor(fgStr); + scheme.styles[index].foreground = fg; + } + + String bgStr = attrs.getValue("bg"); + if (bgStr!=null) { + Color bg = stringToColor(bgStr); + scheme.styles[index].background = bg; + } + + boolean styleSpecified = false; + boolean bold = false; + boolean italic = false; + String boldStr = attrs.getValue("bold"); + if (boldStr!=null) { + bold = Boolean.parseBoolean(boldStr); + styleSpecified = true; + } + String italicStr = attrs.getValue("italic"); + if (italicStr!=null) { + italic = Boolean.parseBoolean(italicStr); + styleSpecified = true; + } + if (styleSpecified) { + int style = 0; + if (bold) { + style |= Font.BOLD; + } + if (italic) { + style |= Font.ITALIC; + } + scheme.styles[index].font = baseFont.deriveFont(style); + } + + String ulineStr = attrs.getValue("underline"); + if (ulineStr!=null) { + boolean uline= Boolean.parseBoolean(ulineStr); + scheme.styles[index].underline = uline; + } + + } + + } + + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/SyntaxView.java b/src/org/fife/ui/rsyntaxtextarea/SyntaxView.java new file mode 100644 index 0000000..8d808ef --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/SyntaxView.java @@ -0,0 +1,1022 @@ +/* + * 02/24/2004 + * + * SyntaxView.java - The View object used by RSyntaxTextArea when word wrap is + * disabled. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.*; +import javax.swing.event.*; +import javax.swing.text.*; + +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; + + +/** + * The javax.swing.text.View object used by {@link RSyntaxTextArea} + * when word wrap is disabled. It implements syntax highlighting for + * programming languages using the colors and font styles specified by the + * RSyntaxTextArea.

+ * + * You don't really have to do anything to use this class, as + * {@link RSyntaxTextAreaUI} automatically sets the text area's view to be + * an instance of this class if word wrap is disabled.

+ * + * The tokens that specify how to paint the syntax-highlighted text are gleaned + * from the text area's {@link RSyntaxDocument}. + * + * @author Robert Futrell + * @version 0.3 + */ +public class SyntaxView extends View implements TabExpander, + TokenOrientedView, RSTAView { + + /** + * The default font used by the text area. If this changes we need to + * recalculate the longest line. + */ + private Font font; + + /** + * Font metrics for the current font. + */ + private FontMetrics metrics; + + /** + * The current longest line. This is used to calculate the preferred width + * of the view. Since the calculation is potentially expensive, we try to + * avoid it by stashing which line is currently the longest. + */ + private Element longLine; + private float longLineWidth; + + private int tabSize; + private int tabBase; + + /** + * Cached for each paint() call so each drawLine() call has access to it. + */ + private RSyntaxTextArea host; + + /** + * Cached values to speed up the painting a tad. + */ + private int lineHeight = 0; + private int ascent; + private int clipStart; + private int clipEnd; + + /** + * Temporary token used when we need to "modify" tokens for rendering + * purposes. Since tokens returned from RSyntaxDocuments are treated as + * immutable, we use this temporary token to do that work. + */ + private TokenImpl tempToken; + + + /** + * Constructs a new SyntaxView wrapped around an element. + * + * @param elem The element representing the text to display. + */ + public SyntaxView(Element elem) { + super(elem); + tempToken = new TokenImpl(); + } + + + /** + * Iterate over the lines represented by the child elements + * of the element this view represents, looking for the line + * that is the longest. The longLine variable is updated to + * represent the longest line contained. The font variable + * is updated to indicate the font used to calculate the + * longest line. + */ + void calculateLongestLine() { + Component c = getContainer(); + font = c.getFont(); + metrics = c.getFontMetrics(font); + tabSize = getTabSize() * metrics.charWidth(' '); + Element lines = getElement(); + int n = lines.getElementCount(); + for (int i=0; i longLineWidth) { + longLineWidth = w; + longLine = line; + } + } + } + + + /** + * Gives notification from the document that attributes were changed + * in a location that this view is responsible for. + * + * @param changes the change information from the associated document + * @param a the current allocation of the view + * @param f the factory to use to rebuild if the view has children + * @see View#changedUpdate + */ + @Override + public void changedUpdate(DocumentEvent changes, Shape a, ViewFactory f) { + updateDamage(changes, a, f); + } + + + /** + * Repaint the given line range. + * + * @param line0 The starting line number to repaint. This must + * be a valid line number in the model. + * @param line1 The ending line number to repaint. This must + * be a valid line number in the model. + * @param a The region allocated for the view to render into. + * @param host The component hosting the view (used to call repaint). + */ + protected void damageLineRange(int line0, int line1, Shape a, + Component host) { + if (a != null) { + Rectangle area0 = lineToRect(a, line0); + Rectangle area1 = lineToRect(a, line1); + if ((area0 != null) && (area1 != null)) { + Rectangle dmg = area0.union(area1); // damage. + host.repaint(dmg.x, dmg.y, dmg.width, dmg.height); + } + else { + host.repaint(); + } + } + } + + + /** + * Draws the passed-in text using syntax highlighting for the current + * language. It is assumed that the entire line is either not in a + * selected region, or painting with a selection-foreground color is turned + * off. + * + * @param painter The painter to render the tokens. + * @param token The list of tokens to draw. + * @param g The graphics context in which to draw. + * @param x The x-coordinate at which to draw. + * @param y The y-coordinate at which to draw. + * @return The x-coordinate representing the end of the painted text. + */ + private float drawLine(TokenPainter painter, Token token, Graphics2D g, + float x, float y, int line) { + + float nextX = x; // The x-value at the end of our text. + boolean paintBG = host.getPaintTokenBackgrounds(line, y); + + while (token!=null && token.isPaintable() && nextXtoken.getOffset()) { + tempToken.copyFrom(token); + tempToken.textCount = selStart - tempToken.getOffset(); + nextX = painter.paint(tempToken,g,nextX,y,host, this, clipStart); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selStart); + // Clone required since token and tempToken must be + // different tokens for else statement below + token = new TokenImpl(tempToken); + } + + int tokenLen = token.length(); + int selCount = Math.min(tokenLen, selEnd-token.getOffset()); + if (selCount==tokenLen) { + nextX = painter.paintSelected(token, g, nextX,y, host, + this, clipStart, useSTC); + } + else { + tempToken.copyFrom(token); + tempToken.textCount = selCount; + nextX = painter.paintSelected(tempToken, g, nextX,y, host, + this, clipStart, useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(token.getOffset() + selCount); + token = tempToken; + nextX = painter.paint(token, g, nextX,y, host, this, + clipStart); + } + + } + + // Selection ends in this token + else if (token.containsPosition(selEnd)) { + tempToken.copyFrom(token); + tempToken.textCount = selEnd - tempToken.getOffset(); + nextX = painter.paintSelected(tempToken, g, nextX,y, host, this, + clipStart, useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selEnd); + token = tempToken; + nextX = painter.paint(token, g, nextX,y, host, this, clipStart); + } + + // This token is entirely selected + else if (token.getOffset()>=selStart && + token.getEndOffset()<=selEnd) { + nextX = painter.paintSelected(token, g, nextX,y, host, this, + clipStart, useSTC); + } + + // This token is entirely unselected + else { + nextX = painter.paint(token, g, nextX,y, host, this, clipStart); + } + + token = token.getNextToken(); + + } + + // NOTE: We should re-use code from Token (paintBackground()) here, + // but don't because I'm just too lazy. + if (host.getEOLMarkersVisible()) { + g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); + g.setFont(host.getFontForTokenType(Token.WHITESPACE)); + g.drawString("\u00B6", nextX, y); + } + + // Return the x-coordinate at the end of the painted text. + return nextX; + + } + + + /** + * Calculates the width of the line represented by the given element. + * + * @param line The line for which to get the length. + * @param lineNumber The line number of the specified line in the document. + * @return The width of the line. + */ + private float getLineWidth(int lineNumber) { + Token tokenList = ((RSyntaxDocument)getDocument()). + getTokenListForLine(lineNumber); + return RSyntaxUtilities.getTokenListWidth(tokenList, + (RSyntaxTextArea)getContainer(), + this); + } + + + /** + * Provides a way to determine the next visually represented model + * location that one might place a caret. Some views may not be visible, + * they might not be in the same order found in the model, or they just + * might not allow access to some of the locations in the model. + * + * @param pos the position to convert >= 0 + * @param a the allocated region to render into + * @param direction the direction from the current position that can + * be thought of as the arrow keys typically found on a keyboard. + * This may be SwingConstants.WEST, SwingConstants.EAST, + * SwingConstants.NORTH, or SwingConstants.SOUTH. + * @return the location within the model that best represents the next + * location visual position. + * @exception BadLocationException + * @exception IllegalArgumentException for an invalid direction + */ + @Override + public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, + int direction, Position.Bias[] biasRet) + throws BadLocationException { + return RSyntaxUtilities.getNextVisualPositionFrom(pos, b, a, + direction, biasRet, this); + } + + + /** + * Determines the preferred span for this view along an + * axis. + * + * @param axis may be either View.X_AXIS or View.Y_AXIS + * @return the span the view would like to be rendered into >= 0. + * Typically the view is told to render into the span + * that is returned, although there is no guarantee. + * The parent may choose to resize or break the view. + * @exception IllegalArgumentException for an invalid axis + */ + @Override + public float getPreferredSpan(int axis) { + updateMetrics(); + switch (axis) { + case View.X_AXIS: + float span = longLineWidth + getRhsCorrection(); // fudge factor + if (host.getEOLMarkersVisible()) { + span += metrics.charWidth('\u00B6'); + } + return span; + case View.Y_AXIS: + // We update lineHeight here as when this method is first + // called, lineHeight isn't initialized. If we don't do it + // here, we get no vertical scrollbar (as lineHeight==0). + lineHeight = host!=null ? host.getLineHeight() : lineHeight; +// return getElement().getElementCount() * lineHeight; + int visibleLineCount = getElement().getElementCount(); + if (host.isCodeFoldingEnabled()) { + visibleLineCount -= host.getFoldManager().getHiddenLineCount(); + } + return visibleLineCount * (float) lineHeight; + default: + throw new IllegalArgumentException("Invalid axis: " + axis); + } + } + + + /** + * Workaround for JTextComponents allowing the caret to be rendered + * entirely off-screen if the entire "previous" character fit entirely. + * + * @return The amount of space to add to the x-axis preferred span. + */ + private int getRhsCorrection() { + int rhsCorrection = 10; + if (host!=null) { + rhsCorrection = host.getRightHandSideCorrection(); + } + return rhsCorrection; + } + + + /** + * Returns the tab size set for the document, defaulting to 5. + * + * @return The tab size. + */ + private int getTabSize() { + Integer i = (Integer)getDocument().getProperty( + PlainDocument.tabSizeAttribute); + int size = (i != null) ? i.intValue() : 5; + return size; + } + + + /** + * Returns a token list for the physical line above the physical + * line containing the specified offset into the document. Note that for + * this plain (non-wrapped) view, this is simply the token list for the + * logical line above the line containing offset, since lines + * are not wrapped. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * before this one. If offset is in the first line in + * the document, null is returned. + */ + @Override + public Token getTokenListForPhysicalLineAbove(int offset) { + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = document.getDefaultRootElement(); +int line = map.getElementIndex(offset); +FoldManager fm = host.getFoldManager(); +if (fm==null) { + line--; + if (line>=0) { + return document.getTokenListForLine(line); + } +} +else { + line = fm.getVisibleLineAbove(line); + if (line>=0) { + return document.getTokenListForLine(line); + } +} +// int line = map.getElementIndex(offset) - 1; +// if (line>=0) +// return document.getTokenListForLine(line); + return null; + } + + + /** + * Returns a token list for the physical line below the physical + * line containing the specified offset into the document. Note that for + * this plain (non-wrapped) view, this is simply the token list for the + * logical line below the line containing offset, since lines + * are not wrapped. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * after this one. If offset is in the last physical + * line in the document, null is returned. + */ + @Override + public Token getTokenListForPhysicalLineBelow(int offset) { + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = document.getDefaultRootElement(); + int lineCount = map.getElementCount(); +int line = map.getElementIndex(offset); +if (!host.isCodeFoldingEnabled()) { + if (line=0 && line + * + * This is implemented to subtract the width of the second character, as + * this view's modelToView actually returns the width of the + * character instead of "1" or "0" like the View implementations in + * javax.swing.text. Thus, if we don't override this method, + * the View implementation will return one character's width + * too much for its consumers (implementations of + * javax.swing.text.Highlighter). + * + * @param p0 the position of the first character (>=0) + * @param b0 The bias of the first character position, toward the previous + * character or the next character represented by the offset, in + * case the position is a boundary of two views; b0 + * will have one of these values: + *

    + *
  • Position.Bias.Forward + *
  • Position.Bias.Backward + *
+ * @param p1 the position of the last character (>=0) + * @param b1 the bias for the second character position, defined + * one of the legal values shown above + * @param a the area of the view, which encompasses the requested region + * @return the bounding box which is a union of the region specified + * by the first and last character positions + * @exception BadLocationException if the given position does + * not represent a valid location in the associated document + * @exception IllegalArgumentException if b0 or + * b1 are not one of the + * legal Position.Bias values listed above + * @see View#viewToModel + */ + @Override + public Shape modelToView(int p0, Position.Bias b0, + int p1, Position.Bias b1, + Shape a) throws BadLocationException { + + Shape s0 = modelToView(p0, a, b0); + Shape s1; + if (p1 ==getEndOffset()) { + try { + s1 = modelToView(p1, a, b1); + } catch (BadLocationException ble) { + s1 = null; + } + if (s1 == null) { + // Assume extends left to right. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, + 1, alloc.height); + } + } + else { + s1 = modelToView(p1, a, b1); + } + Rectangle r0 = s0 instanceof Rectangle ? (Rectangle)s0 : s0.getBounds(); + Rectangle r1 = s1 instanceof Rectangle ? (Rectangle)s1 : s1.getBounds(); + if (r0.y != r1.y) { + // If it spans lines, force it to be the width of the view. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + r0.x = alloc.x; + r0.width = alloc.width; + } + + r0.add(r1); + // The next line is the only difference between this method and + // View's implementation. We're subtracting the width of the second + // character. This is because this method is used by Highlighter + // implementations to get the area to "highlight", and if we don't do + // this, one character too many is highlighted thanks to our + // modelToView() implementation returning the actual width of the + // character requested! + if (p1>p0) { + r0.width -= r1.width; + } + + return r0; + + } + + + /** + * Returns the next tab stop position after a given reference position. + * This implementation does not support things like centering so it + * ignores the tabOffset argument. + * + * @param x the current position >= 0 + * @param tabOffset the position within the text stream + * that the tab occurred at >= 0. + * @return the tab stop, measured in points >= 0 + */ + @Override + public float nextTabStop(float x, int tabOffset) { + if (tabSize == 0) { + return x; + } + int ntabs = (((int)x) - tabBase) / tabSize; + return tabBase + ((ntabs + 1f) * tabSize); + } + + + /** + * Actually paints the text area. Only lines that have been damaged are + * repainted. + * + * @param g The graphics context with which to paint. + * @param a The allocated region in which to render. + */ + @Override + public void paint(Graphics g, Shape a) { + + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + + Rectangle alloc = a.getBounds(); + + tabBase = alloc.x; + host = (RSyntaxTextArea)getContainer(); + + Rectangle clip = g.getClipBounds(); + // An attempt to speed things up for files with long lines. Note that + // this will actually slow things down a bit for the common case of + // regular-length lines, but it doesn't make a perceivable difference. + clipStart = clip.x; + clipEnd = clipStart + clip.width; + + lineHeight = host.getLineHeight(); + ascent = host.getMaxAscent();//metrics.getAscent(); + int heightAbove = clip.y - alloc.y; + int linesAbove = Math.max(0, heightAbove / lineHeight); + + FoldManager fm = host.getFoldManager(); + linesAbove += fm.getHiddenLineCountAbove(linesAbove, true); + Rectangle lineArea = lineToRect(a, linesAbove); + int y = lineArea.y + ascent; + int x = lineArea.x; + Element map = getElement(); + int lineCount = map.getElementCount(); + + // Whether token styles should always be painted, even in selections + int selStart = host.getSelectionStart(); + int selEnd = host.getSelectionEnd(); + + RSyntaxTextAreaHighlighter h = + (RSyntaxTextAreaHighlighter)host.getHighlighter(); + + Graphics2D g2d = (Graphics2D)g; + Token token; + //System.err.println("Painting lines: " + linesAbove + " to " + (endLine-1)); + + TokenPainter painter = host.getTokenPainter(); + int line = linesAbove; + //int count = 0; + while (y=selEnd || + endOffset alloc.y + alloc.height) { + return host.getLastVisibleOffset(); + } + + // They're asking about a position within the coverage of this view + // vertically. So, we figure out which line the point corresponds to. + // If the line is greater than the number of lines contained, then + // simply use the last line as it represents the last possible place + // we can position to. + else { + + Element map = doc.getDefaultRootElement(); + int lineIndex = Math.abs((y - alloc.y) / lineHeight);//metrics.getHeight() ); +FoldManager fm = host.getFoldManager(); +//System.out.print("--- " + lineIndex); +lineIndex += fm.getHiddenLineCountAbove(lineIndex, true); +//System.out.println(" => " + lineIndex); + if (lineIndex >= map.getElementCount()) { + return host.getLastVisibleOffset(); + } + + Element line = map.getElement(lineIndex); + + // If the point is to the left of the line... + if (x < alloc.x) { + return line.getStartOffset(); + } + else if (x > alloc.x + alloc.width) { + return line.getEndOffset() - 1; + } + else { + // Determine the offset into the text + int p0 = line.getStartOffset(); + Token tokenList = doc.getTokenListForLine(lineIndex); + tabBase = alloc.x; + int offs = tokenList.getListOffset( + (RSyntaxTextArea)getContainer(), + this, tabBase, x); + return offs!=-1 ? offs : p0; + } + + } // End of else. + + } + + + /** + * {@inheritDoc} + */ + @Override + public int yForLine(Rectangle alloc, int line) throws BadLocationException { + + //Rectangle lineArea = lineToRect(alloc, lineIndex); + updateMetrics(); + if (metrics != null) { + // NOTE: lineHeight is not initially set here, leading to the + // current line not being highlighted when a document is first + // opened. So, we set it here just in case. + lineHeight = host!=null ? host.getLineHeight() : lineHeight; + if (host != null) { + FoldManager fm = host.getFoldManager(); + if (!fm.isLineHidden(line)) { + line -= fm.getHiddenLineCountAbove(line); + return alloc.y + line * lineHeight; + } + } + } + + return -1; + + } + + + /** + * {@inheritDoc} + */ + @Override + public int yForLineContaining(Rectangle alloc, int offs) + throws BadLocationException { + Element map = getElement(); + int line = map.getElementIndex(offs); + return yForLine(alloc, line); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TextEditorPane.java b/src/org/fife/ui/rsyntaxtextarea/TextEditorPane.java new file mode 100644 index 0000000..3b3f802 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TextEditorPane.java @@ -0,0 +1,772 @@ +/* + * 11/25/2008 + * + * TextEditorPane.java - A syntax highlighting text area that has knowledge of + * the file it is editing on disk. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.nio.charset.UnsupportedCharsetException; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.Document; + +import org.fife.io.UnicodeReader; +import org.fife.io.UnicodeWriter; +import org.fife.ui.rtextarea.RTextAreaEditorKit; + +/** + * An extension of {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea} + * that adds information about the file being edited, such as: + * + *
    + *
  • Its name and location. + *
  • Is it dirty? + *
  • Is it read-only? + *
  • The last time it was loaded or saved to disk (local files only). + *
  • The file's encoding on disk. + *
  • Easy access to the line separator. + *
+ * + * Loading and saving is also built into the editor.

+ * + * When saving UTF-8 files, whether or not a BOM is written is controlled by + * the {@link UnicodeWriter} class. + * Use {@link UnicodeWriter#setWriteUtf8BOM(boolean)} to toggle writing BOMs + * for UTF-8 files.

+ * + * Both local and remote files (e.g. ftp) are supported. See the + * {@link FileLocation} class for more information. + * + * @author Robert Futrell + * @version 1.0 + * @see FileLocation + */ +public class TextEditorPane extends RSyntaxTextArea implements + DocumentListener { + + private static final long serialVersionUID = 1L; + + /** + * Property change event fired when the file path this text area references + * is updated. + * + * @see #load(FileLocation, String) + * @see #saveAs(FileLocation) + */ + public static final String FULL_PATH_PROPERTY = "TextEditorPane.fileFullPath"; + + /** + * Property change event fired when the text area's dirty flag changes. + * + * @see #setDirty(boolean) + */ + public static final String DIRTY_PROPERTY = "TextEditorPane.dirty"; + + /** + * Property change event fired when the text area should be treated as + * read-only, and previously it should not, or vice-versa. + * + * @see #setReadOnly(boolean) + */ + public static final String READ_ONLY_PROPERTY = "TextEditorPane.readOnly"; + + /** + * Property change event fired when the text area's encoding changes. + * + * @see #setEncoding(String) + */ + public static final String ENCODING_PROPERTY = "TextEditorPane.encoding"; + + /** + * The location of the file being edited. + */ + private FileLocation loc; + + /** + * The charset to use when reading or writing this file. + */ + private String charSet; + + /** + * Whether the file should be treated as read-only. + */ + private boolean readOnly; + + /** + * Whether the file is dirty. + */ + private boolean dirty; + + /** + * The last time this file was modified on disk, for local files. + * For remote files, this value should always be + * {@link #LAST_MODIFIED_UNKNOWN}. + */ + private long lastSaveOrLoadTime; + + /** + * The value returned by {@link #getLastSaveOrLoadTime()} for remote files. + */ + public static final long LAST_MODIFIED_UNKNOWN = 0; + + /** + * The default name given to files if none is specified in a constructor. + */ + private static final String DEFAULT_FILE_NAME = "Untitled.txt"; + + + /** + * Constructor. The file will be given a default name. + */ + public TextEditorPane() { + this(INSERT_MODE); + } + + + /** + * Constructor. The file will be given a default name. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + */ + public TextEditorPane(int textMode) { + this(textMode, false); + } + + + /** + * Creates a new TextEditorPane. The file will be given + * a default name. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + * @param wordWrapEnabled Whether or not to use word wrap in this pane. + */ + public TextEditorPane(int textMode, boolean wordWrapEnabled) { + super(textMode); + setLineWrap(wordWrapEnabled); + try { + init(null, null); + } catch (IOException ioe) { // Never happens + ioe.printStackTrace(); + } + } + + + /** + * Creates a new TextEditorPane. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + * @param wordWrapEnabled Whether or not to use word wrap in this pane. + * @param loc The location of the text file being edited. If this value + * is null, a file named "Untitled.txt" in the current + * directory is used. + * @throws IOException If an IO error occurs reading the file at + * loc. This of course won't happen if + * loc is null. + */ + public TextEditorPane(int textMode, boolean wordWrapEnabled, + FileLocation loc) throws IOException { + this(textMode, wordWrapEnabled, loc, null); + } + + + /** + * Creates a new TextEditorPane. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + * @param wordWrapEnabled Whether or not to use word wrap in this pane. + * @param loc The location of the text file being edited. If this value + * is null, a file named "Untitled.txt" in the current + * directory is used. This file is displayed as empty even if it + * actually exists. + * @param defaultEnc The default encoding to use when opening the file, + * if the file is not Unicode. If this value is null, + * a system default value is used. + * @throws IOException If an IO error occurs reading the file at + * loc. This of course won't happen if + * loc is null. + */ + public TextEditorPane(int textMode, boolean wordWrapEnabled, + FileLocation loc, String defaultEnc) throws IOException { + super(textMode); + setLineWrap(wordWrapEnabled); + init(loc, defaultEnc); + } + + + /** + * Callback for when styles in the current document change. + * This method is never called. + * + * @param e The document event. + */ + @Override + public void changedUpdate(DocumentEvent e) { + } + + + + /** + * Returns the default encoding for this operating system. + * + * @return The default encoding. + */ + private static String getDefaultEncoding() { + // NOTE: The "file.encoding" system property is not guaranteed to be + // set by the spec, so we cannot rely on it. + String encoding = Charset.defaultCharset().name(); + if (encoding==null) { + try { + File f = File.createTempFile("rsta", null); + FileWriter w = new FileWriter(f); + encoding = w.getEncoding(); + w.close(); + f.deleteOnExit();//delete(); Keep FindBugs happy + } catch (IOException ioe) { + encoding = "US-ASCII"; + } + } + return encoding; + } + + + /** + * Returns the encoding to use when reading or writing this file. + * + * @return The encoding. + * @see #setEncoding(String) + */ + public String getEncoding() { + return charSet; + } + + + /** + * Returns the full path to this document. + * + * @return The full path to the document. + */ + public String getFileFullPath() { + return loc==null ? null : loc.getFileFullPath(); + } + + + /** + * Returns the file name of this document. + * + * @return The file name. + */ + public String getFileName() { + return loc==null ? null : loc.getFileName(); + } + + + /** + * Returns the timestamp for when this file was last loaded or saved + * by this editor pane. If the file has been modified on disk by + * another process after it was loaded into this editor pane, this method + * will not return the actual file's last modified time.

+ * + * For remote files, this method will always return + * {@link #LAST_MODIFIED_UNKNOWN}. + * + * @return The timestamp when this file was last loaded or saved by this + * editor pane, if it is a local file, or + * {@link #LAST_MODIFIED_UNKNOWN} if it is a remote file. + * @see #isModifiedOutsideEditor() + */ + public long getLastSaveOrLoadTime() { + return lastSaveOrLoadTime; + } + + + /** + * Returns the line separator used when writing this file (e.g. + * "\n", "\r\n", or "\r").

+ * + * Note that this value is an Object and not a + * String as that is the way the {@link Document} interface + * defines its property values. If you always use + * {@link #setLineSeparator(String)} to modify this value, then the value + * returned from this method will always be a String. + * + * @return The line separator. If this value is null, then + * the system default line separator is used (usually the value + * of System.getProperty("line.separator")). + * @see #setLineSeparator(String) + * @see #setLineSeparator(String, boolean) + */ + public Object getLineSeparator() { + return getDocument().getProperty( + RTextAreaEditorKit.EndOfLineStringProperty); + } + + + /** + * Initializes this editor with the specified file location. + * + * @param loc The file location. If this is null, a default + * location is used and an empty file is displayed. + * @param defaultEnc The default encoding to use when opening the file, + * if the file is not Unicode. If this value is null, + * a system default value is used. + * @throws IOException If an IO error occurs reading from loc. + * If loc is null, this cannot happen. + */ + private void init(FileLocation loc, String defaultEnc) throws IOException { + + if (loc==null) { + // Don't call load() just in case Untitled.txt actually exists, + // just to ensure there is no chance of an IOException being thrown + // in the default case. + this.loc = FileLocation.create(DEFAULT_FILE_NAME); + charSet = defaultEnc==null ? getDefaultEncoding() : defaultEnc; + // Ensure that line separator always has a value, even if the file + // does not exist (or is the "default" file). This makes life + // easier for host applications that want to display this value. + setLineSeparator(System.getProperty("line.separator")); + } + else { + load(loc, defaultEnc); // Sets this.loc + } + + if (this.loc.isLocalAndExists()) { + File file = new File(this.loc.getFileFullPath()); + lastSaveOrLoadTime = file.lastModified(); + setReadOnly(!file.canWrite()); + } + else { + lastSaveOrLoadTime = LAST_MODIFIED_UNKNOWN; + setReadOnly(false); + } + + setDirty(false); + + } + + + /** + * Callback for when text is inserted into the document. + * + * @param e Information on the insertion. + */ + @Override + public void insertUpdate(DocumentEvent e) { + if (!dirty) { + setDirty(true); + } + } + + + /** + * Returns whether or not the text in this editor has unsaved changes. + * + * @return Whether or not the text has unsaved changes. + * @see #setDirty(boolean) + */ + public boolean isDirty() { + return dirty; + } + + + /** + * Returns whether this file is a local file. + * + * @return Whether this is a local file. + */ + public boolean isLocal() { + return loc.isLocal(); + } + + + /** + * Returns whether this is a local file that already exists. + * + * @return Whether this is a local file that already exists. + */ + public boolean isLocalAndExists() { + return loc.isLocalAndExists(); + } + + + /** + * Returns whether the text file has been modified outside of this editor + * since the last load or save operation. Note that if this is a remote + * file, this method will always return false.

+ * + * This method may be used by applications to implement a reloading + * feature, where the user is prompted to reload a file if it has been + * modified since their last open or save. + * + * @return Whether the text file has been modified outside of this + * editor. + * @see #getLastSaveOrLoadTime() + */ + public boolean isModifiedOutsideEditor() { + return loc.getActualLastModified()>getLastSaveOrLoadTime(); + } + + + /** + * Returns whether or not the text area should be treated as read-only. + * + * @return Whether or not the text area should be treated as read-only. + * @see #setReadOnly(boolean) + */ + public boolean isReadOnly() { + return readOnly; + } + + + /** + * Loads the specified file in this editor. This method fires a property + * change event of type {@link #FULL_PATH_PROPERTY}. + * + * @param loc The location of the file to load. This cannot be + * null. + * @param defaultEnc The encoding to use when loading/saving the file. + * This encoding will only be used if the file is not Unicode. + * If this value is null, the system default encoding + * is used. + * @throws IOException If an IO error occurs. + * @see #save() + * @see #saveAs(FileLocation) + */ + public void load(FileLocation loc, String defaultEnc) throws IOException { + + // For new local files, just go with it. + if (loc.isLocal() && !loc.isLocalAndExists()) { + this.charSet = defaultEnc!=null ? defaultEnc : getDefaultEncoding(); + this.loc = loc; + setText(null); + discardAllEdits(); + setDirty(false); + return; + } + + // Old local files and remote files, load 'em up. UnicodeReader will + // check for BOMs and handle them correctly in all cases, then pass + // rest of stream down to InputStreamReader. + UnicodeReader ur = new UnicodeReader(loc.getInputStream(), defaultEnc); + + // Remove listener so dirty flag doesn't get set when loading a file. + Document doc = getDocument(); + doc.removeDocumentListener(this); + BufferedReader r = new BufferedReader(ur); + try { + read(r, null); + } finally { + doc.addDocumentListener(this); + r.close(); + } + + // No IOException thrown, so we can finally change the location. + charSet = ur.getEncoding(); + String old = getFileFullPath(); + this.loc = loc; + setDirty(false); + setCaretPosition(0); + discardAllEdits(); + firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); + + } + + + /** + * Reloads this file from disk. The file must exist for this operation + * to not throw an exception.

+ * + * The file's "dirty" state will be set to false after this + * operation. If this is a local file, its "last modified" time is + * updated to reflect that of the actual file.

+ * + * Note that if the file has been modified on disk, and is now a Unicode + * encoding when before it wasn't (or if it is a different Unicode now), + * this will cause this {@link TextEditorPane}'s encoding to change. + * Otherwise, the file's encoding will stay the same. + * + * @throws IOException If the file does not exist, or if an IO error + * occurs reading the file. + * @see #isLocalAndExists() + */ + public void reload() throws IOException { + String oldEncoding = getEncoding(); + UnicodeReader ur = new UnicodeReader(loc.getInputStream(), oldEncoding); + String encoding = ur.getEncoding(); + BufferedReader r = new BufferedReader(ur); + try { + read(r, null); // Dumps old contents. + } finally { + r.close(); + } + setEncoding(encoding); + setDirty(false); + syncLastSaveOrLoadTimeToActualFile(); + discardAllEdits(); // Prevent user from being able to undo the reload + } + + + /** + * Called whenever text is removed from this editor. + * + * @param e The document event. + */ + @Override + public void removeUpdate(DocumentEvent e) { + if (!dirty) { + setDirty(true); + } + } + + + /** + * Saves the file in its current encoding.

+ * + * The text area's "dirty" state is set to false, and if + * this is a local file, its "last modified" time is updated. + * + * @throws IOException If an IO error occurs. + * @see #saveAs(FileLocation) + * @see #load(FileLocation, String) + */ + public void save() throws IOException { + saveImpl(loc); + setDirty(false); + syncLastSaveOrLoadTimeToActualFile(); + } + + + /** + * Saves this file in a new local location. This method fires a property + * change event of type {@link #FULL_PATH_PROPERTY}. + * + * @param loc The location to save to. + * @throws IOException If an IO error occurs. + * @see #save() + * @see #load(FileLocation, String) + */ + public void saveAs(FileLocation loc) throws IOException { + saveImpl(loc); + // No exception thrown - we can "rename" the file. + String old = getFileFullPath(); + this.loc = loc; + setDirty(false); + lastSaveOrLoadTime = loc.getActualLastModified(); + firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); + } + + + /** + * Saves the text in this editor to the specified location. + * + * @param loc The location to save to. + * @throws IOException If an IO error occurs. + */ + private void saveImpl(FileLocation loc) throws IOException { + OutputStream out = loc.getOutputStream(); + BufferedWriter w = new BufferedWriter( + new UnicodeWriter(out, getEncoding())); + try { + write(w); + } finally { + w.close(); + } + } + + + /** + * Sets whether or not this text in this editor has unsaved changes. + * This fires a property change event of type {@link #DIRTY_PROPERTY}.

+ * + * Applications will usually have no need to call this method directly; the + * only time you might have a need to call this method directly is if you + * have to initialize an instance of TextEditorPane with content that does + * not come from a file. TextEditorPane automatically sets its + * own dirty flag when its content is edited, when its encoding is changed, + * or when its line ending property is changed. It is cleared whenever + * load(), reload(), save(), or + * saveAs() are called. + * + * @param dirty Whether or not the text has been modified. + * @see #isDirty() + */ + public void setDirty(boolean dirty) { + if (this.dirty!=dirty) { + this.dirty = dirty; + firePropertyChange(DIRTY_PROPERTY, !dirty, dirty); + } + } + + + /** + * Sets the document for this editor. + * + * @param doc The new document. + */ + @Override + public void setDocument(Document doc) { + Document old = getDocument(); + if (old!=null) { + old.removeDocumentListener(this); + } + super.setDocument(doc); + doc.addDocumentListener(this); + } + + + /** + * Sets the encoding to use when reading or writing this file. This + * method sets the editor's dirty flag when the encoding is changed, and + * fires a property change event of type {@link #ENCODING_PROPERTY}. + * + * @param encoding The new encoding. + * @throws UnsupportedCharsetException If the encoding is not supported. + * @throws NullPointerException If encoding is + * null. + * @see #getEncoding() + */ + public void setEncoding(String encoding) { + if (encoding==null) { + throw new NullPointerException("encoding cannot be null"); + } + else if (!Charset.isSupported(encoding)) { + throw new UnsupportedCharsetException(encoding); + } + if (charSet==null || !charSet.equals(encoding)) { + String oldEncoding = charSet; + charSet = encoding; + firePropertyChange(ENCODING_PROPERTY, oldEncoding, charSet); + setDirty(true); + } + } + + + /** + * Sets the line separator sequence to use when this file is saved (e.g. + * "\n", "\r\n" or "\r"). + * + * Besides parameter checking, this method is preferred over + * getDocument().putProperty() because it sets the editor's + * dirty flag when the line separator is changed. + * + * @param separator The new line separator. + * @throws NullPointerException If separator is + * null. + * @throws IllegalArgumentException If separator is not one + * of "\n", "\r\n" or "\r". + * @see #getLineSeparator() + */ + public void setLineSeparator(String separator) { + setLineSeparator(separator, true); + } + + + /** + * Sets the line separator sequence to use when this file is saved (e.g. + * "\n", "\r\n" or "\r"). + * + * Besides parameter checking, this method is preferred over + * getDocument().putProperty() because can set the editor's + * dirty flag when the line separator is changed. + * + * @param separator The new line separator. + * @param setDirty Whether the dirty flag should be set if the line + * separator is changed. + * @throws NullPointerException If separator is + * null. + * @throws IllegalArgumentException If separator is not one + * of "\n", "\r\n" or "\r". + * @see #getLineSeparator() + */ + public void setLineSeparator(String separator, boolean setDirty) { + if (separator==null) { + throw new NullPointerException("terminator cannot be null"); + } + if (!"\r\n".equals(separator) && !"\n".equals(separator) && + !"\r".equals(separator)) { + throw new IllegalArgumentException("Invalid line terminator"); + } + Document doc = getDocument(); + Object old = doc.getProperty( + RTextAreaEditorKit.EndOfLineStringProperty); + if (!separator.equals(old)) { + doc.putProperty(RTextAreaEditorKit.EndOfLineStringProperty, + separator); + if (setDirty) { + setDirty(true); + } + } + } + + + /** + * Sets whether or not this text area should be treated as read-only. + * This fires a property change event of type {@link #READ_ONLY_PROPERTY}. + * + * @param readOnly Whether or not the document is read-only. + * @see #isReadOnly() + */ + public void setReadOnly(boolean readOnly) { + if (this.readOnly!=readOnly) { + this.readOnly = readOnly; + firePropertyChange(READ_ONLY_PROPERTY, !readOnly, readOnly); + } + } + + + /** + * Syncs this text area's "last saved or loaded" time to that of the file + * being edited, if that file is local and exists. If the file is + * remote or is local but does not yet exist, nothing happens.

+ * + * You normally do not have to call this method, as the "last saved or + * loaded" time for {@link TextEditorPane}s is kept up-to-date internally + * during such operations as {@link #save()}, {@link #reload()}, etc. + * + * @see #getLastSaveOrLoadTime() + * @see #isModifiedOutsideEditor() + */ + public void syncLastSaveOrLoadTimeToActualFile() { + if (loc.isLocalAndExists()) { + lastSaveOrLoadTime = loc.getActualLastModified(); + } + } + + + public static void main(String[] args) throws Exception { + try { + TextEditorPane textArea = new TextEditorPane(); + textArea.load(FileLocation.create("d:/temp/test.txt"), "UTF-8"); + JPanel cp = new JPanel(); + cp.setPreferredSize(new java.awt.Dimension(300, 300)); + cp.setLayout(new java.awt.BorderLayout()); + cp.add(new JScrollPane(textArea)); + JFrame frame = new JFrame(); + frame.setContentPane(cp); + frame.pack(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocationByPlatform(true); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/Theme.java b/src/org/fife/ui/rsyntaxtextarea/Theme.java new file mode 100644 index 0000000..dce51f1 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/Theme.java @@ -0,0 +1,894 @@ +/* + * 10/30/2011 + * + * Theme.java - A color theme for RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Font; +import java.awt.SystemColor; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.lang.reflect.Field; + +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; +import javax.swing.text.StyleContext; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.fife.io.UnicodeWriter; +import org.fife.ui.rtextarea.Gutter; +import org.fife.ui.rtextarea.RTextArea; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; + + +/** + * A theme is a set of fonts and colors to use to style RSyntaxTextArea and + * RTextScrollPane. Themes are defined in XML files that are validated against + * org/fife/ui/rsyntaxtextarea/themes/theme.dtd. This provides + * applications and other consumers with an easy way to style RSyntaxTextArea + * without having to use the API.

+ * + * Sample themes are included in the source tree in the + * org.fife.ui.rsyntaxtextarea.themes package, and can be loaded + * via getClass().getResourceAsStream(...).

+ * + * All fields are public to facilitate programmatic manipulation, but typically + * you won't need to reference any fields directly, rather using the + * load(), save(), and apply() methods + * for various tasks.

+ * + * Note that to save a Theme via {@link #save(OutputStream)}, + * you must currently create a Theme from a text area wrapped in + * an RTextScrollPane, so that the color information for the + * gutter can be retrieved. + * + * @author Robert Futrell + * @version 1.0 + */ +@SuppressWarnings({ "checkstyle:visibilitymodifier" }) +public class Theme { + + public Font baseFont; + public Color bgColor; + public Color caretColor; + public boolean useSelctionFG; + public Color selectionFG; + public Color selectionBG; + public boolean selectionRoundedEdges; + public Color currentLineHighlight; + public boolean fadeCurrentLineHighlight; + public Color marginLineColor; + public Color markAllHighlightColor; + public Color markOccurrencesColor; + public boolean markOccurrencesBorder; + public Color matchedBracketFG; + public Color matchedBracketBG; + public boolean matchedBracketHighlightBoth; + public boolean matchedBracketAnimate; + public Color hyperlinkFG; + public Color[] secondaryLanguages; + + public SyntaxScheme scheme; + + public Color gutterBackgroundColor; + public Color gutterBorderColor; + public Color activeLineRangeColor; + public boolean iconRowHeaderInheritsGutterBG; + public Color lineNumberColor; + public String lineNumberFont; + public int lineNumberFontSize; + public Color foldIndicatorFG; + public Color foldBG; + public Color armedFoldBG; + + + /** + * Private constructor, used when loading from a stream. + * + * @param baseFont The default font to use for any "base font" properties + * not specified in the theme XML. If this is null, + * a default monospaced font will be used. + */ + private Theme(Font baseFont) { + // Optional fields that require a default value. + this.baseFont = baseFont!=null ? baseFont : RTextArea.getDefaultFont(); + secondaryLanguages = new Color[3]; + activeLineRangeColor = Gutter.DEFAULT_ACTIVE_LINE_RANGE_COLOR; + } + + + /** + * Creates a theme from an RSyntaxTextArea. It should be contained in + * an RTextScrollPane to get all gutter color information. + * + * @param textArea The text area. + */ + public Theme(RSyntaxTextArea textArea) { + + baseFont = textArea.getFont(); + bgColor = textArea.getBackground(); + caretColor = textArea.getCaretColor(); + useSelctionFG = textArea.getUseSelectedTextColor(); + selectionFG = textArea.getSelectedTextColor(); + selectionBG = textArea.getSelectionColor(); + selectionRoundedEdges = textArea.getRoundedSelectionEdges(); + currentLineHighlight = textArea.getCurrentLineHighlightColor(); + fadeCurrentLineHighlight = textArea.getFadeCurrentLineHighlight(); + marginLineColor = textArea.getMarginLineColor(); + markAllHighlightColor = textArea.getMarkAllHighlightColor(); + markOccurrencesColor = textArea.getMarkOccurrencesColor(); + markOccurrencesBorder = textArea.getPaintMarkOccurrencesBorder(); + matchedBracketBG = textArea.getMatchedBracketBGColor(); + matchedBracketFG = textArea.getMatchedBracketBorderColor(); + matchedBracketHighlightBoth = textArea.getPaintMatchedBracketPair(); + matchedBracketAnimate = textArea.getAnimateBracketMatching(); + hyperlinkFG = textArea.getHyperlinkForeground(); + + int count = textArea.getSecondaryLanguageCount(); + secondaryLanguages = new Color[count]; + for (int i=0; i0 ? lineNumberFontSize : + baseFont.getSize(); + Font font = getFont(fontName, Font.PLAIN, fontSize); + gutter.setLineNumberFont(font); + gutter.setFoldIndicatorForeground(foldIndicatorFG); + gutter.setFoldBackground(foldBG); + gutter.setArmedFoldBackground(armedFoldBG); + } + + } + + + private static String colorToString(Color c) { + int color = c.getRGB() & 0xffffff; + StringBuilder stringBuilder = new StringBuilder(Integer.toHexString(color)); + while (stringBuilder.length()<6) { + stringBuilder.insert(0, "0"); + } + return stringBuilder.toString(); + } + + + /** + * Returns the default selection background color to use if "default" is + * specified in a theme. + * + * @return The default selection background to use. + * @see #getDefaultSelectionFG() + */ + private static Color getDefaultBG() { + Color c = UIManager.getColor("nimbusLightBackground"); + if (c==null) { + // Don't search for "text", as Nimbus defines that as the text + // component "text" color, but Basic LAFs use it for text + // component backgrounds! Nimbus also defines TextArea.background + // as too dark, not what it actually uses for text area backgrounds + c = UIManager.getColor("TextArea.background"); + if (c==null) { + c = new ColorUIResource(SystemColor.text); + } + } + return c; + } + + + /** + * Returns the default selection background color to use if "default" is + * specified in a theme. + * + * @return The default selection background to use. + * @see #getDefaultSelectionFG() + */ + private static Color getDefaultSelectionBG() { + Color c = UIManager.getColor("TextArea.selectionBackground"); + if (c==null) { + c = UIManager.getColor("textHighlight"); + if (c==null) { + c = UIManager.getColor("nimbusSelectionBackground"); + if (c==null) { + c = new ColorUIResource(SystemColor.textHighlight); + } + } + } + return c; + } + + + /** + * Returns the default "selected text" color to use if "default" is + * specified in a theme. + * + * @return The default selection foreground color to use. + * @see #getDefaultSelectionBG() + */ + private static Color getDefaultSelectionFG() { + Color c = UIManager.getColor("TextArea.selectionForeground"); + if (c==null) { + c = UIManager.getColor("textHighlightText"); + if (c==null) { + c = UIManager.getColor("nimbusSelectedText"); + if (c==null) { + c = new ColorUIResource(SystemColor.textHighlightText); + } + } + } + return c; + } + + + /** + * Returns the specified font. + * + * @param family The font family. + * @param style The style of font. + * @param size The size of the font. + * @return The font. + */ + private static Font getFont(String family, int style, int size) { + // Use StyleContext to get a composite font for Asian glyphs. + StyleContext sc = StyleContext.getDefaultStyleContext(); + return sc.getFont(family, style, size); + } + + + /** + * Loads a theme. + * + * @param in The input stream to read from. This will be closed when this + * method returns. + * @return The theme. + * @throws IOException If an IO error occurs. + * @see #save(OutputStream) + */ + public static Theme load(InputStream in) throws IOException { + return load(in, null); + } + + + /** + * Loads a theme. + * + * @param in The input stream to read from. This will be closed when this + * method returns. + * @param baseFont The default font to use for any "base font" properties + * not specified in the theme XML. If this is null, + * a default monospaced font will be used. + * @return The theme. + * @throws IOException If an IO error occurs. + * @see #save(OutputStream) + */ + public static Theme load(InputStream in, Font baseFont) throws IOException { + + Theme theme = new Theme(baseFont); + + BufferedInputStream bin = new BufferedInputStream(in); + try { + XmlHandler.load(theme, bin); + } finally { + bin.close(); + } + + return theme; + + } + + + /** + * Saves this theme to an output stream. + * + * @param out The output stream to write to. + * @throws IOException If an IO error occurs. + * @see #load(InputStream) + */ + public void save(OutputStream out) throws IOException { + + BufferedOutputStream bout = new BufferedOutputStream(out); + try { + + DocumentBuilder db = DocumentBuilderFactory.newInstance(). + newDocumentBuilder(); + DOMImplementation impl = db.getDOMImplementation(); + + Document doc = impl.createDocument(null, "RSyntaxTheme", null); + Element root = doc.getDocumentElement(); + root.setAttribute("version", "1.0"); + + Element elem = doc.createElement("baseFont"); + if (!baseFont.getFamily().equals( + RSyntaxTextArea.getDefaultFont().getFamily())) { + elem.setAttribute("family", baseFont.getFamily()); + } + elem.setAttribute("size", Integer.toString(baseFont.getSize())); + root.appendChild(elem); + + elem = doc.createElement("background"); + elem.setAttribute("color", colorToString(bgColor)); + root.appendChild(elem); + + elem = doc.createElement("caret"); + elem.setAttribute("color", colorToString(caretColor)); + root.appendChild(elem); + + elem = doc.createElement("selection"); + elem.setAttribute("useFG", Boolean.toString(useSelctionFG)); + elem.setAttribute("fg", colorToString(selectionFG)); + elem.setAttribute("bg", colorToString(selectionBG)); + elem.setAttribute("roundedEdges", Boolean.toString(selectionRoundedEdges)); + root.appendChild(elem); + + elem = doc.createElement("currentLineHighlight"); + elem.setAttribute("color", colorToString(currentLineHighlight)); + elem.setAttribute("fade", Boolean.toString(fadeCurrentLineHighlight)); + root.appendChild(elem); + + elem = doc.createElement("marginLine"); + elem.setAttribute("fg", colorToString(marginLineColor)); + root.appendChild(elem); + + elem = doc.createElement("markAllHighlight"); + elem.setAttribute("color", colorToString(markAllHighlightColor)); + root.appendChild(elem); + + elem = doc.createElement("markOccurrencesHighlight"); + elem.setAttribute("color", colorToString(markOccurrencesColor)); + elem.setAttribute("border", Boolean.toString(markOccurrencesBorder)); + root.appendChild(elem); + + elem = doc.createElement("matchedBracket"); + elem.setAttribute("fg", colorToString(matchedBracketFG)); + elem.setAttribute("bg", colorToString(matchedBracketBG)); + elem.setAttribute("highlightBoth", Boolean.toString(matchedBracketHighlightBoth)); + elem.setAttribute("animate", Boolean.toString(matchedBracketAnimate)); + root.appendChild(elem); + + elem = doc.createElement("hyperlinks"); + elem.setAttribute("fg", colorToString(hyperlinkFG)); + root.appendChild(elem); + + elem = doc.createElement("secondaryLanguages"); + for (int i=0; i0) { + elem.setAttribute("fontSize", + Integer.toString(lineNumberFontSize)); + } + root.appendChild(elem); + + elem = doc.createElement("foldIndicator"); + elem.setAttribute("fg", colorToString(foldIndicatorFG)); + elem.setAttribute("iconBg", colorToString(foldBG)); + elem.setAttribute("iconArmedBg", colorToString(armedFoldBG)); + root.appendChild(elem); + + elem = doc.createElement("iconRowHeader"); + elem.setAttribute("activeLineRange", colorToString(activeLineRangeColor)); + elem.setAttribute("inheritsGutterBG", Boolean.toString(iconRowHeaderInheritsGutterBG)); + root.appendChild(elem); + + elem = doc.createElement("tokenStyles"); + Field[] fields = TokenTypes.class.getFields(); + for (int i=0; i + * "$00ff00" + * "00ff00" + * + * will return new Color(0, 255, 0). + * + * @param s The string to evaluate. + * @return The color. + */ + private static Color stringToColor(String s) { + return stringToColor(s, null); + } + + + /** + * Returns the color represented by a string. The input is expected to + * be a 6-digit hex string, optionally prefixed by a '$'. For example, + * either of the following: + *

+	 * "$00ff00"
+	 * "00ff00"
+	 * 
+ * will return new Color(0, 255, 0). + * + * @param s The string to evaluate. + * @param defaultVal The color to use if s is + * "default". + * @return The color. + */ + private static Color stringToColor(String s, Color defaultVal) { + if (s==null || "default".equalsIgnoreCase(s)) { + return defaultVal; + } + if (s.length()==6 || s.length()==7) { + if (s.charAt(0)=='$') { + s = s.substring(1); + } + return new Color(Integer.parseInt(s, 16)); + } + return null; + } + + + /** + * Loads a SyntaxScheme from an XML file. + */ + private static class XmlHandler extends DefaultHandler { + + private Theme theme; + + @Override + public void error(SAXParseException e) throws SAXException { + throw e; + } + + @Override + public void fatalError(SAXParseException e) throws SAXException { + throw e; + } + + public static void load(Theme theme, InputStream in) throws IOException { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(true); + try { + SAXParser parser = spf.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + XmlHandler handler = new XmlHandler(); + handler.theme = theme; + reader.setEntityResolver(handler); + reader.setContentHandler(handler); + reader.setDTDHandler(handler); + reader.setErrorHandler(handler); + InputSource is = new InputSource(in); + is.setEncoding("UTF-8"); + reader.parse(is); + } catch (/*SAX|ParserConfiguration*/Exception se) { + throw new IOException(se.toString()); + } + } + + private static int parseInt(Attributes attrs, String attr, + int def) { + int value = def; + String temp = attrs.getValue(attr); + if (temp != null) { + try { + value = Integer.parseInt(temp); + } catch (NumberFormatException nfe) { + nfe.printStackTrace(); + } + } + return value; + } + + @Override + public InputSource resolveEntity(String publicID, + String systemID) throws SAXException { + return new InputSource(getClass(). + getResourceAsStream("themes/theme.dtd")); + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attrs) { + + if ("background".equals(qName)) { + + String color = attrs.getValue("color"); + if (color!=null) { + theme.bgColor = stringToColor(color, getDefaultBG()); + theme.gutterBackgroundColor = theme.bgColor; + } + else { + String img = attrs.getValue("image"); + if (img!=null) { + throw new IllegalArgumentException("Not yet implemented"); + } + } + } + + // The base font to use in the editor. + else if ("baseFont".equals(qName)) { + int size = theme.baseFont.getSize(); + String sizeStr = attrs.getValue("size"); + if (sizeStr!=null) { + size = Integer.parseInt(sizeStr); + } + String family = attrs.getValue("family"); + if (family!=null) { + theme.baseFont = getFont(family, Font.PLAIN, size); + } + else if (sizeStr!=null) { + // No family specified, keep original family + theme.baseFont = theme.baseFont.deriveFont(size*1f); + } + } + + else if ("caret".equals(qName)) { + String color = attrs.getValue("color"); + theme.caretColor = stringToColor(color); + } + + else if ("currentLineHighlight".equals(qName)) { + String color = attrs.getValue("color"); + theme.currentLineHighlight = stringToColor(color); + String fadeStr = attrs.getValue("fade"); + boolean fade = Boolean.parseBoolean(fadeStr); + theme.fadeCurrentLineHighlight = fade; + } + + else if ("foldIndicator".equals(qName)) { + String color = attrs.getValue("fg"); + theme.foldIndicatorFG = stringToColor(color); + color = attrs.getValue("iconBg"); + theme.foldBG = stringToColor(color); + color = attrs.getValue("iconArmedBg"); + theme.armedFoldBG = stringToColor(color); + } + + else if ("gutterBackground".equals(qName)) { + String color = attrs.getValue("color"); + if (color!=null) { + theme.gutterBackgroundColor = stringToColor(color); + } + } + + else if ("gutterBorder".equals(qName)) { + String color = attrs.getValue("color"); + theme.gutterBorderColor = stringToColor(color); + } + + else if ("iconRowHeader".equals(qName)) { + String color = attrs.getValue("activeLineRange"); + theme.activeLineRangeColor = stringToColor(color); + String inheritBGStr = attrs.getValue("inheritsGutterBG"); + theme.iconRowHeaderInheritsGutterBG = + inheritBGStr==null ? false : Boolean.valueOf(inheritBGStr); + } + + else if ("lineNumbers".equals(qName)) { + String color = attrs.getValue("fg"); + theme.lineNumberColor = stringToColor(color); + theme.lineNumberFont = attrs.getValue("fontFamily"); + theme.lineNumberFontSize = parseInt(attrs, "fontSize", -1); + } + + else if ("marginLine".equals(qName)) { + String color = attrs.getValue("fg"); + theme.marginLineColor = stringToColor(color); + } + + else if ("markAllHighlight".equals(qName)) { + String color = attrs.getValue("color"); + theme.markAllHighlightColor = stringToColor(color); + } + + else if ("markOccurrencesHighlight".equals(qName)) { + String color = attrs.getValue("color"); + theme.markOccurrencesColor = stringToColor(color); + String border = attrs.getValue("border"); + theme.markOccurrencesBorder = Boolean.parseBoolean(border); + } + + else if ("matchedBracket".equals(qName)) { + String fg = attrs.getValue("fg"); + theme.matchedBracketFG = stringToColor(fg); + String bg = attrs.getValue("bg"); + theme.matchedBracketBG = stringToColor(bg); + String highlightBoth = attrs.getValue("highlightBoth"); + theme.matchedBracketHighlightBoth = Boolean.parseBoolean(highlightBoth); + String animate = attrs.getValue("animate"); + theme.matchedBracketAnimate = Boolean.parseBoolean(animate); + } + + else if ("hyperlinks".equals(qName)) { + String fg = attrs.getValue("fg"); + theme.hyperlinkFG = stringToColor(fg); + } + + else if ("language".equals(qName)) { + String indexStr = attrs.getValue("index"); + int index = Integer.parseInt(indexStr) - 1; + if (theme.secondaryLanguages.length>index) { // Sanity + Color bg = stringToColor(attrs.getValue("bg")); + theme.secondaryLanguages[index] = bg; + } + } + + else if ("selection".equals(qName)) { + String useStr = attrs.getValue("useFG"); + theme.useSelctionFG = Boolean.parseBoolean(useStr); + String color = attrs.getValue("fg"); + theme.selectionFG = stringToColor(color, + getDefaultSelectionFG()); + //System.out.println(theme.selectionFG); + color = attrs.getValue("bg"); + theme.selectionBG = stringToColor(color, + getDefaultSelectionBG()); + String roundedStr = attrs.getValue("roundedEdges"); + theme.selectionRoundedEdges = Boolean.parseBoolean(roundedStr); + } + + // Start of the syntax scheme definition + else if ("tokenStyles".equals(qName)) { + theme.scheme = new SyntaxScheme(theme.baseFont, false); + } + + // A style in the syntax scheme + else if ("style".equals(qName)) { + + String type = attrs.getValue("token"); + Field field = null; + try { + field = Token.class.getField(type); + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + System.err.println("Invalid token type: " + type); + return; + } + + if (field.getType()==int.class) { + + int index = 0; + try { + index = field.getInt(theme.scheme); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return; + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + String fgStr = attrs.getValue("fg"); + Color fg = stringToColor(fgStr); + theme.scheme.getStyle(index).foreground = fg; + + String bgStr = attrs.getValue("bg"); + Color bg = stringToColor(bgStr); + theme.scheme.getStyle(index).background = bg; + + Font font = theme.baseFont; + String familyName = attrs.getValue("fontFamily"); + if (familyName!=null) { + font = getFont(familyName, font.getStyle(), + font.getSize()); + } + String sizeStr = attrs.getValue("fontSize"); + if (sizeStr!=null) { + try { + float size = Float.parseFloat(sizeStr); + size = Math.max(size, 1f); + font = font.deriveFont(size); + } catch (NumberFormatException nfe) { + nfe.printStackTrace(); + } + } + theme.scheme.getStyle(index).font = font; + + boolean styleSpecified = false; + boolean bold = false; + boolean italic = false; + String boldStr = attrs.getValue("bold"); + if (boldStr!=null) { + bold = Boolean.parseBoolean(boldStr); + styleSpecified = true; + } + String italicStr = attrs.getValue("italic"); + if (italicStr!=null) { + italic = Boolean.parseBoolean(italicStr); + styleSpecified = true; + } + if (styleSpecified) { + int style = 0; + if (bold) { + style |= Font.BOLD; + } + if (italic) { + style |= Font.ITALIC; + } + Font orig = theme.scheme.getStyle(index).font; + theme.scheme.getStyle(index).font = + orig.deriveFont(style); + } + + String ulineStr = attrs.getValue("underline"); + if (ulineStr!=null) { + boolean uline= Boolean.parseBoolean(ulineStr); + theme.scheme.getStyle(index).underline = uline; + } + + } + + } + + } + + @Override + public void warning(SAXParseException e) throws SAXException { + throw e; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/Token.java b/src/org/fife/ui/rsyntaxtextarea/Token.java new file mode 100644 index 0000000..b337767 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/Token.java @@ -0,0 +1,567 @@ +/* + * 02/21/2004 + * + * Token.java - A token used in syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Rectangle; + +import javax.swing.text.TabExpander; + + +/** + * A generic token that functions as a node in a linked list of syntax + * highlighted tokens for some language.

+ * + * A Token is a piece of text representing some logical token in + * source code for a programming language. For example, the line of C code:

+ *

+ * int i = 0;
+ * 
+ * would be broken into 8 Tokens: the first representing + * int, the second whitespace, the third i, the fourth + * whitespace, the fifth =, etc.

+ * + * Note: The tokens returned by {@link RSyntaxDocument}s are pooled and + * should always be treated as immutable. Modifying tokens you did not create + * yourself can and will result in rendering issues and/or runtime exceptions. + * You have been warned! + * + * @author Robert Futrell + * @version 0.3 + */ +public interface Token extends TokenTypes { + + /** + * Appends HTML code for painting this token, using the given text area's + * color scheme. + * + * @param sb The buffer to append to. + * @param textArea The text area whose color scheme to use. + * @param fontFamily Whether to include the font family in the HTML for + * this token. You can pass false for this parameter + * if, for example, you are making all your HTML be monospaced, + * and don't want any crazy fonts being used in the editor to be + * reflected in your HTML. + * @return The buffer appended to. + * @see #getHTMLRepresentation(RSyntaxTextArea) + */ + StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, + boolean fontFamily); + + + /** + * Appends HTML code for painting this token, using the given text area's + * color scheme. + * + * @param sb The buffer to append to. + * @param textArea The text area whose color scheme to use. + * @param fontFamily Whether to include the font family in the HTML for + * this token. You can pass false for this parameter + * if, for example, you are making all your HTML be monospaced, + * and don't want any crazy fonts being used in the editor to be + * reflected in your HTML. + * @param tabsToSpaces Whether to convert tabs into spaces. + * @return The buffer appended to. + * @see #getHTMLRepresentation(RSyntaxTextArea) + */ + StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, boolean fontFamily, + boolean tabsToSpaces); + + + /** + * Returns the character at the specified offset in the token. + * + * @param index The index. This should be in the range + * 0-({@link #length()}-1). + * @return The character. + * @see #length() + */ + char charAt(int index); + + + /** + * Returns whether the token straddles the specified position in the + * document. + * + * @param pos The position in the document to check. + * @return Whether the specified position is straddled by this token. + */ + boolean containsPosition(int pos); + + + /** + * Returns the position in the token's internal char array corresponding + * to the specified document position.

+ * Note that this method does NOT do any bounds checking; you can pass in + * a document position that does not correspond to a position in this + * token, and you will not receive an Exception or any other notification; + * it is up to the caller to ensure valid input. + * + * @param pos A position in the document that is represented by this token. + * @return The corresponding token position >= textOffset + * and < textOffset+textCount. + * @see #tokenToDocument + */ + int documentToToken(int pos); + + + /** + * Returns whether this token's lexeme ends with the specified characters. + * + * @param ch The characters. + * @return Whether this token's lexeme ends with the specified characters. + * @see #startsWith(char[]) + */ + boolean endsWith(char[] ch); + + + /** + * Returns the end offset of this token in the document (exclusive). In + * other words, the token ranges from + * [getOffset(), getEndOffset()). + * + * @return The end offset of this token. + * @see #getOffset() + */ + int getEndOffset(); + + + /** + * Returns a String containing HTML code for painting this + * token, using the given text area's color scheme. + * + * @param textArea The text area whose color scheme to use. + * @return The HTML representation of the token. + * @see #appendHTMLRepresentation(StringBuilder, RSyntaxTextArea, boolean) + */ + String getHTMLRepresentation(RSyntaxTextArea textArea); + + + /** + * Returns the language index of this token. + * + * @return The language index. A value of 0 denotes the + * "main" language, any positive value denotes a specific secondary + * language. + * @see #setLanguageIndex(int) + */ + int getLanguageIndex(); + + + /** + * Returns the last token in this list that is not whitespace or a + * comment. + * + * @return The last non-comment, non-whitespace token, or null + * if there isn't one. + */ + Token getLastNonCommentNonWhitespaceToken(); + + + /** + * Returns the last paintable token in this token list, or null + * if there is no paintable token. + * + * @return The last paintable token in this token list. + */ + Token getLastPaintableToken(); + + + /** + * Returns the text of this token, as a string.

+ * + * Note that this method isn't used much by the + * ryntaxtextarea package internally, as it tries to limit + * memory allocation. + * + * @return The text of this token. + */ + String getLexeme(); + + + /** + * Determines the offset into this token list (i.e., into the + * document) that covers pixel location x if the token list + * starts at pixel location x0

. + * This method will return the document position "closest" to the + * x-coordinate (i.e., if they click on the "right-half" of the + * w in awe, the caret will be placed in + * between the w and e; similarly, clicking on + * the left-half places the caret between the a and + * w). This makes it useful for methods such as + * viewToModel found in javax.swing.text.View + * subclasses. + * + * @param textArea The text area from which the token list was derived. + * @param e How to expand tabs. + * @param x0 The pixel x-location that is the beginning of + * tokenList. + * @param x The pixel-position for which you want to get the corresponding + * offset. + * @return The position (in the document, NOT into the token list!) that + * covers the pixel location. If tokenList is + * null or has type Token.NULL, then + * -1 is returned; the caller should recognize this and + * return the actual end position of the (empty) line. + */ + int getListOffset(RSyntaxTextArea textArea, TabExpander e, + float x0, float x); + + + /** + * Returns the token after this one in the linked list. + * + * @return The next token. + */ + Token getNextToken(); + + + /** + * Returns the offset into the document at which this token resides. + * + * @return The offset into the document. + * @see #getEndOffset() + */ + int getOffset(); + + + /** + * Returns the position in the document that represents the last character + * in the token that will fit into endBeforeX-startX pixels. + * For example, if you're using a monospaced 8-pixel-per-character font, + * have the token "while" and startX is 0 and + * endBeforeX is 30, this method will return the + * document position of the "i" in "while", because the "i" ends at pixel + * 24, while the "l" ends at 32. If not even the + * first character fits in endBeforeX-startX, the first + * character's position is still returned so calling methods don't go into + * infinite loops. + * + * @param textArea The text area in which this token is being painted. + * @param e How to expand tabs. + * @param startX The x-coordinate at which the token will be painted. This + * is needed because of tabs. + * @param endBeforeX The x-coordinate for which you want to find the last + * character of t which comes before it. + * @return The last document position that will fit in the specified amount + * of pixels. + */ + /* + * @see #getTokenListOffsetBeforeX + * FIXME: This method does not compute correctly! It needs to be abstract + * and implemented by subclasses. + */ + int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, + float startX, float endBeforeX); + + + /** + * Returns the character array backing the lexeme of this token. This + * value should be treated as read-only. + * + * @return A character array containing the lexeme of this token. + * @see #getTextOffset() + * @see #length() + */ + char[] getTextArray(); + + + /** + * Returns the offset into the character array of the lexeme in + * {@link #getTextArray()}. + * + * @return The offset of the lexeme in the character array. + * @see #getTextArray() + */ + int getTextOffset(); + + + /** + * Returns the type of this token. + * + * @return The type of this token. + * @see TokenTypes + * @see #setType(int) + */ + int getType(); + + + /** + * Returns the width of this token given the specified parameters. + * + * @param textArea The text area in which the token is being painted. + * @param e Describes how to expand tabs. This parameter cannot be + * null. + * @param x0 The pixel-location at which the token begins. This is needed + * because of tabs. + * @return The width of the token, in pixels. + * @see #getWidthUpTo + */ + float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0); + + + /** + * Returns the width of a specified number of characters in this token. + * For example, for the token "while", specifying a value of 3 + * here returns the width of the "whi" portion of the token. + * + * @param numChars The number of characters for which to get the width. + * @param textArea The text area in which the token is being painted. + * @param e How to expand tabs. This value cannot be null. + * @param x0 The pixel-location at which this token begins. This is needed + * because of tabs. + * @return The width of the specified number of characters in this token. + * @see #getWidth + */ + float getWidthUpTo(int numChars, RSyntaxTextArea textArea, + TabExpander e, float x0); + + + /** + * Returns whether this token's lexeme matches a specific character array. + * + * @param lexeme The lexeme to check for. + * @return Whether this token has that lexeme. + * @see #is(int, char[]) + * @see #is(int, String) + * @see #isSingleChar(int, char) + * @see #startsWith(char[]) + */ + boolean is(char[] lexeme); + + + /** + * Returns whether this token is of the specified type, with the specified + * lexeme.

+ * This method is preferred over the other overload in performance-critical + * code where this operation may be called frequently, since it does not + * involve any String allocations. + * + * @param type The type to check for. + * @param lexeme The lexeme to check for. + * @return Whether this token has that type and lexeme. + * @see #is(int, String) + * @see #is(char[]) + * @see #isSingleChar(int, char) + * @see #startsWith(char[]) + */ + boolean is(int type, char[] lexeme); + + + /** + * Returns whether this token is of the specified type, with the specified + * lexeme.

+ * The other overload of this method is preferred over this one in + * performance-critical code, as this one involves a String allocation + * while the other does not. + * + * @param type The type to check for. + * @param lexeme The lexeme to check for. + * @return Whether this token has that type and lexeme. + * @see #is(int, char[]) + * @see #isSingleChar(int, char) + * @see #startsWith(char[]) + */ + boolean is(int type, String lexeme); + + + /** + * Returns whether this token is a comment. + * + * @return Whether this token is a comment. + * @see #isWhitespace() + * @see #isCommentOrWhitespace() + */ + boolean isComment(); + + + /** + * Returns whether this token is a comment or whitespace. + * + * @return Whether this token is a comment or whitespace. + * @see #isComment() + * @see #isWhitespace() + */ + boolean isCommentOrWhitespace(); + + + /** + * Returns whether this token is a hyperlink. + * + * @return Whether this token is a hyperlink. + * @see #setHyperlink(boolean) + */ + boolean isHyperlink(); + + + /** + * Returns whether this token is an identifier. + * + * @return Whether this token is an identifier. + */ + boolean isIdentifier(); + + + /** + * Returns whether this token is a {@link #SEPARATOR} representing a single + * left curly brace. + * + * @return Whether this token is a left curly brace. + * @see #isRightCurly() + */ + boolean isLeftCurly(); + + + /** + * Returns whether this token is a {@link #SEPARATOR} representing a single + * right curly brace. + * + * @return Whether this token is a right curly brace. + * @see #isLeftCurly() + */ + boolean isRightCurly(); + + + /** + * Returns whether or not this token is "paintable;" i.e., whether or not + * the type of this token is one such that it has an associated syntax + * style. What this boils down to is whether the token type is greater + * than Token.NULL. + * + * @return Whether or not this token is paintable. + */ + boolean isPaintable(); + + + /** + * Returns whether this token is the specified single character. + * + * @param ch The character to check for. + * @return Whether this token's lexeme is the single character specified. + * @see #isSingleChar(int, char) + */ + boolean isSingleChar(char ch); + + + /** + * Returns whether this token is the specified single character, and of a + * specific type. + * + * @param type The token type. + * @param ch The character to check for. + * @return Whether this token is of the specified type, and with a lexeme + * Equaling the single character specified. + * @see #isSingleChar(char) + */ + boolean isSingleChar(int type, char ch); + + + /** + * Returns whether or not this token is whitespace. + * + * @return true iff this token is whitespace. + * @see #isComment() + * @see #isCommentOrWhitespace() + */ + boolean isWhitespace(); + + + /** + * Returns the length of this token. + * + * @return The length of this token. + * @see #getOffset() + */ + int length(); + + + /** + * Returns the bounding box for the specified document location. The + * location must be in the specified token list; if it isn't, + * null is returned. + * + * @param textArea The text area from which the token list was derived. + * @param e How to expand tabs. + * @param pos The position in the document for which to get the bounding + * box in the view. + * @param x0 The pixel x-location that is the beginning of + * tokenList. + * @param rect The rectangle in which we'll be returning the results. This + * object is reused to keep from frequent memory allocations. + * @return The bounding box for the specified position in the model. + */ + Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, + int pos, int x0, Rectangle rect); + + + /** + * Sets whether this token is a hyperlink. + * + * @param hyperlink Whether this token is a hyperlink. + * @see #isHyperlink() + */ + void setHyperlink(boolean hyperlink); + + + /** + * Sets the language index for this token. If this value is positive, it + * denotes a specific "secondary" language this token represents (such as + * JavaScript code or CSS embedded in an HTML file). If this value is + * 0, this token is in the "main" language being edited. + * Negative values are invalid and treated as 0. + * + * @param languageIndex The new language index. A value of + * 0 denotes the "main" language, any positive value + * denotes a specific secondary language. Negative values will + * be treated as 0. + * @see #getLanguageIndex() + */ + void setLanguageIndex(int languageIndex); + + + /** + * Sets the type of this token. + * + * @param type The new token type. + * @see TokenTypes + * @see #getType() + */ + void setType(int type); + + + /** + * Returns whether this token starts with the specified characters. + * + * @param chars The characters. + * @return Whether this token starts with those characters. + * @see #endsWith(char[]) + * @see #is(int, char[]) + */ + boolean startsWith(char[] chars); + + + /** + * Returns the position in the document corresponding to the specified + * position in this token's internal char array (textOffset - + * textOffset+textCount-1).

+ * Note that this method does NOT do any bounds checking; you can pass in + * an invalid token position, and you will not receive an Exception or any + * other indication that the returned document position is invalid. It is + * up to the user to ensure valid input. + * + * @param pos A position in the token's internal char array + * (textOffset - textOffset+textCount). + * @return The corresponding position in the document. + * @see #documentToToken(int) + */ + int tokenToDocument(int pos); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenFactory.java b/src/org/fife/ui/rsyntaxtextarea/TokenFactory.java new file mode 100644 index 0000000..3da0673 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenFactory.java @@ -0,0 +1,67 @@ +/* + * 10/28/2004 + * + * TokenFactory.java - Interface for a class that generates tokens of some type. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.text.Segment; + + +/** + * Interface for a class that generates tokens somehow. + * + * @author Robert Futrell + * @version 0.1 + */ +interface TokenFactory { + + + /** + * Returns a null token. + * + * @return A null token. + */ + TokenImpl createToken(); + + + /** + * Returns a token. + * + * @param line The segment from which to get the token's text. + * @param beg The starting offset of the token's text in the segment. + * @param end The ending offset of the token's text in the segment. + * @param startOffset The offset in the document of the token. + * @param type The type of token. + * @return The token. + */ + TokenImpl createToken(final Segment line, final int beg, + final int end, final int startOffset, final int type); + + + /** + * Returns a token. + * + * @param line The char array from which to get the token's text. + * @param beg The starting offset of the token's text in the char array. + * @param end The ending offset of the token's text in the char array. + * @param startOffset The offset in the document of the token. + * @param type The type of token. + * @return The token. + */ + TokenImpl createToken(final char[] line, final int beg, + final int end, final int startOffset, final int type); + + + /** + * Resets the state of this token maker. This method should be called + * by the TokenMaker every time a token list is generated for + * a new line so the tokens can be reused. + */ + void resetAllTokens(); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenImpl.java b/src/org/fife/ui/rsyntaxtextarea/TokenImpl.java new file mode 100644 index 0000000..22eaa66 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenImpl.java @@ -0,0 +1,962 @@ +/* + * 02/21/2004 + * + * Token.java - A token used in syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Rectangle; + +import javax.swing.text.Segment; +import javax.swing.text.TabExpander; +import javax.swing.text.Utilities; + + +/** + * The default implementation of {@link Token}.

+ * + * Note: The instances of Token returned by + * {@link RSyntaxDocument}s are pooled and should always be treated as + * immutable. They should not be cast to TokenImpl and modified. + * Modifying tokens you did not create yourself can and will result in + * rendering issues and/or runtime exceptions. You have been warned! + * + * @author Robert Futrell + * @version 0.3 + */ +@SuppressWarnings({ "checkstyle:visibilitymodifier" }) +public class TokenImpl implements Token { + + /** + * The text this token represents. This is implemented as a segment so we + * can point directly to the text in the document without having to make a + * copy of it. + */ + public char[] text; + public int textOffset; + public int textCount; + + /** + * The offset into the document at which this token resides. + */ + private int offset; + + /** + * The type of token this is; for example, {@link #FUNCTION}. + */ + private int type; + + /** + * Whether this token is a hyperlink. + */ + private boolean hyperlink; + + /** + * The next token in this linked list. + */ + private Token nextToken; + + /** + * The language this token is in, >= 0. + */ + private int languageIndex; + + + /** + * Creates a "null" token. The token itself is not null; rather, it + * signifies that it is the last token in a linked list of tokens and + * that it is not part of a "multi-line token." + */ + public TokenImpl() { + this.text = null; + this.textOffset = -1; + this.textCount = -1; + this.setType(NULL); + setOffset(-1); + hyperlink = false; + nextToken = null; + } + + + /** + * Constructor. + * + * @param line The segment from which to get the token. + * @param beg The first character's position in line. + * @param end The last character's position in line. + * @param startOffset The offset into the document at which this + * token begins. + * @param type A token type listed as "generic" above. + * @param languageIndex The language index for this token. + */ + public TokenImpl(Segment line, int beg, int end, int startOffset, int type, + int languageIndex) { + this(line.array, beg,end, startOffset, type, languageIndex); + } + + + /** + * Constructor. + * + * @param line The segment from which to get the token. + * @param beg The first character's position in line. + * @param end The last character's position in line. + * @param startOffset The offset into the document at which this + * token begins. + * @param type A token type listed as "generic" above. + * @param languageIndex The language index for this token. + */ + public TokenImpl(char[] line, int beg, int end, int startOffset, int type, + int languageIndex) { + this(); + set(line, beg,end, startOffset, type); + setLanguageIndex(languageIndex); + } + + + /** + * Creates this token as a copy of the passed-in token. + * + * @param t2 The token from which to make a copy. + */ + public TokenImpl(Token t2) { + this(); + copyFrom(t2); + } + + + @Override + public StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, + boolean fontFamily) { + return appendHTMLRepresentation(sb, textArea, fontFamily, false); + } + + + @Override + public StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, boolean fontFamily, + boolean tabsToSpaces) { + + SyntaxScheme colorScheme = textArea.getSyntaxScheme(); + Style scheme = colorScheme.getStyle(getType()); + Font font = textArea.getFontForTokenType(getType());//scheme.font; + + if (font.isBold()) { + sb.append(""); + } + if (font.isItalic()) { + sb.append(""); + } + if (scheme.underline || isHyperlink()) { + sb.append(""); + } + + boolean needsFontTag = fontFamily || !isWhitespace(); + if (needsFontTag) { + sb.append("'); + } + + // NOTE: Don't use getLexeme().trim() because whitespace tokens will + // be turned into NOTHING. + appendHtmlLexeme(textArea, sb, tabsToSpaces); + + if (needsFontTag) { + sb.append(""); + } + if (scheme.underline || isHyperlink()) { + sb.append(""); + } + if (font.isItalic()) { + sb.append(""); + } + if (font.isBold()) { + sb.append(""); + } + + return sb; + + } + + + /** + * Appends an HTML version of the lexeme of this token (i.e. no style + * HTML, but replacing chars such as \t, < + * and > with their escapes). + * + * @param textArea The text area. + * @param sb The buffer to append to. + * @param tabsToSpaces Whether to convert tabs into spaces. + * @return The same buffer. + */ + private StringBuilder appendHtmlLexeme(RSyntaxTextArea textArea, + StringBuilder sb, boolean tabsToSpaces) { + + boolean lastWasSpace = false; + int i = textOffset; + int lastI = i; + String tabStr = null; + + while (i': + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append(">"); + lastWasSpace = false; + break; + case '\'': + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append("'"); + lastWasSpace = false; + break; + case '"': + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append("""); + lastWasSpace = false; + break; + case '/': // OWASP-recommended to escape even though unnecessary + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append("/"); + lastWasSpace = false; + break; + default: + lastWasSpace = false; + break; + } + i++; + } + if (lastI=getOffset() && postextCount) { + return false; + } + final int start = textOffset + textCount - ch.length; + for (int i=0; iString of the form "#xxxxxx" good for use + * in HTML, representing the given color. + * + * @param color The color to get a string for. + * @return The HTML form of the color. If color is + * null, #000000 is returned. + */ + private static String getHTMLFormatForColor(Color color) { + if (color==null) { + return "black"; + } + String hexRed = Integer.toHexString(color.getRed()); + if (hexRed.length()==1) { + hexRed = "0" + hexRed; + } + String hexGreen = Integer.toHexString(color.getGreen()); + if (hexGreen.length()==1) { + hexGreen = "0" + hexGreen; + } + String hexBlue = Integer.toHexString(color.getBlue()); + if (hexBlue.length()==1) { + hexBlue = "0" + hexBlue; + } + return "#" + hexRed + hexGreen + hexBlue; + } + + + @Override + public String getHTMLRepresentation(RSyntaxTextArea textArea) { + StringBuilder buf = new StringBuilder(); + appendHTMLRepresentation(buf, textArea, true); + return buf.toString(); + } + + + @Override + public int getLanguageIndex() { + return languageIndex; + } + + + @Override + public Token getLastNonCommentNonWhitespaceToken() { + + Token last = null; + + for (Token t=this; t!=null && t.isPaintable(); t=t.getNextToken()) { + switch (t.getType()) { + case COMMENT_DOCUMENTATION: + case COMMENT_EOL: + case COMMENT_MULTILINE: + case COMMENT_KEYWORD: + case COMMENT_MARKUP: + case WHITESPACE: + break; + default: + last = t; + break; + } + } + + return last; + + } + + + @Override + public Token getLastPaintableToken() { + Token t = this; + while (t.isPaintable()) { + Token next = t.getNextToken(); + if (next==null || !next.isPaintable()) { + return t; + } + t = next; + } + return null; + } + + + @Override + public String getLexeme() { + return text==null ? null : new String(text, textOffset, textCount); + } + + + @Override + public int getListOffset(RSyntaxTextArea textArea, TabExpander e, + float x0, float x) { + + // If the coordinate in question is before this line's start, quit. + if (x0 >= x) { + return getOffset(); + } + + float currX = x0; // x-coordinate of current char. + float nextX = x0; // x-coordinate of next char. + float stableX = x0; // Cached ending x-coord. of last tab or token. + TokenImpl token = this; + int last = getOffset(); + FontMetrics fm = null; + + while (token != null && token.isPaintable()) { + + fm = textArea.getFontMetricsForTokenType(token.getType()); + char[] text = token.text; + int start = token.textOffset; + int end = start + token.textCount; + + for (int i = start; i < end; i++) { + currX = nextX; + if (text[i] == '\t') { + nextX = e.nextTabStop(nextX, 0); + stableX = nextX; // Cache ending x-coord. of tab. + start = i + 1; // Do charsWidth() from next char. + } + else { + nextX = stableX + fm.charsWidth(text, start, i - start + 1); + } + if (x >= currX && x < nextX) { + if ((x - currX) < (nextX - x)) { + return last + i - token.textOffset; + } + return last + i + 1 - token.textOffset; + } + } + + stableX = nextX; // Cache ending x-coordinate of token. + last += token.textCount; + token = (TokenImpl)token.getNextToken(); + + } + + // If we didn't find anything, return the end position of the text. + return last; + + } + + + @Override + public Token getNextToken() { + return nextToken; + } + + + @Override + public int getOffset() { + return offset; + } + + + @Override + public int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, + float startX, float endBeforeX) { + + FontMetrics fm = textArea.getFontMetricsForTokenType(getType()); + int i = textOffset; + int stop = i + textCount; + float x = startX; + + while (iendBeforeX) { + // If not even the first character fits into the space, go + // ahead and say the first char does fit so we don't go into + // an infinite loop. + int intoToken = Math.max(i-textOffset, 1); + return getOffset() + intoToken; + } + i++; + } + + // If we got here, the whole token fit in (endBeforeX-startX) pixels. + return getOffset() + textCount - 1; + + } + + + @Override + public char[] getTextArray() { + return text; + } + + + @Override + public int getTextOffset() { + return textOffset; + } + + + @Override + public int getType() { + return type; + } + + + @Override + public float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0) { + return getWidthUpTo(textCount, textArea, e, x0); + } + + + @Override + public float getWidthUpTo(int numChars, RSyntaxTextArea textArea, + TabExpander e, float x0) { + float width = x0; + FontMetrics fm = textArea.getFontMetricsForTokenType(getType()); + if (fm != null) { + int w; + int currentStart = textOffset; + int endBefore = textOffset + numChars; + for (int i = currentStart; i < endBefore; i++) { + if (text[i] == '\t') { + // Since TokenMaker implementations usually group all + // adjacent whitespace into a single token, there + // aren't usually any characters to compute a width + // for here, so we check before calling. + w = i - currentStart; + if (w > 0) { + width += fm.charsWidth(text, currentStart, w); + } + currentStart = i + 1; + width = e.nextTabStop(width, 0); + } + } + // Most (non-whitespace) tokens will have characters at this + // point to get the widths for, so we don't check for w>0 (mini- + // optimization). + w = endBefore - currentStart; + width += fm.charsWidth(text, currentStart, w); + } + return width - x0; + } + + + @Override + public int hashCode() { + return offset + (getLexeme()==null ? 0 : getLexeme().hashCode()); + } + + + @Override + public boolean is(char[] lexeme) { + if (textCount==lexeme.length) { + for (int i=0; i=Token.COMMENT_EOL && getType()<=Token.COMMENT_MARKUP; + } + + + @Override + public boolean isCommentOrWhitespace() { + return isComment() || isWhitespace(); + } + + + @Override + public boolean isHyperlink() { + return hyperlink; + } + + + @Override + public boolean isIdentifier() { + return getType()==IDENTIFIER; + } + + + @Override + public boolean isLeftCurly() { + return getType()==SEPARATOR && isSingleChar('{'); + } + + + @Override + public boolean isRightCurly() { + return getType()==SEPARATOR && isSingleChar('}'); + } + + + @Override + public boolean isPaintable() { + return getType()>Token.NULL; + } + + + @Override + public boolean isSingleChar(char ch) { + return textCount==1 && text[textOffset]==ch; + } + + + @Override + public boolean isSingleChar(int type, char ch) { + return this.getType()==type && isSingleChar(ch); + } + + + @Override + public boolean isWhitespace() { + return getType()==WHITESPACE; + } + + + @Override + public int length() { + return textCount; + } + + + @Override + public Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, + int pos, int x0, Rectangle rect) { + + int stableX = x0; // Cached ending x-coord. of last tab or token. + TokenImpl token = this; + FontMetrics fm = null; + Segment s = new Segment(); + + while (token != null && token.isPaintable()) { + + fm = textArea.getFontMetricsForTokenType(token.getType()); + if (fm == null) { + return rect; // Don't return null as things'll error. + } + char[] text = token.text; + int start = token.textOffset; + int end = start + token.textCount; + + // If this token contains the position for which to get the + // bounding box... + if (token.containsPosition(pos)) { + + s.array = token.text; + s.offset = token.textOffset; + s.count = pos - token.getOffset(); + + // Must use this (actually fm.charWidth()), and not + // fm.charsWidth() for returned value to match up with where + // text is actually painted on OS X! + int w = Utilities.getTabbedTextWidth(s, fm, stableX, e, + token.getOffset()); + rect.x = stableX + w; + end = token.documentToToken(pos); + + if (text[end] == '\t') { + rect.width = fm.charWidth(' '); + } + else { + rect.width = fm.charWidth(text[end]); + } + + return rect; + + } + + // If this token does not contain the position for which to get + // the bounding box... + else { + s.array = token.text; + s.offset = token.textOffset; + s.count = token.textCount; + stableX += Utilities.getTabbedTextWidth(s, fm, stableX, e, + token.getOffset()); + } + + token = (TokenImpl)token.getNextToken(); + + } + + // If we didn't find anything, we're at the end of the line. Return + // a width of 1 (so selection highlights don't extend way past line's + // text). A ConfigurableCaret will know to paint itself with a larger + // width. + rect.x = stableX; + rect.width = 1; + return rect; + + } + + + /** + * Makes this token start at the specified offset into the document.

+ * + * Note: You should not modify Token instances you + * did not create yourself (e.g., came from an + * RSyntaxDocument). If you do, rendering issues and/or + * runtime exceptions will likely occur. You have been warned! + * + * @param pos The offset into the document this token should start at. + * Note that this token must already contain this position; if + * it doesn't, an exception is thrown. + * @throws IllegalArgumentException If pos is not already contained by + * this token. + * @see #moveOffset(int) + */ + public void makeStartAt(int pos) { + if (pos=(getOffset()+textCount)) { + throw new IllegalArgumentException("pos " + pos + + " is not in range " + getOffset() + "-" + (getOffset()+textCount-1)); + } + int shift = pos - getOffset(); + setOffset(pos); + textOffset += shift; + textCount -= shift; + } + + + /** + * Moves the starting offset of this token.

+ * + * Note: You should not modify Token instances you + * did not create yourself (e.g., came from an + * RSyntaxDocument). If you do, rendering issues and/or + * runtime exceptions will likely occur. You have been warned! + * + * @param amt The amount to move the starting offset. This should be + * between 0 and textCount, inclusive. + * @throws IllegalArgumentException If amt is an invalid value. + * @see #makeStartAt(int) + */ + public void moveOffset(int amt) { + if (amt<0 || amt>textCount) { + throw new IllegalArgumentException("amt " + amt + + " is not in range 0-" + textCount); + } + setOffset(getOffset() + amt); + textOffset += amt; + textCount -= amt; + } + + + /** + * Sets the value of this token to a particular segment of a document. + * The "next token" value is cleared. + * + * @param line The segment from which to get the token. + * @param beg The first character's position in line. + * @param end The last character's position in line. + * @param offset The offset into the document at which this token begins. + * @param type A token type listed as "generic" above. + */ + public void set(final char[] line, final int beg, final int end, + final int offset, final int type) { + this.text = line; + this.textOffset = beg; + this.textCount = end - beg + 1; + this.setType(type); + this.setOffset(offset); + nextToken = null; + } + + + /** + * Sets whether this token is a hyperlink. + * + * @param hyperlink Whether this token is a hyperlink. + * @see #isHyperlink() + */ + @Override + public void setHyperlink(boolean hyperlink) { + this.hyperlink = hyperlink; + } + + + /** + * Sets the language index for this token. If this value is positive, it + * denotes a specific "secondary" language this token represents (such as + * JavaScript code or CSS embedded in an HTML file). If this value is + * 0, this token is in the "main" language being edited. + * Negative values are invalid and treated as 0. + * + * @param languageIndex The new language index. A value of + * 0 denotes the "main" language, any positive value + * denotes a specific secondary language. Negative values will + * be treated as 0. + * @see #getLanguageIndex() + */ + @Override + public void setLanguageIndex(int languageIndex) { + this.languageIndex = languageIndex; + } + + + /** + * Sets the "next token" pointer of this token to point to the specified + * token. + * + * @param nextToken The new next token. + * @see #getNextToken() + */ + public void setNextToken(Token nextToken) { + this.nextToken = nextToken; + } + + + /** + * Sets the offset into the document at which this token resides. + * + * @param offset The new offset into the document. + * @see #getOffset() + */ + public void setOffset(int offset) { + this.offset = offset; + } + + + /** + * {@inheritDoc} + */ + @Override + public void setType(int type) { + this.type = type; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean startsWith(char[] chars) { + if (chars.length<=textCount){ + for (int i=0; iString, which is useful for + * debugging. + * + * @return A string describing this token. + */ + @Override + public String toString() { + return "[Token: " + + (getType()==Token.NULL ? "" : + "text: '" + + (text==null ? "" : getLexeme() + "'; " + + "offset: " + getOffset() + "; type: " + getType() + "; " + + "isPaintable: " + isPaintable() + + "; nextToken==null: " + (nextToken==null))) + + "]"; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenIterator.java b/src/org/fife/ui/rsyntaxtextarea/TokenIterator.java new file mode 100644 index 0000000..8404374 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenIterator.java @@ -0,0 +1,127 @@ +/* + * 08/28/2013 + * + * TokenIterator.java - An iterator over the Tokens in an RSyntaxDocument. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.util.Iterator; + + +/** + * Allows you to iterate through all paintable tokens in an + * RSyntaxDocument. + * + * @author Robert Futrell + * @version 1.0 + */ +class TokenIterator implements Iterator { + + private RSyntaxDocument doc; + private int curLine; + private Token token; + + + /** + * Constructor. + * + * @param doc The document whose tokens we should iterate over. + */ + TokenIterator(RSyntaxDocument doc) { + this.doc = doc; + loadTokenListForCurLine(); + int lineCount = getLineCount(); + while ((token==null || !token.isPaintable()) && curLineToken removal is not supported. + * + * @throws UnsupportedOperationException always. + */ + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/TokenMaker.java new file mode 100644 index 0000000..b9bd85e --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenMaker.java @@ -0,0 +1,190 @@ +/* + * 02/24/2004 + * + * TokenMaker.java - An object that can take a chunk of text and return a + * linked list of Tokens representing it. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.Action; +import javax.swing.text.Segment; + + +/** + * An implementation of TokenMaker is a class that turns text into + * a linked list of Tokens for syntax highlighting + * in a particular language. + * + * @see Token + * @see AbstractTokenMaker + * + * @author Robert Futrell + * @version 0.2 + */ +public interface TokenMaker { + + + /** + * Adds a null token to the end of the current linked list of tokens. + * This should be put at the end of the linked list whenever the last + * token on the current line is NOT a multi-line token. + */ + public void addNullToken(); + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array from which to get the text. + * @param start Start offset in segment of token. + * @param end End offset in segment of token. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset); + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + * + * @param type The token type. + * @return The closest "standard" token type. If a mapping is not defined + * for this language, then type is returned. + */ + public int getClosestStandardTokenTypeForInternalType(int type); + + + /** + * Returns whether this programming language uses curly braces + * ('{' and '}') to denote code blocks. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return Whether curly braces denote code blocks. + */ + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex); + + + /** + * Returns the last token on this line's type if the token is "unfinished", + * or {@link Token#NULL} if it was finished. For example, if C-style + * syntax highlighting is being implemented, and text + * contained a line of code that contained the beginning of a comment but + * no end-comment marker ("*\/"), then this method would return + * {@link Token#COMMENT_MULTILINE} for that line. This is useful + * for doing syntax highlighting. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return The last token on this line's type, or {@link Token#NULL} + * if the line was completed. + */ + public int getLastTokenTypeOnLine(Segment text, int initialTokenType); + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in this programming language. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return The start and end strings to add to a line to "comment" + * it out. A null value for either means there + * is no string to add for that part. A value of + * null for the array means this language + * does not support commenting/uncommenting lines. + */ + public String[] getLineCommentStartAndEnd(int languageIndex); + + + /** + * Returns an action to handle "insert break" key presses (i.e. Enter). + * + * @return The action, or null if the default action should + * be used. + */ + public Action getInsertBreakAction(); + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + public boolean getMarkOccurrencesOfTokenType(int type); + + + /** + * Returns the object in charge of marking all occurrences of the token + * at the current caret position, if it is a relevant token. If + * null is returned, a default OccurrenceMarker + * is used. + * + * @return The occurrence marker for this language, or null + * for none. + */ + public OccurrenceMarker getOccurrenceMarker(); + + + /** + * If a line ends in the specified token, this method returns whether + * a new line inserted after that line should be indented. + * + * @param token The token the previous line ends with. + * @return Whether the next line should be indented. + */ + public boolean getShouldIndentNextLineAfter(Token token); + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, + int startOffset); + + + /** + * Returns whether a character could be part of an "identifier" token + * in a specific language. This is used to identify such things as the + * bounds of the "word" to select on double-clicking. + * + * @param languageIndex The language index the character was found in. + * @param ch The character. + * @return Whether the character could be part of an "identifier" token. + */ + public boolean isIdentifierChar(int languageIndex, char ch); + + + /** + * Returns whether this language is a markup language. + * + * @return Whether this language is markup. + */ + public boolean isMarkupLanguage(); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java b/src/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java new file mode 100644 index 0000000..bcbcafc --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java @@ -0,0 +1,340 @@ +/* + * 08/26/2004 + * + * TokenMakerBase.java - A base class for token makers. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.Action; +import javax.swing.text.Segment; + + +/** + * Base class for token makers. + * + * @author Robert Futrell + * @version 1.0 + */ +public abstract class TokenMakerBase implements TokenMaker { + + /** + * The first token in the returned linked list. + */ + protected TokenImpl firstToken; + + /** + * Used in the creation of the linked list. + */ + protected TokenImpl currentToken; + + /** + * Used in the creation of the linked list. + */ + protected TokenImpl previousToken; + + /** + * The factory that gives us our tokens to use. + */ + private TokenFactory tokenFactory; + + /** + * Highlights occurrences of the current token in the editor, if it is + * relevant. + */ + private OccurrenceMarker occurrenceMarker; + + /** + * "0" implies this is the "main" language being highlighted. Positive + * values imply various "secondary" or "embedded" languages, such as CSS + * or JavaScript in HTML. While this value is non-zero, tokens will be + * generated with this language index so they can (possibly) be painted + * differently, so "embedded" languages can be rendered with a special + * background. + */ + private int languageIndex; + + + /** + * Constructor. + */ + public TokenMakerBase() { + firstToken = currentToken = previousToken = null; + tokenFactory = new DefaultTokenFactory(); + } + + + /** + * {@inheritDoc} + */ + @Override + public void addNullToken() { + if (firstToken==null) { + firstToken = tokenFactory.createToken(); + currentToken = firstToken; + } + else { + TokenImpl next = tokenFactory.createToken(); + currentToken.setNextToken(next); + previousToken = currentToken; + currentToken = next; + } + currentToken.setLanguageIndex(languageIndex); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param segment Segment to get text from. + * @param start Start offset in segment of token. + * @param end End offset in segment of token. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + public void addToken(Segment segment, int start, int end, int tokenType, + int startOffset) { + addToken(segment.array, start,end, tokenType, startOffset); + } + + + /** + * {@inheritDoc} + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset) { + addToken(array, start, end, tokenType, startOffset, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + + if (firstToken==null) { + firstToken = tokenFactory.createToken(array, start, end, + startOffset, tokenType); + currentToken = firstToken; // previous token is still null. + } + else { + TokenImpl next = tokenFactory.createToken(array, start,end, + startOffset, tokenType); + currentToken.setNextToken(next); + previousToken = currentToken; + currentToken = next; + } + + currentToken.setLanguageIndex(languageIndex); + currentToken.setHyperlink(hyperlink); + + } + + + /** + * Returns the occurrence marker to use for this token maker. Subclasses + * can override to use different implementations. + * + * @return The occurrence marker to use. + */ + protected OccurrenceMarker createOccurrenceMarker() { + return new DefaultOccurrenceMarker(); + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0).

+ * + * The default implementation returns type always, which + * denotes that a mapping from internal token types to standard token types + * is not defined; subclasses can override. + * + * @param type The token type. + * @return The closest "standard" token type. + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + return type; + } + + + /** + * Returns whether this programming language uses curly braces + * ('{' and '}') to denote code blocks. + * + * The default implementation returns false; subclasses can + * override this method if necessary. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return Whether curly braces denote code blocks. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return false; + } + + + /** + * Returns an action to handle "insert break" key presses (i.e. Enter). + * The default implementation returns null. Subclasses + * can override. + * + * @return The default implementation always returns null. + */ + @Override + public Action getInsertBreakAction() { + return null; + } + + + /** + * Returns the current language index. + * + * @return The current language index. + * @see #setLanguageIndex(int) + */ + protected int getLanguageIndex() { + return languageIndex; + } + + + /** + * {@inheritDoc} + */ + @Override + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + + // Last parameter doesn't matter if we're not painting. + Token t = getTokenList(text, initialTokenType, 0); + + while (t.getNextToken()!=null) { + t = t.getNextToken(); + } + + return t.getType(); + + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. The default + * implementation returns true if type is {@link Token#IDENTIFIER}. + * Subclasses can override this method to support other token types, such + * as {@link Token#VARIABLE}. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER; + } + + + /** + * {@inheritDoc} + */ + @Override + public OccurrenceMarker getOccurrenceMarker() { + if (occurrenceMarker==null) { + occurrenceMarker = createOccurrenceMarker(); + } + return occurrenceMarker; + } + + + /** + * The default implementation returns false always. Languages + * that wish to better support auto-indentation can override this method. + * + * @param token The token the previous line ends with. + * @return Whether the next line should be indented. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + return false; + } + + + /** + * Returns whether a character could be part of an "identifier" token + * in a specific language. The default implementation returns + * true for letters, numbers, and certain symbols. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='_' || ch=='$'; + } + + + /** + * The default implementation returns false always. + * Subclasses that are highlighting a markup language should override this + * method to return true. + * + * @return false always. + */ + @Override + public boolean isMarkupLanguage() { + return false; + } + + + /** + * Deletes the linked list of tokens so we can begin anew. This should + * never have to be called by the programmer, as it is automatically + * called whenever the user calls + * {@link #getLastTokenTypeOnLine(Segment, int)} or + * {@link #getTokenList(Segment, int, int)}. + */ + protected void resetTokenList() { + firstToken = currentToken = previousToken = null; + tokenFactory.resetAllTokens(); + } + + + /** + * Sets the language index to assign to tokens moving forward. This + * property is used to designate tokens as being in "secondary" languages + * (such as CSS or JavaScript in HTML). + * + * @param languageIndex The new language index. A value of + * 0 denotes the "main" language, any positive value + * denotes a specific secondary language. Negative values will + * be treated as 0. + * @see #getLanguageIndex() + */ + protected void setLanguageIndex(int languageIndex) { + this.languageIndex = Math.max(0, languageIndex); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java b/src/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java new file mode 100644 index 0000000..3f9baee --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java @@ -0,0 +1,117 @@ +/* + * 12/12/2008 + * + * TokenMakerFactory.java - A factory for TokenMakers. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.util.Set; + +import org.fife.ui.rsyntaxtextarea.modes.PlainTextTokenMaker; + +/** + * A factory that maps syntax styles to {@link TokenMaker}s capable of splitting + * text into tokens for those syntax styles. + * + * @author Robert Futrell + * @version 1.0 + */ +public abstract class TokenMakerFactory { + + /** + * If this system property is set, a custom TokenMakerFactory of + * the specified class will be used as the default token maker factory. + */ + public static final String PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY = "TokenMakerFactory"; + + /** + * The singleton default TokenMakerFactory instance. + */ + private static TokenMakerFactory DEFAULT_INSTANCE; + + /** + * Returns the default TokenMakerFactory instance. This is the + * factory used by all {@link RSyntaxDocument}s by default. + * + * @return The factory. + * @see #setDefaultInstance(TokenMakerFactory) + */ + public static synchronized TokenMakerFactory getDefaultInstance() { + if (DEFAULT_INSTANCE == null) { + String clazz = null; + try { + clazz = System.getProperty(PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY); + } catch (java.security.AccessControlException ace) { + clazz = null; // We're in an applet; take default. + } + if (clazz == null) { + clazz = "org.fife.ui.rsyntaxtextarea.DefaultTokenMakerFactory"; + } + try { + DEFAULT_INSTANCE = (TokenMakerFactory) Class.forName(clazz).newInstance(); + } catch (RuntimeException re) { // FindBugs + throw re; + } catch (Exception e) { + e.printStackTrace(); + throw new InternalError("Cannot find TokenMakerFactory: " + clazz); + } + } + return DEFAULT_INSTANCE; + } + + /** + * Returns a {@link TokenMaker} for the specified key. + * + * @param key + * The key. + * @return The corresponding TokenMaker, or + * {@link PlainTextTokenMaker} if none matches the specified key. + */ + public final TokenMaker getTokenMaker(String key) { + TokenMaker tm = getTokenMakerImpl(key); + if (tm == null) { + tm = new PlainTextTokenMaker(); + } + return tm; + } + + /** + * Returns a {@link TokenMaker} for the specified key. + * + * @param key + * The key. + * @return The corresponding TokenMaker, or null if + * none matches the specified key. + */ + protected abstract TokenMaker getTokenMakerImpl(String key); + + /** + * Returns the set of keys that this factory maps to token makers. + * + * @return The set of keys. + */ + public abstract Set keySet(); + + /** + * Sets the default TokenMakerFactory instance. This is the factory + * used by all future {@link RSyntaxDocument}s by default. + * RSyntaxDocuments that have already been created are not + * affected. + * + * @param tmf + * The factory. + * @throws IllegalArgumentException + * If tmf is null. + * @see #getDefaultInstance() + */ + public static synchronized void setDefaultInstance(TokenMakerFactory tmf) { + if (tmf == null) { + throw new IllegalArgumentException("tmf cannot be null"); + } + DEFAULT_INSTANCE = tmf; + } + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenMap.java b/src/org/fife/ui/rsyntaxtextarea/TokenMap.java new file mode 100644 index 0000000..f2e436b --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenMap.java @@ -0,0 +1,279 @@ +/* + * 08/26/2004 + * + * TokenMap.java - Similar to a Map in Java, only designed specifically for + * org.fife.ui.rsyntaxtextarea.Tokens. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.text.Segment; + + +/** + * A hash table for reserved words, etc. defined by a {@link TokenMaker}. + * This class is designed for the quick lookup of tokens, as it can compare + * Segments without the need to allocate a new string.

+ * + * The org.fife.ui.rsyntaxtextarea package uses this class to help + * identify reserved words in programming languages. An instance of + * {@link TokenMaker} will create and initialize an instance of this class + * containing all reserved words, data types, and all other words that need to + * be syntax-highlighted for that particular language. When the token maker + * parses a line and identifies an individual token, it is looked up in the + * TokenMap to see if it should be syntax-highlighted. + * + * @author Robert Futrell + * @version 0.6 + */ +public class TokenMap { + + private int size; + private TokenMapToken[] tokenMap; + private boolean ignoreCase; + + private static final int DEFAULT_TOKEN_MAP_SIZE = 52; + + + /** + * Constructs a new token map that is case-sensitive. + */ + public TokenMap() { + this(DEFAULT_TOKEN_MAP_SIZE); + } + + + /** + * Constructs a new token map that is case-sensitive. + * + * @param size The size of the token map. + */ + public TokenMap(int size) { + this(size, false); + } + + + /** + * Constructs a new token map. + * + * @param ignoreCase Whether or not this token map should ignore case + * when comparing tokens. + */ + public TokenMap(boolean ignoreCase) { + this(DEFAULT_TOKEN_MAP_SIZE, ignoreCase); + } + + + /** + * Constructs a new token map. + * + * @param size The size of the token map. + * @param ignoreCase Whether or not this token map should ignore case + * when comparing tokens. + */ + public TokenMap(int size, boolean ignoreCase) { + this.size = size; + tokenMap = new TokenMapToken[size]; + this.ignoreCase = ignoreCase; + } + + + /** + * Adds a token to a specified bucket in the token map. + * + * @param bucket The bucket in which to add the token. + * @param token The token to add. + */ + private void addTokenToBucket(int bucket, TokenMapToken token) { + TokenMapToken old = tokenMap[bucket]; + token.nextToken = old; + tokenMap[bucket] = token; + } + + + /** + * Returns the token type associated with the given text, if the given + * text is in this token map. If it isn't, -1 is returned. + * + * @param text The segment from which to get the text to compare. + * @param start The starting index in the segment of the text. + * @param end The ending index in the segment of the text. + * @return The token type associated with the given text, or + * -1 if this token was not specified in this map. + */ + public int get(Segment text, int start, int end) { + return get(text.array, start, end); + } + + + /** + * Returns the token type associated with the given text, if the given + * text is in this token map. If it isn't, -1 is returned. + * + * @param array1 An array of characters containing the text. + * @param start The starting index in the array of the text. + * @param end The ending index in the array of the text. + * @return The token type associated with the given text, or + * -1 if this token was not specified in this map. + */ + public int get(char[] array1, int start, int end) { + + int length1 = end - start + 1; + + int hash = getHashCode(array1, start, length1); + TokenMapToken token = tokenMap[hash]; + + char[] array2; + int offset2; + int offset1; + int length; + + /* We check whether or not to ignore case before doing any looping to + * minimize the number of extraneous comparisons we do. This makes + * for slightly redundant code, but it'll be a little more efficient. + */ + + // If matches are case-sensitive (C, C++, Java, etc.)... + if (!ignoreCase) { + + mainLoop: + while (token!=null) { + if (token.length==length1) { + array2 = token.text; + offset2 = token.offset; + offset1 = start; + length = length1; + while (length-- > 0) { + if (array1[offset1++]!=array2[offset2++]) { + token = token.nextToken; + continue mainLoop; + } + } + return token.tokenType; + } + token = token.nextToken; + } + + } + + // If matches are NOT case-sensitive (HTML)... + // Note that all tokens saved in this map were converted to + // lower-case already. + else { + + mainLoop2: + while (token!=null) { + if (token.length==length1) { + array2 = token.text; + offset2 = token.offset; + offset1 = start; + length = length1; + while (length-- > 0) { + if (RSyntaxUtilities.toLowerCase( + array1[offset1++]) != array2[offset2++]) { + token = token.nextToken; + continue mainLoop2; + } + } + return token.tokenType; + } + token = token.nextToken; + } + + } + + // Didn't match any of the tokens in the bucket. + return -1; + + } + + + /** + * Returns the hash code for a given string. + * + * @param text The text to hash. + * @param offset The offset into the text at which to start hashing. + * @param length The last character in the text to hash. + * @return The hash code. + */ + private int getHashCode(char[] text, int offset, int length) { + return (RSyntaxUtilities.toLowerCase(text[offset]) + + RSyntaxUtilities.toLowerCase(text[offset+length-1])) % size; + } + + + /** + * Returns whether this token map ignores case when checking for tokens. + * This property is set in the constructor and cannot be changed, as this + * is an intrinsic property of a particular programming language. + * + * @return Whether or not this token maker is ignoring case. + */ + protected boolean isIgnoringCase() { + return ignoreCase; + } + + + /** + * Adds a string to this token map. + * + * @param string The string to add. + * @param tokenType The type of token the string is. + */ + public void put(final String string, final int tokenType) { + if (isIgnoringCase()) { + put(string.toLowerCase().toCharArray(), tokenType); + } + else { + put(string.toCharArray(), tokenType); + } + } + + + /** + * Adds a string to this token map. The char array passed-in will be used + * as the actual data for the token, so it may well be modified (such as + * lower-casing it if ignoreCase is true). This + * shouldn't be an issue though as this method is only called from the + * public put method, which allocates a new char array. + * + * @param string The string to add. + * @param tokenType The type of token the string is. + */ + private void put(char[] string, int tokenType) { + int hashCode = getHashCode(string, 0, string.length); + addTokenToBucket(hashCode, new TokenMapToken(string, tokenType)); + } + + + /** + * The "token" used by a token map. Note that this isn't the same thing + * as the {@link Token} class, but it's basically a 1-1 correspondence + * for reserved words, etc. + */ + private static final class TokenMapToken { + + private char[] text; + private int offset; + private int length; + private int tokenType; + private TokenMapToken nextToken; + + private TokenMapToken(char[] text, int tokenType) { + this.text = text; + this.offset = 0; + this.length = text.length; + this.tokenType = tokenType; + } + + @Override + public String toString() { + return "[TokenMapToken: " + new String(text,offset,length) + "]"; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java b/src/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java new file mode 100644 index 0000000..887c869 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java @@ -0,0 +1,61 @@ +/* + * 08/06/2004 + * + * TokenOrientedView.java - An interface for the syntax-highlighting token- + * oriented views for token-oriented methods. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + + +/** + * An interface for the syntax-highlighting token oriented views for + * token-oriented methods. This way callers won't need to know what specific + * class a view is an instance of to access its tokens.

+ * + * Currently, this interface is only useful for obtaining token lists for + * "physical lines" (i.e., a word-wrapped view's logical lines may be + * represented as several physical lines, thus getting the "physical line" above + * a given position may prove complicated). + * + * @author Robert Futrell + * @version 0.1 + */ +public interface TokenOrientedView { + + + /** + * Returns a token list for the physical line above the physical + * line containing the specified offset into the document. Note that for + * a plain (non-wrapped) view, this is simply the token list for the + * logical line above the line containing offset, since lines + * are not wrapped. For a wrapped view, this may or may not be tokens from + * the same line. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * before this one. If no physical line is above the one + * containing offset, null is returned. + */ + Token getTokenListForPhysicalLineAbove(int offset); + + + /** + * Returns a token list for the physical line below the physical + * line containing the specified offset into the document. Note that for + * a plain (non-wrapped) view, this is simply the token list for the + * logical line below the line containing offset, since lines + * are not wrapped. For a wrapped view, this may or may not be tokens from + * the same line. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * after this one. If no physical line is after the one + * containing offset, null is returned. + */ + Token getTokenListForPhysicalLineBelow(int offset); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenPainter.java b/src/org/fife/ui/rsyntaxtextarea/TokenPainter.java new file mode 100644 index 0000000..9318019 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenPainter.java @@ -0,0 +1,120 @@ +/* + * 03/16/2013 + * + * TokenPainter - Renders tokens in an instance of RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Graphics2D; + +import javax.swing.text.TabExpander; + + +/** + * Renders tokens in an instance of {@link RSyntaxTextArea}. One instance + * may render tokens "regularly," another may render visible whitespace, for + * example. + * + * @author Robert Futrell + * @version 1.0 + */ +interface TokenPainter { + + + /** + * Paints this token. + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @return The x-coordinate representing the end of the painted text. + */ + float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e); + + + /** + * Paints this token. + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param clipStart The left boundary of the clip rectangle in which we're + * painting. This optimizes painting by allowing us to not paint + * paint when this token is "to the left" of the clip rectangle. + * @return The x-coordinate representing the end of the painted text. + */ + float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart); + + + /** + * Paints this token. + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param clipStart The left boundary of the clip rectangle in which we're + * painting. This optimizes painting by allowing us to not paint + * paint when this token is "to the left" of the clip rectangle. + * @param paintBG Whether to paint the background. + * @return The x-coordinate representing the end of the painted text. + */ + float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean paintBG); + + + /** + * Paints this token as it should appear in a selected region of text + * (assuming painting with a selection-foreground color is enabled in the + * parent RSyntaxTextArea). + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param useSTC Whether to use the text area's "selected text color." + * @return The x-coordinate representing the end of the painted text. + */ + float paintSelected(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, boolean useSTC); + + + /** + * Paints this token as it should appear in a selected region of text + * (assuming painting with a selection-foreground color is enabled in the + * parent RSyntaxTextArea). + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param clipStart The left boundary of the clip rectangle in which we're + * painting. This optimizes painting by allowing us to not paint + * paint when this token is "to the left" of the clip rectangle. + * @param useSTC Whether to use the text area's "selected text color." + * @return The x-coordinate representing the end of the painted text. + */ + float paintSelected(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean useSTC); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenTypes.java b/src/org/fife/ui/rsyntaxtextarea/TokenTypes.java new file mode 100644 index 0000000..f56f204 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenTypes.java @@ -0,0 +1,85 @@ +/* + * 12/04/2011 + * + * TokenTypes.java - All token types supported by RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + + +/** + * All token types supported by RSyntaxTextArea.

+ * + * Note that all valid token types are >= 0, so extensions of the TokenMaker + * class are free to internally use all ints < 0 ONLY for "end-of-line" + * style markers; they are ignored by painting implementations. + * + * @author Robert Futrell + * @version 1.0 + */ +public interface TokenTypes { + + /** + * Tokens of type NULL mark the end of lines with no + * multi-line token at the end (such as a block comment in C++). + */ + int NULL = 0; + + int COMMENT_EOL = 1; + int COMMENT_MULTILINE = 2; + int COMMENT_DOCUMENTATION = 3; + int COMMENT_KEYWORD = 4; + int COMMENT_MARKUP = 5; + + int RESERVED_WORD = 6; + int RESERVED_WORD_2 = 7; + + int FUNCTION = 8; + + int LITERAL_BOOLEAN = 9; + int LITERAL_NUMBER_DECIMAL_INT = 10; + int LITERAL_NUMBER_FLOAT = 11; + int LITERAL_NUMBER_HEXADECIMAL = 12; + int LITERAL_STRING_DOUBLE_QUOTE = 13; + int LITERAL_CHAR = 14; + int LITERAL_BACKQUOTE = 15; + + int DATA_TYPE = 16; + + int VARIABLE = 17; + + int REGEX = 18; + + int ANNOTATION = 19; + + int IDENTIFIER = 20; + + int WHITESPACE = 21; + + int SEPARATOR = 22; + + int OPERATOR = 23; + + int PREPROCESSOR = 24; + + int MARKUP_TAG_DELIMITER = 25; + int MARKUP_TAG_NAME = 26; + int MARKUP_TAG_ATTRIBUTE = 27; + int MARKUP_TAG_ATTRIBUTE_VALUE = 28; + int MARKUP_COMMENT = 29; + int MARKUP_DTD = 30; + int MARKUP_PROCESSING_INSTRUCTION = 31; + int MARKUP_CDATA_DELIMITER = 32; + int MARKUP_CDATA = 33; + int MARKUP_ENTITY_REFERENCE = 34; + + int ERROR_IDENTIFIER = 35; + int ERROR_NUMBER_FORMAT = 36; + int ERROR_STRING_DOUBLE = 37; + int ERROR_CHAR = 38; + + int DEFAULT_NUM_TOKEN_TYPES = 39; + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/TokenUtils.java b/src/org/fife/ui/rsyntaxtextarea/TokenUtils.java new file mode 100644 index 0000000..1f1e40f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/TokenUtils.java @@ -0,0 +1,170 @@ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.text.TabExpander; + + +/** + * Utility methods for dealing with tokens. + * + * @author Robert Futrell + * @version 1.0 + */ +public final class TokenUtils { + + + private TokenUtils() {} + + + /** + * Modifies the passed-in token list to start at the specified offset. + * For example, if the token list covered positions 20-60 in the document + * (inclusive) like so: + *

+	 *   [token1] -> [token2] -> [token3] -> [token4]
+	 *   20     30   31     40   41     50   51     60
+	 * 
+ * and you used this method to make the token list start at position 44, + * then the token list would be modified to be the following: + *
+	 *   [part-of-old-token3] -> [token4]
+	 *   44                 50   51     60
+	 * 
+ * Tokens that come before the specified position are forever lost, and + * the token containing that position is made to begin at that position if + * necessary. All token types remain the same as they were originally.

+ * + * This method can be useful if you are only interested in part of a token + * list (i.e., the line it represents), but you don't want to modify the + * token list yourself. + * + * @param tokenList The list to make start at the specified position. + * This parameter is modified. + * @param pos The position at which the new token list is to start. If + * this position is not in the passed-in token list, + * returned token list will either be null or the + * unpaintable token(s) at the end of the passed-in token list. + * @param e How to expand tabs. + * @param textArea The text area from which the token list came. + * @param x0 The initial x-pixel position of the old token list. + * @return Information about the "sub" token list. This will be + * null if pos was not a valid offset + * into the token list. + * @see #getSubTokenList(Token, int, TabExpander, RSyntaxTextArea, float, TokenImpl) + */ + public static TokenSubList getSubTokenList(Token tokenList, int pos, + TabExpander e, + final RSyntaxTextArea textArea, + float x0) { + return getSubTokenList(tokenList, pos, e, textArea, x0, null); + } + + + /** + * Modifies the passed-in token list to start at the specified offset. + * For example, if the token list covered positions 20-60 in the document + * (inclusive) like so: + *

+	 *   [token1] -> [token2] -> [token3] -> [token4]
+	 *   20     30   31     40   41     50   51     60
+	 * 
+ * and you used this method to make the token list start at position 44, + * then the token list would be modified to be the following: + *
+	 *   [part-of-old-token3] -> [token4]
+	 *   44                 50   51     60
+	 * 
+ * Tokens that come before the specified position are forever lost, and + * the token containing that position is made to begin at that position if + * necessary. All token types remain the same as they were originally.

+ * + * This method can be useful if you are only interested in part of a token + * list (i.e., the line it represents), but you don't want to modify the + * token list yourself. + * + * @param tokenList The list to make start at the specified position. + * This parameter is modified. + * @param pos The position at which the new token list is to start. If + * this position is not in the passed-in token list, + * returned token list will either be null or the + * unpaintable token(s) at the end of the passed-in token list. + * @param e How to expand tabs. + * @param textArea The text area from which the token list came. + * @param x0 The initial x-pixel position of the old token list. + * @param tempToken A temporary token to use when creating the token list + * result. This may be null but callers can pass in + * a "buffer" token for performance if desired. + * @return Information about the "sub" token list. This will be + * null if pos was not a valid offset + * into the token list. + * @see #getSubTokenList(Token, int, TabExpander, RSyntaxTextArea, float) + */ + public static TokenSubList getSubTokenList(Token tokenList, int pos, + TabExpander e, + final RSyntaxTextArea textArea, + float x0, + TokenImpl tempToken) { + + if (tempToken==null) { + tempToken = new TokenImpl(); + } + Token t = tokenList; + + // Loop through the token list until you find the one that contains + // pos. Remember the cumulative width of all of these tokens. + while (t!=null && t.isPaintable() && !t.containsPosition(pos)) { + x0 += t.getWidth(textArea, e, x0); + t = t.getNextToken(); + } + + // Make the token that contains pos start at pos. + if (t!=null && t.isPaintable()) { + + if (t.getOffset()!=pos) { + // Number of chars between p0 and token start. + int difference = pos - t.getOffset(); + x0 += t.getWidthUpTo(t.length()-difference+1, textArea, e, x0); + tempToken.copyFrom(t); + tempToken.makeStartAt(pos); + + return new TokenSubList(tempToken, x0); + + } + else { // t.getOffset()==pos + return new TokenSubList(t, x0); + } + + } + + // This could be a null token, so we need to just return it. + return new TokenSubList(tokenList, x0); + //return null; + + } + + + /** + * A sub-list of tokens. + */ + @SuppressWarnings({ "checkstyle:visibilitymodifier" }) + public static class TokenSubList { + + /** + * The "sub" token list. + */ + public Token tokenList; + + /** + * The width, in pixels, of the part of the token list "removed from + * the front." This way, you know the x-offset of the "new" token list. + */ + public float x; + + public TokenSubList(Token tokenList, float x) { + this.tokenList = tokenList; + this.x = x; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/URLFileLocation.java b/src/org/fife/ui/rsyntaxtextarea/URLFileLocation.java new file mode 100644 index 0000000..7e60ab6 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/URLFileLocation.java @@ -0,0 +1,160 @@ +/* + * 11/13/2008 + * + * URLFileLocation.java - The location of a file at a (remote) URL. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URL; + + +/** + * The location of a file at a (remote) URL. + * + * @author Robert Futrell + * @version 1.0 + */ +class URLFileLocation extends FileLocation { + + /** + * URL of the remote file. + */ + private URL url; + + /** + * A prettied-up full path of the URL (password removed, etc.). + */ + private String fileFullPath; + + /** + * A prettied-up filename (leading slash, and possibly "%2F", + * removed). + */ + private String fileName; + + + /** + * Constructor. + * + * @param url The URL of the file. + */ + URLFileLocation(URL url) { + this.url = url; + fileFullPath = createFileFullPath(); + fileName = createFileName(); + } + + + /** + * Creates a "prettied-up" URL to use. This will be stripped of + * sensitive information such as passwords. + * + * @return The full path to use. + */ + private String createFileFullPath() { + String fullPath = url.toString(); + fullPath = fullPath.replaceFirst("://([^:]+)(?:.+)@", "://$1@"); + return fullPath; + } + + + /** + * Creates the "prettied-up" filename to use. + * + * @return The base name of the file of this URL. + */ + private String createFileName() { + String fileName = url.getPath(); + if (fileName.startsWith("/%2F/")) { // Absolute path + fileName = fileName.substring(4); + } + else if (fileName.startsWith("/")) { // All others + fileName = fileName.substring(1); + } + return fileName; + } + + + /** + * Returns the last time this file was modified, or + * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value cannot be + * computed (such as for a remote file). + * + * @return The last time this file was modified. This will always be + * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} for URL's. + */ + @Override + protected long getActualLastModified() { + return TextEditorPane.LAST_MODIFIED_UNKNOWN; + } + + + /** + * {@inheritDoc} + */ + @Override + public String getFileFullPath() { + return fileFullPath; + } + + + /** + * {@inheritDoc} + */ + @Override + public String getFileName() { + return fileName; + } + + + /** + * {@inheritDoc} + */ + @Override + protected InputStream getInputStream() throws IOException { + return url.openStream(); + } + + + /** + * {@inheritDoc} + */ + @Override + protected OutputStream getOutputStream() throws IOException { + return url.openConnection().getOutputStream(); + } + + + /** + * Returns whether this file location is a local file. + * + * @return Whether this is a local file. + * @see #isLocalAndExists() + */ + @Override + public boolean isLocal() { + return "file".equalsIgnoreCase(url.getProtocol()); + } + + + /** + * Returns whether this file location is a local file and already + * exists. This method always returns false since we + * cannot check this value easily. + * + * @return false always. + * @see #isLocal() + */ + @Override + public boolean isLocalAndExists() { + return false; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java b/src/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java new file mode 100644 index 0000000..b4bd32c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java @@ -0,0 +1,185 @@ +/* + * 03/16/2013 + * + * VisibleWhitespaceTokenPainter - Renders tokens in an instance of + * RSyntaxTextArea, with special glyphs to denote spaces and tabs. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import javax.swing.text.TabExpander; + + +/** + * A token painter that visibly renders whitespace (spaces and tabs).

+ * + * The current implementation paints as follows: + *

    + *
  • The first tab or space, if any, is found in the token.
  • + *
  • If a tab was found, all characters up to it are painted as a + * group.
  • + *
  • If a space was found, all characters up to and including it are + * painted (it is painted with a special symbol to denote it as + * a space).
  • + *
  • If neither a tab nor a whitespace was found, all characters in the + * token are painted.
  • + *
  • Repeat until all characters are painted.
  • + *
+ * This means that rendering hints are applied to all groups of characters + * within a token, excluding whitespace and tabs.

+ * + * A problem with this implementation is that FontMetrics.charsWidth() is still + * used to calculate the width of a group of chars painted. Thus, the group of + * characters will be painted with the rendering hints specified, but the + * following tab (or group of characters if the current group was the end of a + * token) will not necessarily be painted at the proper x-coordinate (as + * FontMetrics.charsWidth() returns an int and not a + * float). The way around this would be to calculate the token's + * width in such a way that a float is returned (Font.getStringBounds()?). + * + * @author Robert Futrell + * @version 1.0 + */ +class VisibleWhitespaceTokenPainter extends DefaultTokenPainter { + + + /** + * {@inheritDoc} + */ + @Override + protected float paintImpl(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean selected, boolean useSTC) { + + int origX = (int)x; + int textOffs = token.getTextOffset(); + char[] text = token.getTextArray(); + int end = textOffs + token.length(); + float nextX = x; + int flushLen = 0; + int flushIndex = textOffs; + Color fg = useSTC ? host.getSelectedTextColor() : + host.getForegroundForToken(token); + Color bg = selected ? null : host.getBackgroundForToken(token); + g.setFont(host.getFontForTokenType(token.getType())); + FontMetrics fm = host.getFontMetricsForTokenType(token.getType()); + + int ascent = fm.getAscent(); + int height = fm.getHeight(); + + for (int i=textOffs; i 0) { + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + flushLen = 0; + } + flushIndex = i + 1; + + // Draw an arrow representing the tab. + int halfHeight = height / 2; + int quarterHeight = halfHeight / 2; + int ymid = (int)y - ascent + halfHeight; + g.drawLine((int)nextX,ymid, (int)nextNextX,ymid); + g.drawLine((int)nextNextX,ymid, (int)nextNextX-4,ymid-quarterHeight); + g.drawLine((int)nextNextX,ymid, (int)nextNextX-4,ymid+quarterHeight); + + x = nextNextX; + break; + + case ' ': + + // NOTE: There is a little bit of a "fudge factor" + // here when "smooth text" is enabled, as "width" + // below may well not be the width given to the space + // by fm.charsWidth() (it depends on how it places the + // space with respect to the preceding character). + // But, we assume the approximation is close enough for + // our drawing a dot for the space. + + // "flushLen+1" ensures text is aligned correctly (or, + // aligned the same as in getWidth()). + nextX = x+fm.charsWidth(text, flushIndex,flushLen+1); + int width = fm.charWidth(' '); + + // Paint background. + if (bg!=null) { + paintBackground(x,y, nextX-x,height, g, + ascent, host, bg); + } + g.setColor(fg); + + // Paint chars before space. + if (flushLen>0) { + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + flushLen = 0; + } + + // Paint a dot representing the space. + int dotX = (int)(nextX - width/2f); // "2.0f" for FindBugs + int dotY = (int)(y - ascent + height/2f); // Ditto + g.drawLine(dotX, dotY, dotX, dotY); + flushIndex = i + 1; + x = nextX; + break; + + + case '\f': + // ??? + // fall-through for now. + + default: + flushLen += 1; + break; + + } + } + + nextX = x+fm.charsWidth(text, flushIndex,flushLen); + + if (flushLen>0 && nextX>=clipStart) { + if (bg!=null) { + paintBackground(x,y, nextX-x,height, g, + ascent, host, bg); + } + g.setColor(fg); + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + } + + if (host.getUnderlineForToken(token)) { + g.setColor(fg); + int y2 = (int)(y+1); + g.drawLine(origX,y2, (int)nextX,y2); + } + + // Don't check if it's whitespace - some TokenMakers may return types + // other than Token.WHITESPACE for spaces (such as Token.IDENTIFIER). + // This also allows us to paint tab lines for MLC's. + if (host.getPaintTabLines() && origX==host.getMargin().left) {// && isWhitespace()) { + paintTabLines(token, origX, (int)y, (int)nextX, g, e, host); + } + + return nextX; + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java b/src/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java new file mode 100644 index 0000000..5fa8eeb --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java @@ -0,0 +1,1461 @@ +/* + * 08/06/2004 + * + * WrappedSyntaxView.java - Test implementation of WrappedSyntaxView that + * is also aware of RSyntaxTextArea's different fonts per token type. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.Rectangle; +import java.awt.Shape; + +import javax.swing.event.DocumentEvent; +import javax.swing.text.BadLocationException; +import javax.swing.text.BoxView; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.LayeredHighlighter; +import javax.swing.text.PlainDocument; +import javax.swing.text.Position; +import javax.swing.text.Position.Bias; +import javax.swing.text.Segment; +import javax.swing.text.TabExpander; +import javax.swing.text.View; +import javax.swing.text.ViewFactory; + +import org.fife.ui.rsyntaxtextarea.TokenUtils.TokenSubList; +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; +import org.fife.ui.rtextarea.Gutter; + + +/** + * The view used by {@link RSyntaxTextArea} when word wrap is enabled. + * + * @author Robert Futrell + * @version 0.2 + */ +public class WrappedSyntaxView extends BoxView implements TabExpander, + RSTAView { + + private boolean widthChanging; + private int tabBase; + private int tabSize; + + /** + * This is reused to keep from allocating/deallocating. + */ + private Segment s, drawSeg; + + /** + * Another variable initialized once to keep from allocating/deallocating. + */ + private Rectangle tempRect; + + /** + * Cached for each paint() call so each drawView() call has access to it. + */ + private RSyntaxTextArea host; + private FontMetrics metrics; + private TokenImpl tempToken; + private TokenImpl lineCountTempToken; + +// /** +// * The end-of-line marker. +// */ +// private static final char[] eolMarker = { '.' }; + + /** + * The width of this view cannot be below this amount, as if the width + * is ever 0 (really a bug), we'll go into an infinite loop. + */ + private static final int MIN_WIDTH = 20; + + + /** + * Creates a new WrappedSyntaxView. Lines will be wrapped + * on character boundaries. + * + * @param elem the element underlying the view + */ + public WrappedSyntaxView(Element elem) { + super(elem, Y_AXIS); + tempToken = new TokenImpl(); + s = new Segment(); + drawSeg = new Segment(); + tempRect = new Rectangle(); + lineCountTempToken = new TokenImpl(); + } + + + + /** + * This is called by the nested wrapped line + * views to determine the break location. This can + * be reimplemented to alter the breaking behavior. + * It will either break at word or character boundaries + * depending upon the break argument given at + * construction. + */ + protected int calculateBreakPosition(int p0, Token tokenList, float x0) { +//System.err.println("------ beginning calculateBreakPosition() --------"); + int p = p0; + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + float currentWidth = getWidth(); + if (currentWidth==Integer.MAX_VALUE) { + currentWidth = getPreferredSpan(X_AXIS); + } + // Make sure width>0; this is a huge hack to fix a bug where + // loading text into an RTextArea before it is visible if word wrap + // is enabled causes an infinite loop in calculateBreakPosition() + // because of the 0-width! We cannot simply check in setSize() + // because the width is set to 0 somewhere else too somehow... + currentWidth = Math.max(currentWidth, MIN_WIDTH); + Token t = tokenList; + while (t!=null && t.isPaintable()) { +// FIXME: Replace the code below with the commented-out line below. This will +// allow long tokens to be broken at embedded spaces (such as MLC's). But it +// currently throws BadLocationExceptions sometimes... + float tokenWidth = t.getWidth(textArea, this, x0); + if (tokenWidth>currentWidth) { + // If the current token alone is too long for this line, + // break at a character boundary. + if (p==p0) { + return t.getOffsetBeforeX(textArea, this, 0, currentWidth); + } + // Return the first non-whitespace char (i.e., don't start + // off the continuation of a wrapped line with whitespace). + return t.isWhitespace() ? p+t.length() : p; +//return getBreakLocation(t, fm, x0, currentWidth, this); + } + currentWidth -= tokenWidth; + x0 += tokenWidth; + p += t.length(); +//System.err.println("*** *** *** token fit entirely (width==" + tokenWidth + "), adding " + t.textCount + " to p, now p==" + p); + t = t.getNextToken(); + } +//System.err.println("... ... whole line fits; returning p==" + p); +//System.err.println("------ ending calculateBreakPosition() --------"); + +// return p; +return p + 1; + } + +//private int getBreakLocation(Token t, FontMetrics fm, int x0, int x, +// TabExpander e) { +// Segment s = new Segment(); +// s.array = t.text; +// s.offset = t.getTextOffset(); +// s.count = t.textCount; +// return t.offset + Utilities.getBreakLocation(s, fm, x0, x, e, t.offset); +//} + + /** + * Gives notification from the document that attributes were changed + * in a location that this view is responsible for. + * + * @param e the change information from the associated document + * @param a the current allocation of the view + * @param f the factory to use to rebuild if the view has children + * @see View#changedUpdate + */ + @Override + public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) { + updateChildren(e, a); + } + + + /** + * Sets the allocation rectangle for a given line's view, but sets the + * y value to the passed-in value. This should be used instead of + * {@link #childAllocation(int, Rectangle)} since it allows you to account + * for hidden lines in collapsed fold regions. + * + * @param line + * @param y + * @param alloc + */ + private void childAllocation2(int line, int y, Rectangle alloc) { + alloc.x += getOffset(X_AXIS, line); + alloc.y += y; + alloc.width = getSpan(X_AXIS, line); + alloc.height = getSpan(Y_AXIS, line); + + // FIXME: This is required due to a bug that I can't track down. The + // top margin is being added twice somewhere in wrapped views, so we + // have to adjust for it here. + Insets margin = host.getMargin(); + if (margin!=null) { + alloc.y -= margin.top; + } + + } + + + /** + * Draws a single view (i.e., a line of text for a wrapped view), + * wrapping the text onto multiple lines if necessary. + * + * @param painter The painter to use to render tokens. + * @param g The graphics context in which to paint. + * @param r The rectangle in which to paint. + * @param view The View to paint. + * @param fontHeight The height of the font being used. + * @param y The y-coordinate at which to begin painting. + */ + protected void drawView(TokenPainter painter, Graphics2D g, Rectangle r, + View view, int fontHeight, int y, int line) { + + float x = r.x; + + LayeredHighlighter h = (LayeredHighlighter)host.getHighlighter(); + + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = getElement(); + + int p0 = view.getStartOffset(); + int lineNumber = map.getElementIndex(p0); + int p1 = view.getEndOffset();// - 1; + + setSegment(p0,p1-1, document, drawSeg); + //System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); + int start = p0 - drawSeg.offset; + Token token = document.getTokenListForLine(lineNumber); + + // If this line is an empty line, then the token list is simply a + // null token. In this case, the line highlight will be skipped in + // the loop below, so unfortunately we must manually do it here. + if (token!=null && token.getType()==Token.NULL) { + h.paintLayeredHighlights(g, p0,p1, r, host, this); + return; + } + + // Loop through all tokens in this view and paint them! + while (token!=null && token.isPaintable()) { + + int p = calculateBreakPosition(p0, token, x); + x = r.x; + + h.paintLayeredHighlights(g, p0,p, r, host, this); + + while (token!=null && token.isPaintable() && token.getEndOffset()-1View to paint. + * @param fontHeight The height of the font being used. + * @param y The y-coordinate at which to begin painting. + * @param selStart The start of the selection. + * @param selEnd The end of the selection. + */ + protected void drawViewWithSelection(TokenPainter painter, Graphics2D g, + Rectangle r, View view, int fontHeight, int y, int selStart, + int selEnd) { + + float x = r.x; + boolean useSTC = host.getUseSelectedTextColor(); + + LayeredHighlighter h = (LayeredHighlighter)host.getHighlighter(); + + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = getElement(); + + int p0 = view.getStartOffset(); + int lineNumber = map.getElementIndex(p0); + int p1 = view.getEndOffset();// - 1; + + setSegment(p0,p1-1, document, drawSeg); + //System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); + int start = p0 - drawSeg.offset; + Token token = document.getTokenListForLine(lineNumber); + + // If this line is an empty line, then the token list is simply a + // null token. In this case, the line highlight will be skipped in + // the loop below, so unfortunately we must manually do it here. + if (token!=null && token.getType()==Token.NULL) { + h.paintLayeredHighlights(g, p0,p1, r, host, this); + return; + } + + // Loop through all tokens in this view and paint them! + while (token!=null && token.isPaintable()) { + + int p = calculateBreakPosition(p0, token, x); + x = r.x; + + h.paintLayeredHighlights(g, p0,p, r, host, this); + + while (token!=null && token.isPaintable() && token.getEndOffset()-1token.getOffset()) { + tempToken.copyFrom(token); + tempToken.textCount = selStart - tempToken.getOffset(); + x = painter.paint(tempToken,g,x,y,host, this); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selStart); + // Clone required since token and tempToken must be + // different tokens for else statement below + token = new TokenImpl(tempToken); + } + + int selCount = Math.min(token.length(), selEnd-token.getOffset()); + if (selCount==token.length()) { + x = painter.paintSelected(token, g, x,y, host, this, + useSTC); + } + else { + tempToken.copyFrom(token); + tempToken.textCount = selCount; + x = painter.paintSelected(tempToken, g, x,y, host, this, + useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(token.getOffset() + selCount); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + } + + // Selection ends in this token + else if (token.containsPosition(selEnd)) { + tempToken.copyFrom(token); + tempToken.textCount = selEnd - tempToken.getOffset(); + x = painter.paintSelected(tempToken, g, x,y, host, this, + useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selEnd); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + // This token is entirely selected + else if (token.getOffset()>=selStart && + token.getEndOffset()<=selEnd) { + x = painter.paintSelected(token, g, x,y, host, this,useSTC); + } + + // This token is entirely unselected + else { + x = painter.paint(token, g, x,y, host, this); + } + + token = token.getNextToken(); + + } + + // If there's a token that's going to be split onto the next line + if (token!=null && token.isPaintable() && token.getOffset()token.getOffset()) { + tempToken.copyFrom(token); + tempToken.textCount = selStart - tempToken.getOffset(); + x = painter.paint(tempToken,g,x,y,host, this); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selStart); + // Clone required since token and tempToken must be + // different tokens for else statement below + token = new TokenImpl(tempToken); + } + + int selCount = Math.min(token.length(), selEnd-token.getOffset()); + if (selCount==token.length()) { + x = painter.paintSelected(token, g, x,y, host, this, + useSTC); + } + else { + tempToken.copyFrom(token); + tempToken.textCount = selCount; + x = painter.paintSelected(tempToken, g, x,y, host, + this, useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(token.getOffset() + selCount); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + } + + // Selection ends in this token + else if (token.containsPosition(selEnd)) { + tempToken.copyFrom(token); + tempToken.textCount = selEnd - tempToken.getOffset(); + x = painter.paintSelected(tempToken, g, x,y, host, this, + useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selEnd); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + // This token is entirely selected + else if (token.getOffset()>=selStart && + token.getEndOffset()<=selEnd) { + x = painter.paintSelected(token, g, x,y, host, this,useSTC); + } + + // This token is entirely unselected + else { + x = painter.paint(token, g, x,y, host, this); + } + + token = new TokenImpl(orig); + ((TokenImpl)token).makeStartAt(p); + + } + + p0 = (p==p0) ? p1 : p; + y += fontHeight; + + } // End of while (token!=null && token.isPaintable()). + + // NOTE: We should re-use code from Token (paintBackground()) here, + // but don't because I'm just too lazy. + if (host.getEOLMarkersVisible()) { + g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); + g.setFont(host.getFontForTokenType(Token.WHITESPACE)); + g.drawString("\u00B6", x, (float) y-fontHeight); + } + + } + + + /** + * Fetches the allocation for the given child view.

+ * Overridden to account for code folding. + * + * @param index The index of the child, >= 0 &&< getViewCount(). + * @param a The allocation to this view + * @return The allocation to the child; or null if + * a is null; or null if the + * layout is invalid + */ + @Override + public Shape getChildAllocation(int index, Shape a) { + if (a != null) { + Shape ca = getChildAllocationImpl(index, a); + if ((ca != null) && (!isAllocationValid())) { + // The child allocation may not have been set yet. + Rectangle r = (ca instanceof Rectangle) ? (Rectangle) ca : ca + .getBounds(); + if ((r.width == 0) && (r.height == 0)) { + return null; + } + } + return ca; + } + return null; + } + + /** + * Fetches the allocation for the given child view to render into.

+ * Overridden to account for lines hidden by collapsed folded regions. + * + * @param line The index of the child, >= 0 &&< getViewCount() + * @param a The allocation to this view + * @return The allocation to the child + */ + public Shape getChildAllocationImpl(int line, Shape a) { + + Rectangle alloc = getInsideAllocation(a); + host = (RSyntaxTextArea)getContainer(); + FoldManager fm = host.getFoldManager(); + int y = alloc.y; + + // TODO: Make cached getOffset() calls for Y_AXIS valid even for + // folding, to speed this up! + for (int i=0; isetParent method. + * Subclasses can re-implement this to initialize their + * child views in a different manner. The default + * implementation creates a child view for each + * child element. + * + * @param f the view factory + */ + @Override + protected void loadChildren(ViewFactory f) { + Element e = getElement(); + int n = e.getElementCount(); + if (n > 0) { + View[] added = new View[n]; + for (int i = 0; i < n; i++) { + added[i] = new WrappedLine(e.getElement(i)); + } + replace(0, 0, added); + } + } + + + @Override + public Shape modelToView(int pos, Shape a, Position.Bias b) + throws BadLocationException { + + if (! isAllocationValid()) { + Rectangle alloc = a.getBounds(); + setSize(alloc.width, alloc.height); + } + + boolean isBackward = (b == Position.Bias.Backward); + int testPos = (isBackward) ? Math.max(0, pos - 1) : pos; + if(isBackward && testPos < getStartOffset()) { + return null; + } + + int vIndex = getViewIndexAtPosition(testPos); + if ((vIndex != -1) && (vIndex < getViewCount())) { + View v = getView(vIndex); + if(v != null && testPos >= v.getStartOffset() && + testPos < v.getEndOffset()) { + Shape childShape = getChildAllocation(vIndex, a); + if (childShape == null) { + // We are likely invalid, fail. + return null; + } + Shape retShape = v.modelToView(pos, childShape, b); + if(retShape == null && v.getEndOffset() == pos) { + if(++vIndex < getViewCount()) { + v = getView(vIndex); + retShape = v.modelToView(pos, getChildAllocation(vIndex, a), b); + } + } + return retShape; + } + } + + throw new BadLocationException("Position not represented by view", pos); + + } + + + /** + * Provides a mapping, for a given region, from the document model + * coordinate space to the view coordinate space. The specified region is + * created as a union of the first and last character positions.

+ * + * This is implemented to subtract the width of the second character, as + * this view's modelToView actually returns the width of the + * character instead of "1" or "0" like the View implementations in + * javax.swing.text. Thus, if we don't override this method, + * the View implementation will return one character's width + * too much for its consumers (implementations of + * javax.swing.text.Highlighter). + * + * @param p0 the position of the first character (>=0) + * @param b0 The bias of the first character position, toward the previous + * character or the next character represented by the offset, in + * case the position is a boundary of two views; b0 + * will have one of these values: + *

    + *
  • Position.Bias.Forward + *
  • Position.Bias.Backward + *
+ * @param p1 the position of the last character (>=0) + * @param b1 the bias for the second character position, defined + * one of the legal values shown above + * @param a the area of the view, which encompasses the requested region + * @return the bounding box which is a union of the region specified + * by the first and last character positions + * @exception BadLocationException if the given position does + * not represent a valid location in the associated document + * @exception IllegalArgumentException if b0 or + * b1 are not one of the + * legal Position.Bias values listed above + * @see View#viewToModel + */ + @Override + public Shape modelToView(int p0, Position.Bias b0, + int p1, Position.Bias b1, + Shape a) throws BadLocationException { + + Shape s0 = modelToView(p0, a, b0); + Shape s1; + if (p1 ==getEndOffset()) { + try { + s1 = modelToView(p1, a, b1); + } catch (BadLocationException ble) { + s1 = null; + } + if (s1 == null) { + // Assume extends left to right. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, + 1, alloc.height); + } + } + else { + s1 = modelToView(p1, a, b1); + } + Rectangle r0 = s0.getBounds(); + Rectangle r1 = (s1 instanceof Rectangle) ? (Rectangle) s1 : + s1.getBounds(); + if (r0.y != r1.y) { + // If it spans lines, force it to be the width of the view. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + r0.x = alloc.x; + r0.width = alloc.width; + } + + r0.add(r1); + // The next line is the only difference between this method and + // View's implementation. We're subtracting the width of the second + // character. This is because this method is used by Highlighter + // implementations to get the area to "highlight", and if we don't do + // this, one character too many is highlighted thanks to our + // modelToView() implementation returning the actual width of the + // character requested! + if (p1>p0) { + r0.width -= r1.width; + } + return r0; + + } + + + /** + * Returns the next tab stop position after a given reference position. + * This implementation does not support things like centering so it + * ignores the tabOffset argument. + * + * @param x the current position >= 0 + * @param tabOffset the position within the text stream + * that the tab occurred at >= 0. + * @return the tab stop, measured in points >= 0 + */ + @Override + public float nextTabStop(float x, int tabOffset) { + if (tabSize == 0) { + return x; + } + int ntabs = ((int) x - tabBase) / tabSize; + return tabBase + ((ntabs + 1f) * tabSize); + } + + + /** + * Paints the word-wrapped text. + * + * @param g The graphics context in which to paint. + * @param a The shape (usually a rectangle) in which to paint. + */ + @Override + public void paint(Graphics g, Shape a) { + + Rectangle alloc = (a instanceof Rectangle) ? + (Rectangle)a : a.getBounds(); + tabBase = alloc.x; + + Graphics2D g2d = (Graphics2D)g; + host = (RSyntaxTextArea)getContainer(); + int ascent = host.getMaxAscent(); + int fontHeight = host.getLineHeight(); + FoldManager fm = host.getFoldManager(); + TokenPainter painter = host.getTokenPainter(); + Element root = getElement(); + + // Whether token styles should always be painted, even in selections + int selStart = host.getSelectionStart(); + int selEnd = host.getSelectionEnd(); + + int n = getViewCount(); // Number of lines. + int x = alloc.x + getLeftInset(); + tempRect.y = alloc.y + getTopInset(); + Rectangle clip = g.getClipBounds(); + for (int i = 0; i < n; i++) { + + tempRect.x = x + getOffset(X_AXIS, i); + //tempRect.y = y + getOffset(Y_AXIS, i); + tempRect.width = getSpan(X_AXIS, i); + tempRect.height = getSpan(Y_AXIS, i); + //System.err.println("For line " + i + ": tempRect==" + tempRect); + + if (tempRect.intersects(clip)) { + Element lineElement = root.getElement(i); + int startOffset = lineElement.getStartOffset(); + int endOffset = lineElement.getEndOffset()-1; // Why always "-1"? + View view = getView(i); + if (selStart==selEnd || startOffset>=selEnd || + endOffsetSegment point to the text in our + * document between the given positions. Note that the positions MUST be + * valid positions in the document. + * + * @param p0 The first position in the document. + * @param p1 The second position in the document. + * @param document The document from which you want to get the text. + * @param seg The segment in which to load the text. + */ + private void setSegment(int p0, int p1, Document document, + Segment seg) { + try { +//System.err.println("... in setSharedSegment, p0/p1==" + p0 + "/" + p1); + document.getText(p0, p1-p0, seg); + //System.err.println("... in setSharedSegment: s=='" + s + "'; line/numLines==" + line + "/" + numLines); + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + } + + + /** + * Sets the size of the view. This should cause layout of the view along + * the given axis, if it has any layout duties. + * + * @param width the width >= 0 + * @param height the height >= 0 + */ + @Override + public void setSize(float width, float height) { + updateMetrics(); + if ((int) width != getWidth()) { + // invalidate the view itself since the childrens + // desired widths will be based upon this views width. + preferenceChanged(null, true, true); + widthChanging = true; + } + super.setSize(width, height); + widthChanging = false; + } + + + /** + * Update the child views in response to a + * document event. + */ + void updateChildren(DocumentEvent e, Shape a) { + + Element elem = getElement(); + DocumentEvent.ElementChange ec = e.getChange(elem); + + // This occurs when syntax highlighting only changes on lines + // (i.e. beginning a multiline comment). + if (e.getType()==DocumentEvent.EventType.CHANGE) { + //System.err.println("Updating the damage due to a CHANGE event..."); + // FIXME: Make me repaint more intelligently. + getContainer().repaint(); + //damageLineRange(startLine,endLine, a, host); + } + + else if (ec != null) { + + // the structure of this element changed. + Element[] removedElems = ec.getChildrenRemoved(); + Element[] addedElems = ec.getChildrenAdded(); + View[] added = new View[addedElems.length]; + + for (int i = 0; i < addedElems.length; i++) { + added[i] = new WrappedLine(addedElems[i]); + } + //System.err.println("Replacing " + removedElems.length + + // " children with " + addedElems.length); + replace(ec.getIndex(), removedElems.length, added); + + // should damge a little more intelligently. + if (a != null) { + preferenceChanged(null, true, true); + getContainer().repaint(); + } + + } + + // update font metrics which may be used by the child views + updateMetrics(); + + } + + + final void updateMetrics() { + Component host = getContainer(); + Font f = host.getFont(); + metrics = host.getFontMetrics(f); // Metrics for the default font. + tabSize = getTabSize() * metrics.charWidth('m'); + } + + + @Override + public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) { + + int offs = -1; + + if (! isAllocationValid()) { + Rectangle alloc = a.getBounds(); + setSize(alloc.width, alloc.height); + } + + // Get the child view for the line at (x,y), and ask it for the + // specific offset. + Rectangle alloc = getInsideAllocation(a); + View v = getViewAtPoint((int) x, (int) y, alloc); + if (v != null) { + offs = v.viewToModel(x, y, alloc, bias); + + // Code folding may have hidden the last line. If so, return the last + // visible offset instead of the last offset. + if (host.isCodeFoldingEnabled() && v == getView(getViewCount() - 1) && + offs == v.getEndOffset() - 1) { + offs = host.getLastVisibleOffset(); + } + } + return offs; + + } + + + /** + * {@inheritDoc} + */ + @Override + public int yForLine(Rectangle alloc, int line) throws BadLocationException { + return yForLineContaining(alloc, + getElement().getElement(line).getStartOffset()); +//return alloc.y + getOffset(Y_AXIS, line); + } + + + /** + * {@inheritDoc} + */ + @Override + public int yForLineContaining(Rectangle alloc, int offs) + throws BadLocationException { + if (isAllocationValid()) { + // TODO: make cached Y_AXIS offsets valid even with folding enabled + // to speed this back up! + Rectangle r = (Rectangle)modelToView(offs, alloc, Bias.Forward); + if (r!=null) { + if (host.isCodeFoldingEnabled()) { + int line = host.getLineOfOffset(offs); + FoldManager fm = host.getFoldManager(); + if (fm.isLineHidden(line)) { + return -1; + } + } + return r.y; + } + } + return -1; + } + + + /** + * Simple view of a line that wraps if it doesn't + * fit within the horizontal space allocated. + * This class tries to be lightweight by carrying little + * state of it's own and sharing the state of the outer class + * with it's siblings. + */ + class WrappedLine extends View { + + private int nlines; + + WrappedLine(Element elem) { + super(elem); + } + + /** + * Calculate the number of lines that will be rendered + * by logical line when it is wrapped. + */ + final int calculateLineCount() { + + int nlines = 0; + int startOffset = getStartOffset(); + int p1 = getEndOffset(); + + // Get the token list for this line so we don't have to keep + // recomputing it if this logical line spans multiple physical + // lines. + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + Element map = doc.getDefaultRootElement(); + int line = map.getElementIndex(startOffset); + Token tokenList = doc.getTokenListForLine(line); + float x0 = 0;// FIXME: should be alloc.x!! alloc.x;//0; + + +//System.err.println(">>> calculateLineCount: " + startOffset + "-" + p1); + for (int p0=startOffset; p0>> >>> calculated number of lines for this view (line " + line + "/" + numLines + ": " + nlines); +*/ + return nlines; + } + + /** + * Determines the preferred span for this view along an + * axis. + * + * @param axis may be either X_AXIS or Y_AXIS + * @return the span the view would like to be rendered into. + * Typically the view is told to render into the span + * that is returned, although there is no guarantee. + * The parent may choose to resize or break the view. + * @see View#getPreferredSpan + */ + @Override + public float getPreferredSpan(int axis) { + switch (axis) { + case View.X_AXIS: + float width = getWidth(); + if (width == Integer.MAX_VALUE) { + // We have been initially set to MAX_VALUE, but we don't + // want this as our preferred. + return 100f; + } + return width; + case View.Y_AXIS: + if (nlines == 0 || widthChanging) { + nlines = calculateLineCount(); + } + int h = nlines * ((RSyntaxTextArea)getContainer()).getLineHeight(); + return h; + default: + throw new IllegalArgumentException("Invalid axis: " + axis); + } + } + + /** + * Renders using the given rendering surface and area on that + * surface. The view may need to do layout and create child + * views to enable itself to render into the given allocation. + * + * @param g the rendering surface to use + * @param a the allocated region to render into + * @see View#paint + */ + @Override + public void paint(Graphics g, Shape a) { + // This is done by drawView() above. + } + + /** + * Provides a mapping from the document model coordinate space + * to the coordinate space of the view mapped to it. + * + * @param pos the position to convert + * @param a the allocated region to render into + * @return the bounding box of the given position is returned + * @exception BadLocationException if the given position does not + * represent a valid location in the associated document. + */ + @Override + public Shape modelToView(int pos, Shape a, Position.Bias b) + throws BadLocationException { + + //System.err.println("--- begin modelToView ---"); + Rectangle alloc = a.getBounds(); + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + alloc.height = textArea.getLineHeight();//metrics.getHeight(); + alloc.width = 1; + int p0 = getStartOffset(); + int p1 = getEndOffset(); + int testP = (b == Position.Bias.Forward) ? pos : + Math.max(p0, pos - 1); + + // Get the token list for this line so we don't have to keep + // recomputing it if this logical line spans multiple physical + // lines. + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + Element map = doc.getDefaultRootElement(); + int line = map.getElementIndex(p0); + Token tokenList = doc.getTokenListForLine(line); + float x0 = alloc.x;//0; + + while (p0 < p1) { + TokenSubList subList = TokenUtils.getSubTokenList(tokenList, p0, + WrappedSyntaxView.this, textArea, x0, lineCountTempToken); + x0 = subList!=null ? subList.x : x0; + tokenList = subList!=null ? subList.tokenList : null; + int p = calculateBreakPosition(p0, tokenList, x0); + if ((pos >= p0) && (testP p0) { + alloc = RSyntaxUtilities.getLineWidthUpTo( + textArea, s, p0, pos, + WrappedSyntaxView.this, + alloc, alloc.x); + } + //System.err.println("--- end modelToView ---"); + return alloc; + } + + p0 = (p == p0) ? p1 : p; + //System.err.println("... ... Incrementing y"); + alloc.y += alloc.height; + + } + + throw new BadLocationException(null, pos); + + } + + /** + * Provides a mapping from the view coordinate space to the logical + * coordinate space of the model. + * + * @param fx the X coordinate + * @param fy the Y coordinate + * @param a the allocated region to render into + * @return the location within the model that best represents the + * given point in the view + * @see View#viewToModel + */ + @Override + public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias) { + + // PENDING(prinz) implement bias properly + bias[0] = Position.Bias.Forward; + + Rectangle alloc = (Rectangle) a; + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + int x = (int) fx; + int y = (int) fy; + if (y < alloc.y) { + // above the area covered by this icon, so the the position + // is assumed to be the start of the coverage for this view. + return getStartOffset(); + } + else if (y > alloc.y + alloc.height) { + // below the area covered by this icon, so the the position + // is assumed to be the end of the coverage for this view. + return getEndOffset() - 1; + } + else { + + // positioned within the coverage of this view vertically, + // so we figure out which line the point corresponds to. + // if the line is greater than the number of lines + // contained, then simply use the last line as it represents + // the last possible place we can position to. + + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + alloc.height = textArea.getLineHeight(); + int p1 = getEndOffset(); + + // Get the token list for this line so we don't have to keep + // recomputing it if this logical line spans multiple + // physical lines. + Element map = doc.getDefaultRootElement(); + int p0 = getStartOffset(); + int line = map.getElementIndex(p0); + Token tlist = doc.getTokenListForLine(line); + + // Look at each physical line-chunk of this logical line. + while (p0=alloc.y) && (y<(alloc.y+alloc.height))) { + + // Point is to the left of the line + if (x < alloc.x) { + return p0; + } + + // Point is to the right of the line + else if (x > alloc.x + alloc.width) { + return p - 1; + } + + // Point is in this physical line! + else if (tlist != null) { + + // Start at alloc.x since this chunk starts + // at the beginning of a physical line. + int n = tlist.getListOffset(textArea, + WrappedSyntaxView.this, + alloc.x, x); + + // NOTE: We needed to add the max() with + // p0 as getTokenListForLine returns -1 + // for empty lines (just a null token). + // How did this work before? + // FIXME: Have null tokens have their + // offset but a -1 length. + return Math.max(Math.min(n, p1-1), p0); + + } // End of else. + + } // End of if ((y>=alloc.y) && ... + + p0 = (p == p0) ? p1 : p; + alloc.y += alloc.height; + + } // End of while (p0WrappedSyntaxView class, designed to + * be faster with large wrapped documents. Heavily based off of + * BoxView, but streamlined to only care about the y-axis, and + * takes code folding into account.

+ * + * This class is not currently used. + * + * @author Robert Futrell + * @version 1.0 + */ +public class WrappedSyntaxView2 {//extends CompositeView { + +// private Rectangle tempRect; +// private int[] cachedOffsets; +// private int[] cachedSpans; +// private boolean sizeRequirementsValid; + + + public WrappedSyntaxView2(Element root) { + //super(root); +// tempRect = new Rectangle(); +// cachedOffsets = new int[0]; +// cachedSpans = new int[0]; +// sizeRequirementsValid = false; + } + + +// protected void childAllocation(int index, Rectangle alloc) { +// alloc.y += getOffset(index); +// alloc.height = getHeight(index); +// } +// +// +// private int getHeight(int childIndex) { +// return cachedSpans[childIndex]; +// } +// +// +// private int getOffset(int childIndex) { +// return cachedOffsets[childIndex]; +// } +// +// +// protected View getViewAtPoint(int x, int y, Rectangle alloc) { +// // TODO Auto-generated method stub +// return null; +// } +// +// +// /** +// * @param alloc The allocated region; this is the area inside of the insets +// * @return Whether the point lies after the region. +// */ +// protected boolean isAfter(int x, int y, Rectangle alloc) { +// return y > (alloc.y + alloc.height); +// } +// +// +// /** +// * @param alloc The allocated region; this is the area inside of the insets +// * @return Whether the point lies before the region. +// */ +// protected boolean isBefore(int x, int y, Rectangle alloc) { +// return y < alloc.y; +// } +// +// +// public float getPreferredSpan(int axis) { +// if (axis==X_AXIS) { +// return preferredWidth + getLeftInset() + getRightInset(); +// } +// else { +// return preferredHeight + getTopInset() + getBottomInset(); +// } +// } +// +// +// public void paint(Graphics g, Shape allocation) { +// +// Rectangle alloc = (allocation instanceof Rectangle) ? +// (Rectangle)allocation : allocation.getBounds(); +// int n = getViewCount(); +// +// int x = alloc.x + getLeftInset(); +// int y = alloc.y + getTopInset(); +// Rectangle clip = g.getClipBounds(); +// int preferredWidth = (int)getPreferredSpan(X_AXIS); +// +// for (int i = 0; i < n; i++) { +// tempRect.x = x; +// tempRect.y = y + getOffset(i); +// tempRect.width = preferredWidth; +// tempRect.height = getHeight(i); +// if (tempRect.intersects(clip)) { +// paintChild(g, tempRect, i); +// } +// } +// +// } +// +// +// /** +// * Called when a child view's preferred span changes. This invalidates +// * our layout cache and calls the super implementation. +// */ +// public void preferenceChanged(View child, boolean widthPreferenceChanged, +// boolean heightPreferenceChanged) { +// +// if (heightPreferenceChanged) { +// sizeRequirementsValid = false; +//// majorAllocValid = false; +// } +//// if (width) { +//// minorReqValid = false; +//// minorAllocValid = false; +//// } +// +// super.preferenceChanged(child, widthPreferenceChanged, heightPreferenceChanged); +// +// } +// +// public void replace(int index, int length, View[] elems) { +// +// super.replace(index, length, elems); +// +// // Invalidate cache +// int insertCount = elems==null ? 0 : elems.length; +// cachedOffsets = updateLayoutArray(cachedOffsets, index, insertCount); +// majorReqValid = false; +// majorAllocValid = false; +// +// } +// +// +// private int[] updateLayoutArray(int[] oldArray, int offset, int nInserted) { +// int n = getViewCount(); // Called after super.replace() so this is accurate +// int[] newArray = new int[n]; +// System.arraycopy(oldArray, 0, newArray, 0, offset); +// System.arraycopy(oldArray, offset, +// newArray, offset + nInserted, n - nInserted - offset); +// return newArray; +// } +// + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java b/src/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java new file mode 100644 index 0000000..d02eb28 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java @@ -0,0 +1,232 @@ +/* + * 03/09/2013 + * + * XmlOccurrenceMarker - Marks occurrences of the current token for XML. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; + +import org.fife.ui.rtextarea.SmartHighlightPainter; + + +/** + * Marks occurrences of the current token for XML. + * + * @author Robert Futrell + * @version 1.0 + */ +public class XmlOccurrenceMarker implements OccurrenceMarker { + + private static final char[] CLOSE_TAG_START = { '<', '/' }; + private static final char[] TAG_SELF_CLOSE = { '/', '>' }; + + + /** + * {@inheritDoc} + */ + @Override + public Token getTokenToMark(RSyntaxTextArea textArea) { + return HtmlOccurrenceMarker.getTagNameTokenForCaretOffset( + textArea, this); + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean isValidType(RSyntaxTextArea textArea, Token t) { + return textArea.getMarkOccurrencesOfTokenType(t.getType()); + } + + + /** + * {@inheritDoc} + */ + @Override + public void markOccurrences(RSyntaxDocument doc, Token t, + RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { + + char[] lexeme = t.getLexeme().toCharArray(); + int tokenOffs = t.getOffset(); + Element root = doc.getDefaultRootElement(); + int lineCount = root.getElementCount(); + int curLine = root.getElementIndex(t.getOffset()); + int depth = 0; + + // For now, we only check for tags on the current line, for + // simplicity. Tags spanning multiple lines aren't common anyway. + boolean found = false; + boolean forward = true; + t = doc.getTokenListForLine(curLine); + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.isSingleChar('<') && t.getOffset()+1==tokenOffs) { + found = true; + break; + } + else if (t.is(CLOSE_TAG_START) && t.getOffset()+2==tokenOffs) { + found = true; + forward = false; + break; + } + } + t = t.getNextToken(); + } + + if (!found) { + return; + } + + if (forward) { + + t = t.getNextToken().getNextToken(); + + do { + + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.is(CLOSE_TAG_START)) { + Token match = t.getNextToken(); + if (match!=null && match.is(lexeme)) { + if (depth>0) { + depth--; + } + else { + try { + int end = match.getOffset() + match.length(); + h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); + end = tokenOffs + match.length(); + h.addMarkedOccurrenceHighlight(tokenOffs, end, p); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + return; // We're done! + } + } + } + else if (t.isSingleChar('<')) { + t = t.getNextToken(); + if (t!=null && t.is(lexeme)) { + depth++; + } + } + } + t = t==null ? null : t.getNextToken(); + } + + if (++curLine openCloses = new ArrayList(); + boolean inPossibleMatch = false; + t = doc.getTokenListForLine(curLine); + final int endBefore = tokenOffs - 2; // Stop before "')) { + inPossibleMatch = false; + } + else if (inPossibleMatch && t.is(TAG_SELF_CLOSE)) { + openCloses.remove(openCloses.size()-1); + inPossibleMatch = false; + } + else if (t.is(CLOSE_TAG_START)) { + Token next = t.getNextToken(); + if (next!=null) { + // Invalid XML might not have a match + if (next.is(lexeme)) { + openCloses.add(new Entry(false, next)); + } + t = next; + } + } + } + t = t.getNextToken(); + } + + for (int i=openCloses.size()-1; i>=0; i--) { + Entry entry = openCloses.get(i); + depth += entry.open ? -1 : 1; + if (depth==-1) { + try { + Token match = entry.t; + int end = match.getOffset() + match.length(); + h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); + end = tokenOffs + match.length(); + h.addMarkedOccurrenceHighlight(tokenOffs, end, p); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + openCloses.clear(); + return; + } + } + + openCloses.clear(); + if (--curLine>=0) { + t = doc.getTokenListForLine(curLine); + } + + } while (curLine>=0); + + + } + + } + + + /** + * Used internally when searching backward for a matching "open" tag. + */ + private static class Entry { + + private boolean open; + private Token t; + + Entry(boolean open, Token t) { + this.open = open; + this.t = t; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java new file mode 100644 index 0000000..d39f1a7 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java @@ -0,0 +1,389 @@ +/* + * 07/29/2009 + * + * FocusableTip.java - A focusable tool tip, like those in Eclipse. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.focusabletip; + +import java.awt.Component; +import java.awt.ComponentOrientation; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Window; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.net.URL; +import java.util.ResourceBundle; + +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.HyperlinkListener; +import javax.swing.event.MouseInputAdapter; + +import org.fife.ui.rsyntaxtextarea.PopupWindowDecorator; + + +/** + * A focusable tool tip, similar to those found in Eclipse. The user + * can click in the tip and it becomes a "real," resizable window. + * + * @author Robert Futrell + * @version 1.0 + */ +public class FocusableTip { + + private JTextArea textArea; + private TipWindow tipWindow; + private URL imageBase; + private TextAreaListener textAreaListener; + private HyperlinkListener hyperlinkListener; + private String lastText; + + private Dimension maxSize; // null to automatic. + + /** + * The screen bounds in which the mouse has to stay for the currently + * displayed tip to stay visible. + */ + private Rectangle tipVisibleBounds; + + /** + * Margin from mouse cursor at which to draw focusable tip. + */ + private static final int X_MARGIN = 18; + + /** + * Margin from mouse cursor at which to draw focusable tip. + */ + private static final int Y_MARGIN = 12; + + private static final ResourceBundle MSG = ResourceBundle.getBundle( + "org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip"); + + + public FocusableTip(JTextArea textArea, HyperlinkListener listener) { + setTextArea(textArea); + this.hyperlinkListener = listener; + textAreaListener = new TextAreaListener(); + tipVisibleBounds = new Rectangle(); + } + + + /** + * Compute the bounds in which the user can move the mouse without the + * tip window disappearing. + */ + private void computeTipVisibleBounds() { + // Compute area that the mouse can move in without hiding the + // tip window. Note that Java 1.4 can only detect mouse events + // in Java windows, not globally. + Rectangle r = tipWindow.getBounds(); + Point p = r.getLocation(); + SwingUtilities.convertPointFromScreen(p, textArea); + r.setLocation(p); + tipVisibleBounds.setBounds(r.x,r.y-15, r.width,r.height+15*2); + } + + + private void createAndShowTipWindow(final MouseEvent e, final String text) { + + Window owner = SwingUtilities.getWindowAncestor(textArea); + tipWindow = new TipWindow(owner, this, text); + tipWindow.setHyperlinkListener(hyperlinkListener); + + // Give apps a chance to decorate us with drop shadows, etc. + PopupWindowDecorator decorator = PopupWindowDecorator.get(); + if (decorator!=null) { + decorator.decorate(tipWindow); + } + + // TODO: Position tip window better (handle RTL, edges of screen, etc.). + // Wrap in an invokeLater() to work around a JEditorPane issue where it + // doesn't return its proper preferred size until after it is displayed. + // See http://forums.sun.com/thread.jspa?forumID=57&threadID=574810 + // for a discussion. + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + + // If a new FocusableTip is requested while another one is + // *focused* and visible, the focused tip (i.e. "tipWindow") + // will be disposed of. If this Runnable is run after the + // dispose(), tipWindow will be null. All of this is done on + // the EDT so no synchronization should be necessary. + if (tipWindow==null) { + return; + } + + tipWindow.fixSize(); + ComponentOrientation o = textArea.getComponentOrientation(); + + Point p = e.getPoint(); + SwingUtilities.convertPointToScreen(p, textArea); + + // Ensure tool tip is in the window bounds. + // Multi-monitor support - make sure the completion window (and + // description window, if applicable) both fit in the same + // window in a multi-monitor environment. To do this, we decide + // which monitor the rectangle "p" is in, and use that one. + Rectangle sb = TipUtil.getScreenBoundsForPoint(p.x, p.y); + //Dimension ss = tipWindow.getToolkit().getScreenSize(); + + // Try putting our stuff "below" the mouse first. + int y = p.y + Y_MARGIN; + if (y+tipWindow.getHeight()>=sb.y+sb.height) { + y = p.y - Y_MARGIN - tipWindow.getHeight(); + } + + // Get x-coordinate of completions. Try to align left edge + // with the mouse first (with a slight margin). + int x = p.x - X_MARGIN; // ltr + if (!o.isLeftToRight()) { + x = p.x - tipWindow.getWidth() + X_MARGIN; + } + if (xsb.x+sb.width) { // completions don't fit + x = sb.x + sb.width - tipWindow.getWidth(); + } + + tipWindow.setLocation(x, y); + tipWindow.setVisible(true); + + computeTipVisibleBounds(); // Do after tip is visible + textAreaListener.install(textArea); + lastText = text; + + } + }); + + } + + + /** + * Returns the base URL to use when loading images in this focusable tip. + * + * @return The base URL to use. + * @see #setImageBase(URL) + */ + public URL getImageBase() { + return imageBase; + } + + + /** + * The maximum size for unfocused tool tips. + * + * @return The maximum size for unfocused tool tips. A value of + * null will use a default size. + * @see #setMaxSize(Dimension) + */ + public Dimension getMaxSize() { + return maxSize; + } + + + /** + * Returns localized text for the given key. + * + * @param key The key into the resource bundle. + * @return The localized text. + */ + static String getString(String key) { + return MSG.getString(key); + } + + + /** + * Disposes of the focusable tip currently displayed, if any. + */ + public void possiblyDisposeOfTipWindow() { + if (tipWindow != null) { + tipWindow.dispose(); + tipWindow = null; + textAreaListener.uninstall(); + tipVisibleBounds.setBounds(-1, -1, 0, 0); + lastText = null; + textArea.requestFocus(); + } + } + + + void removeListeners() { + //System.out.println("DEBUG: Removing text area listeners"); + textAreaListener.uninstall(); + } + + + /** + * Sets the base URL to use when loading images in this focusable tip. + * + * @param url The base URL to use. + * @see #getImageBase() + */ + public void setImageBase(URL url) { + imageBase = url; + } + + + /** + * Sets the maximum size for unfocused tool tips. + * + * @param maxSize The new maximum size. A value of null will + * cause a default size to be used. + * @see #getMaxSize() + */ + public void setMaxSize(Dimension maxSize) { + this.maxSize = maxSize; + } + + + private void setTextArea(JTextArea textArea) { + this.textArea = textArea; + // Is okay to do multiple times. + ToolTipManager.sharedInstance().registerComponent(textArea); + } + + + public void toolTipRequested(MouseEvent e, String text) { + + if (text==null || text.length()==0) { + possiblyDisposeOfTipWindow(); + lastText = text; + return; + } + + if (lastText==null || text.length()!=lastText.length() || + !text.equals(lastText)) { + possiblyDisposeOfTipWindow(); + createAndShowTipWindow(e, text); + } + + } + + + /** + * Listens for events in a text area. + */ + private class TextAreaListener extends MouseInputAdapter implements + CaretListener, ComponentListener, FocusListener, KeyListener { + + @Override + public void caretUpdate(CaretEvent e) { + Object source = e.getSource(); + if (source == textArea) { + possiblyDisposeOfTipWindow(); + } + } + + @Override + public void componentHidden(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void componentMoved(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void componentResized(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void componentShown(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void focusGained(FocusEvent e) { + } + + @Override + public void focusLost(FocusEvent e) { + // Only dispose of tip if it wasn't the TipWindow that was clicked + // "c" can be null, at least on OS X, so we must check that before + // calling SwingUtilities.getWindowAncestor() to guard against an + // NPE. + Component c = e.getOppositeComponent(); + boolean tipClicked = (c instanceof TipWindow) || + (c!=null && + SwingUtilities.getWindowAncestor(c) instanceof TipWindow); + if (!tipClicked) { + possiblyDisposeOfTipWindow(); + } + } + + private void handleComponentEvent(ComponentEvent e) { + possiblyDisposeOfTipWindow(); + } + + public void install(JTextArea textArea) { + textArea.addCaretListener(this); + textArea.addComponentListener(this); + textArea.addFocusListener(this); + textArea.addKeyListener(this); + textArea.addMouseListener(this); + textArea.addMouseMotionListener(this); + } + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { + possiblyDisposeOfTipWindow(); + } + else if (e.getKeyCode()==KeyEvent.VK_F2) { + if (tipWindow!=null && !tipWindow.getFocusableWindowState()) { + tipWindow.actionPerformed(null); + e.consume(); // Don't do bookmarking stuff + } + } + } + + @Override + public void keyReleased(KeyEvent e) { + } + + @Override + public void keyTyped(KeyEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + // possiblyDisposeOfTipWindow(); + } + + @Override + public void mouseMoved(MouseEvent e) { + if (tipVisibleBounds==null || + !tipVisibleBounds.contains(e.getPoint())) { + possiblyDisposeOfTipWindow(); + } + } + + public void uninstall() { + textArea.removeCaretListener(this); + textArea.removeComponentListener(this); + textArea.removeFocusListener(this); + textArea.removeKeyListener(this); + textArea.removeMouseListener(this); + textArea.removeMouseMotionListener(this); + } + + } + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.properties new file mode 100644 index 0000000..c23859d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.properties @@ -0,0 +1 @@ +FocusHotkey=Press 'F2' for focus diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ar.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ar.properties new file mode 100644 index 0000000..ebbefc3 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ar.properties @@ -0,0 +1 @@ +FocusHotkey=\u0627\u0636\u063a\u0637 'F2' \u0645\u0646 \u0627\u062c\u0644 \u0627\u0644\u062a\u0631\u0643\u064a\u0632 diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_de.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_de.properties new file mode 100644 index 0000000..720e386 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_de.properties @@ -0,0 +1 @@ +FocusHotkey=Zum Fokussieren 'F2' dr\u00fccken \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_es.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_es.properties new file mode 100644 index 0000000..75a869e --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_es.properties @@ -0,0 +1 @@ +FocusHotkey=Presionar 'F2' para enfocar diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_fr.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_fr.properties new file mode 100644 index 0000000..9dfdf4b --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_fr.properties @@ -0,0 +1 @@ +FocusHotkey=Press 'F2' pour se concentrer diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_hu.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_hu.properties new file mode 100644 index 0000000..6a1efec --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_hu.properties @@ -0,0 +1 @@ +FocusHotkey=Nyomja meg az 'F2' billenty\u0171t a f\u00f3kuszba \u00e1ll\u00edt\u00e1shoz diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_in.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_in.properties new file mode 100644 index 0000000..c23859d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_in.properties @@ -0,0 +1 @@ +FocusHotkey=Press 'F2' for focus diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_it.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_it.properties new file mode 100644 index 0000000..b959339 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_it.properties @@ -0,0 +1 @@ +FocusHotkey=Premi 'F2' per il focus diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ja.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ja.properties new file mode 100644 index 0000000..7a3815f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ja.properties @@ -0,0 +1 @@ +FocusHotkey=\u30d5\u30a9\u30fc\u30ab\u30b9\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u300c\uff26\uff12\u300d\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002 diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ko.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ko.properties new file mode 100644 index 0000000..bf5c351 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ko.properties @@ -0,0 +1 @@ +FocusHotkey=\ud3ec\ucee4\uc2a4\ub97c \uc8fc\ub824\uba74 'F2'\ub97c \ub204\ub974\uc138\uc694 diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_nl.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_nl.properties new file mode 100644 index 0000000..c23859d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_nl.properties @@ -0,0 +1 @@ +FocusHotkey=Press 'F2' for focus diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pl.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pl.properties new file mode 100644 index 0000000..a662c64 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pl.properties @@ -0,0 +1 @@ +FocusHotkey=Naci\u015bnij 'F2' aby wy\u015bwietli\u0107 diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pt_BR.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pt_BR.properties new file mode 100644 index 0000000..ccf4be9 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pt_BR.properties @@ -0,0 +1 @@ +FocusHotkey=Aperte 'F2' para focar diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ru.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ru.properties new file mode 100644 index 0000000..74cbb44 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ru.properties @@ -0,0 +1 @@ +FocusHotkey=\u041d\u0430\u0436\u0430\u0442\u044c 'F2' \u0434\u043b\u044f \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u043a\u0438 diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_tr.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_tr.properties new file mode 100644 index 0000000..816176d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_tr.properties @@ -0,0 +1 @@ +FocusHotkey=Odaklanmak i\u00e7in 'F2'e bas\u0131n\u0131z diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_CN.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_CN.properties new file mode 100644 index 0000000..1165854 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_CN.properties @@ -0,0 +1 @@ +FocusHotkey=\u6309'F2' \u805a\u7126 diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_TW.properties b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_TW.properties new file mode 100644 index 0000000..c23859d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_TW.properties @@ -0,0 +1 @@ +FocusHotkey=Press 'F2' for focus diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java b/src/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java new file mode 100644 index 0000000..6092acd --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java @@ -0,0 +1,258 @@ +/* + * 12/23/2008 + * + * SizeGrip.java - A size grip component that sits at the bottom of the window, + * allowing the user to easily resize that window. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.focusabletip; + +import java.awt.Color; +import java.awt.ComponentOrientation; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Point; +import java.awt.Window; +import java.awt.event.MouseEvent; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import javax.imageio.ImageIO; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.event.MouseInputAdapter; + + +/** + * A component that allows its parent window to be resizable, similar to the + * size grip seen on status bars. + * + * @author Robert Futrell + * @version 1.0 + */ +@SuppressWarnings({ "checkstyle:magicnumber" }) +class SizeGrip extends JPanel { + + /** + * The size grip to use if we're on OS X. + */ + private transient Image osxSizeGrip; + + + SizeGrip() { + MouseHandler adapter = new MouseHandler(); + addMouseListener(adapter); + addMouseMotionListener(adapter); + setPreferredSize(new Dimension(16, 16)); + } + + + /** + * Overridden to ensure that the cursor for this component is appropriate + * for the orientation. + * + * @param o The new orientation. + */ + @Override + public void applyComponentOrientation(ComponentOrientation o) { + possiblyFixCursor(o.isLeftToRight()); + super.applyComponentOrientation(o); + } + + + /** + * Creates and returns the OS X size grip image. + * + * @return The OS X size grip. + */ + private Image createOSXSizeGrip() { + ClassLoader cl = getClass().getClassLoader(); + URL url = cl.getResource("org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png"); + if (url==null) { + // We're not running in a jar - we may be debugging in Eclipse, + // for example + File f = new File("../RSyntaxTextArea/src/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png"); + if (f.isFile()) { + try { + url = f.toURI().toURL(); + } catch (MalformedURLException mue) { // Never happens + mue.printStackTrace(); + return null; + } + } + else { + return null; // Can't find resource or image file + } + } + Image image = null; + try { + image = ImageIO.read(url); + } catch (IOException ioe) { // Never happens + ioe.printStackTrace(); + } + return image; + } + + + /** + * Paints this panel. + * + * @param g The graphics context. + */ + @Override + protected void paintComponent(Graphics g) { + + super.paintComponent(g); + + Dimension dim = getSize(); + + if (osxSizeGrip!=null) { + g.drawImage(osxSizeGrip, dim.width-16, dim.height-16, null); + return; + } + + Color c1 = UIManager.getColor("Label.disabledShadow"); + Color c2 = UIManager.getColor("Label.disabledForeground"); + ComponentOrientation orientation = getComponentOrientation(); + + if (orientation.isLeftToRight()) { + int width = dim.width -= 3; + int height = dim.height -= 3; + g.setColor(c1); + g.fillRect(width-9,height-1, 3,3); + g.fillRect(width-5,height-1, 3,3); + g.fillRect(width-1,height-1, 3,3); + g.fillRect(width-5,height-5, 3,3); + g.fillRect(width-1,height-5, 3,3); + g.fillRect(width-1,height-9, 3,3); + g.setColor(c2); + g.fillRect(width-9,height-1, 2,2); + g.fillRect(width-5,height-1, 2,2); + g.fillRect(width-1,height-1, 2,2); + g.fillRect(width-5,height-5, 2,2); + g.fillRect(width-1,height-5, 2,2); + g.fillRect(width-1,height-9, 2,2); + } + else { + int height = dim.height -= 3; + g.setColor(c1); + g.fillRect(10,height-1, 3,3); + g.fillRect(6,height-1, 3,3); + g.fillRect(2,height-1, 3,3); + g.fillRect(6,height-5, 3,3); + g.fillRect(2,height-5, 3,3); + g.fillRect(2,height-9, 3,3); + g.setColor(c2); + g.fillRect(10,height-1, 2,2); + g.fillRect(6,height-1, 2,2); + g.fillRect(2,height-1, 2,2); + g.fillRect(6,height-5, 2,2); + g.fillRect(2,height-5, 2,2); + g.fillRect(2,height-9, 2,2); + } + + } + + + /** + * Ensures that the cursor for this component is appropriate for the + * orientation. + * + * @param ltr Whether the current component orientation is LTR. + */ + protected void possiblyFixCursor(boolean ltr) { + int cursor = Cursor.NE_RESIZE_CURSOR; + if (ltr) { + cursor = Cursor.NW_RESIZE_CURSOR; + } + if (cursor!=getCursor().getType()) { + setCursor(Cursor.getPredefinedCursor(cursor)); + } + } + + + @Override + public void updateUI() { + super.updateUI(); + // TODO: Key off of Aqua LaF, not just OS X, as this size grip looks + // bad on other LaFs on Mac such as Nimbus. + if (System.getProperty("os.name").contains("OS X")) { + if (osxSizeGrip==null) { + osxSizeGrip = createOSXSizeGrip(); + } + } + else { // Clear memory in case of runtime LaF change. + osxSizeGrip = null; + } + + } + + + /** + * Listens for mouse events on this panel and resizes the parent window + * appropriately. + */ + private class MouseHandler extends MouseInputAdapter { + + /* + * NOTE: We use SwingUtilities.convertPointToScreen() instead of just using + * the locations relative to the corner component because the latter proved + * buggy - stretch the window too wide and some kind of arithmetic error + * started happening somewhere - our window would grow way too large. + */ + + private Point origPos; + + @Override + public void mouseDragged(MouseEvent e) { + Point newPos = e.getPoint(); + SwingUtilities.convertPointToScreen(newPos, SizeGrip.this); + int xDelta = newPos.x - origPos.x; + int yDelta = newPos.y - origPos.y; + Window wind = SwingUtilities.getWindowAncestor(SizeGrip.this); + if (wind!=null) { // Should always be true + if (getComponentOrientation().isLeftToRight()) { + int w = wind.getWidth(); + if (newPos.x>=wind.getX()) { + w += xDelta; + } + int h = wind.getHeight(); + if (newPos.y>=wind.getY()) { + h += yDelta; + } + wind.setSize(w,h); + } + else { // RTL + int newW = Math.max(1, wind.getWidth()-xDelta); + int newH = Math.max(1, wind.getHeight()+yDelta); + wind.setBounds(newPos.x, wind.getY(), newW, newH); + } + // invalidate()/validate() needed pre-1.6. + wind.invalidate(); + wind.validate(); + } + origPos.setLocation(newPos); + } + + @Override + public void mousePressed(MouseEvent e) { + origPos = e.getPoint(); + SwingUtilities.convertPointToScreen(origPos, SizeGrip.this); + } + + @Override + public void mouseReleased(MouseEvent e) { + origPos = null; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java b/src/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java new file mode 100644 index 0000000..885ad47 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java @@ -0,0 +1,250 @@ +/* + * 08/13/2009 + * + * TipUtil.java - Utility methods for homemade tool tips. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.focusabletip; + +import java.awt.Color; +import java.awt.Font; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Rectangle; +import java.awt.SystemColor; + +import javax.swing.BorderFactory; +import javax.swing.JEditorPane; +import javax.swing.UIManager; +import javax.swing.border.Border; +import javax.swing.plaf.ColorUIResource; +import javax.swing.text.html.HTMLDocument; + +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; + + +/** + * Static utility methods for focusable tips. + * + * @author Robert Futrell + * @version 1.0 + */ +public final class TipUtil { + + + private TipUtil() { + } + + + /** + * Returns a hex string for the specified color, suitable for HTML. + * + * @param c The color. + * @return The string representation, in the form "#rrggbb", + * or null if c is null. + */ + private static String getHexString(Color c) { + + if (c==null) { + return null; + } + + StringBuilder sb = new StringBuilder("#"); + int r = c.getRed(); + if (r<16) { + sb.append('0'); + } + sb.append(Integer.toHexString(r)); + int g = c.getGreen(); + if (g<16) { + sb.append('0'); + } + sb.append(Integer.toHexString(g)); + int b = c.getBlue(); + if (b<16) { + sb.append('0'); + } + sb.append(Integer.toHexString(b)); + + return sb.toString(); + + } + + + /** + * Returns the screen coordinates for the monitor that contains the + * specified point. This is useful for setups with multiple monitors, + * to ensure that popup windows are positioned properly. + * + * @param x The x-coordinate, in screen coordinates. + * @param y The y-coordinate, in screen coordinates. + * @return The bounds of the monitor that contains the specified point. + */ + public static Rectangle getScreenBoundsForPoint(int x, int y) { + GraphicsEnvironment env = GraphicsEnvironment. + getLocalGraphicsEnvironment(); + GraphicsDevice[] devices = env.getScreenDevices(); + for (int i=0; iJEditorPane so it can be used to render the + * content in a focusable pseudo-tool tip. It is assumed that the editor + * pane is using an HTMLDocument. + * + * @param textArea The editor pane to tweak. + */ + public static void tweakTipEditorPane(JEditorPane textArea) { + + // Jump through a few hoops to get things looking nice in Nimbus + boolean isNimbus = isNimbusLookAndFeel(); + if (isNimbus) { + Color selBG = textArea.getSelectionColor(); + Color selFG = textArea.getSelectedTextColor(); + textArea.setUI(new javax.swing.plaf.basic.BasicEditorPaneUI()); + textArea.setSelectedTextColor(selFG); + textArea.setSelectionColor(selBG); + } + + textArea.setEditable(false); // Required for links to work! + textArea.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); + + // Make selection visible even though we are not (initially) focusable. + textArea.getCaret().setSelectionVisible(true); + + // Set the foreground color. Important because when rendering HTML, + // default foreground becomes black, which may not match all LAF's + // (e.g. Substance). + Color fg = UIManager.getColor("Label.foreground"); + if (fg==null || (isNimbus && isDerivedColor(fg))) { + fg = SystemColor.textText; + } + textArea.setForeground(fg); + + // Make it use the "tool tip" background color. + textArea.setBackground(TipUtil.getToolTipBackground()); + + // Force JEditorPane to use a certain font even in HTML. + // All standard LookAndFeels, even Nimbus (!), define Label.font. + Font font = UIManager.getFont("Label.font"); + if (font == null) { // Try to make a sensible default + font = new Font("SansSerif", Font.PLAIN, 12); + } + HTMLDocument doc = (HTMLDocument) textArea.getDocument(); + setFont(doc, font, fg); + + // Always add link foreground rule. Unfortunately these CSS rules + // stack each time the LaF is changed (how can we overwrite them + // without clearing out the important "standard" ones?). + Color linkFG = RSyntaxUtilities.getHyperlinkForeground(); + doc.getStyleSheet().addRule( + "a { color: " + getHexString(linkFG) + "; }"); + + } + + + /** + * Sets the default font for an HTML document (e.g., in a tool tip + * displaying HTML). This is here because when rendering HTML, + * {@code setFont()} is not honored. + * + * @param doc The document to modify. + * @param font The font to use. + * @param fg The default foreground color. + */ + public static void setFont(HTMLDocument doc, Font font, Color fg) { + doc.getStyleSheet().addRule( + "body { font-family: " + font.getFamily() + + "; font-size: " + font.getSize() + "pt" + + "; color: " + getHexString(fg) + "; }"); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java b/src/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java new file mode 100644 index 0000000..3532068 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java @@ -0,0 +1,351 @@ +/* + * 07/29/2009 + * + * TipWindow.java - The actual window component representing the tool tip. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.focusabletip; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.BorderFactory; +import javax.swing.JEditorPane; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.JWindow; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.border.Border; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.event.MouseInputAdapter; +import javax.swing.text.BadLocationException; +import javax.swing.text.html.HTMLDocument; + +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; + + +/** + * The actual tool tip component. + * + * @author Robert Futrell + * @version 1.0 + */ +class TipWindow extends JWindow implements ActionListener { + + private FocusableTip ft; + private JEditorPane textArea; + private String text; + private transient TipListener tipListener; + private transient HyperlinkListener userHyperlinkListener; + + private static TipWindow visibleInstance; + + + /** + * Constructor. + * + * @param owner The parent window. + * @param msg The text of the tool tip. This can be HTML. + */ + TipWindow(Window owner, FocusableTip ft, String msg) { + + super(owner); + this.ft = ft; + // Render plain text tool tips correctly. + if (msg!=null && msg.length()>=6 && + !msg.substring(0,6).toLowerCase().equals("")) { + msg = "" + RSyntaxUtilities.escapeForHtml(msg, "
", false); + } + this.text = msg; + tipListener = new TipListener(); + + JPanel cp = new JPanel(new BorderLayout()); + cp.setBorder(TipUtil.getToolTipBorder()); + cp.setBackground(TipUtil.getToolTipBackground()); + textArea = new JEditorPane("text/html", text); + TipUtil.tweakTipEditorPane(textArea); + if (ft.getImageBase()!=null) { // Base URL for images + ((HTMLDocument)textArea.getDocument()).setBase(ft.getImageBase()); + } + textArea.addMouseListener(tipListener); + textArea.addHyperlinkListener(new HyperlinkListener() { + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + if (e.getEventType()==HyperlinkEvent.EventType.ACTIVATED) { + TipWindow.this.ft.possiblyDisposeOfTipWindow(); + } + } + }); + cp.add(textArea); + + setFocusableWindowState(false); + setContentPane(cp); + setBottomPanel(); // Must do after setContentPane() + pack(); + + // InputMap/ActionMap combo doesn't work for JWindows (even when + // using the JWindow's JRootPane), so we'll resort to KeyListener + KeyAdapter ka = new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { + TipWindow.this.ft.possiblyDisposeOfTipWindow(); + } + } + }; + addKeyListener(ka); + textArea.addKeyListener(ka); + + // Ensure only 1 TipWindow is ever visible. If the caller does what + // they're supposed to and only creates these on the EDT, the + // synchronization isn't necessary, but we'll be extra safe. + synchronized (TipWindow.class) { + if (visibleInstance!=null) { + visibleInstance.dispose(); + } + visibleInstance = this; + } + + } + + + @Override + public void actionPerformed(ActionEvent e) { + + if (!getFocusableWindowState()) { + setFocusableWindowState(true); + setBottomPanel(); + textArea.removeMouseListener(tipListener); + pack(); + addWindowFocusListener(new WindowAdapter() { + @Override + public void windowLostFocus(WindowEvent e) { + ft.possiblyDisposeOfTipWindow(); + } + }); + ft.removeListeners(); + if (e==null) { // Didn't get here via our mouseover timer + requestFocus(); + } + } + + } + + + /** + * Disposes of this window. + */ + @Override + public void dispose() { + //System.out.println("[DEBUG]: Disposing..."); + Container cp = getContentPane(); + for (int i=0; id.height) { + d.height = r.y + r.height + 5; + if(ft.getMaxSize() != null) { + d.height = Math.min(d.height, maxWindowH); + } + textArea.setPreferredSize(d); + } + + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + + pack(); // Must re-pack to calculate proper size. + + } + + + public String getText() { + return text; + } + + + private void setBottomPanel() { + + final JPanel panel = new JPanel(new BorderLayout()); + panel.add(new JSeparator(), BorderLayout.NORTH); + + boolean focusable = getFocusableWindowState(); + if (focusable) { + SizeGrip sg = new SizeGrip(); + sg.applyComponentOrientation(sg.getComponentOrientation()); // Workaround + panel.add(sg, BorderLayout.LINE_END); + MouseInputAdapter adapter = new MouseInputAdapter() { + private Point lastPoint; + @Override + public void mouseDragged(MouseEvent e) { + Point p = e.getPoint(); + SwingUtilities.convertPointToScreen(p, panel); + if (lastPoint==null) { + lastPoint = p; + } + else { + int dx = p.x - lastPoint.x; + int dy = p.y - lastPoint.y; + setLocation(getX()+dx, getY()+dy); + lastPoint = p; + } + } + @Override + public void mousePressed(MouseEvent e) { + lastPoint = e.getPoint(); + SwingUtilities.convertPointToScreen(lastPoint, panel); + } + }; + panel.addMouseListener(adapter); + panel.addMouseMotionListener(adapter); + // Don't add tipListener to the panel or SizeGrip + } + else { + panel.setOpaque(false); + JLabel label = new JLabel(FocusableTip.getString("FocusHotkey")); + Color fg = UIManager.getColor("Label.disabledForeground"); + Font font = textArea.getFont(); + font = font.deriveFont(font.getSize2D() - 1.0f); + label.setFont(font); + if (fg==null) { // Non BasicLookAndFeel-derived Looks + fg = Color.GRAY; + } + label.setOpaque(true); + Color bg = TipUtil.getToolTipBackground(); + label.setBackground(bg); + label.setForeground(fg); + label.setHorizontalAlignment(SwingConstants.TRAILING); + label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + panel.add(label); + panel.addMouseListener(tipListener); + } + + // Replace the previous SOUTH Component with the new one. + Container cp = getContentPane(); + if (cp.getComponentCount()==2) { // Skip first time through + Component comp = cp.getComponent(0); + cp.remove(0); + JScrollPane sp = new JScrollPane(comp); + Border emptyBorder = BorderFactory.createEmptyBorder(); + sp.setBorder(emptyBorder); + sp.setViewportBorder(emptyBorder); + sp.setBackground(textArea.getBackground()); + sp.getViewport().setBackground(textArea.getBackground()); + cp.add(sp); + // What was component 1 is now 0. + cp.getComponent(0).removeMouseListener(tipListener); + cp.remove(0); + } + + cp.add(panel, BorderLayout.SOUTH); + + } + + + /** + * Sets the listener for hyperlink events in this tip window. + * + * @param listener The new listener. The old listener (if any) is + * removed. A value of null means "no listener." + */ + public void setHyperlinkListener(HyperlinkListener listener) { + // We've added a separate listener, so remove only the user's. + if (userHyperlinkListener!=null) { + textArea.removeHyperlinkListener(userHyperlinkListener); + } + userHyperlinkListener = listener; + if (userHyperlinkListener!=null) { + textArea.addHyperlinkListener(userHyperlinkListener); + } + } + + + /** + * Listens for events in this window. + */ + private final class TipListener extends MouseAdapter { + + private TipListener() { + } + + @Override + public void mousePressed(MouseEvent e) { + actionPerformed(null); // Manually create "real" window + } + + @Override + public void mouseExited(MouseEvent e) { + // Since we registered this listener on the child components of + // the JWindow, not the JWindow iteself, we have to be careful. + Component source = (Component)e.getSource(); + Point p = e.getPoint(); + SwingUtilities.convertPointToScreen(p, source); + if (!TipWindow.this.getBounds().contains(p)) { + ft.possiblyDisposeOfTipWindow(); + } + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png b/src/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png new file mode 100644 index 0000000..07fa8b1 Binary files /dev/null and b/src/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png differ diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java b/src/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java new file mode 100644 index 0000000..85b45fb --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java @@ -0,0 +1,338 @@ +/* + * 10/08/2011 + * + * CurlyFoldParser.java - Fold parser for languages with C-style syntax. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + + +/** + * A basic fold parser that can be used for languages such as C, that use + * curly braces to denote code blocks. This parser searches for curly brace + * pairs and creates code folds out of them. It can also optionally find + * C-style multi-line comments ("/* ... */") and make them + * foldable as well.

+ * + * This parser knows nothing about language semantics; it uses + * RSyntaxTextArea's syntax highlighting tokens to identify + * curly braces. By default, it looks for single-char tokens of type + * {@link Token#SEPARATOR}, with lexemes '{' or '}'. + * If your {@link org.fife.ui.rsyntaxtextarea.TokenMaker} uses a different token + * type for curly braces, you should override the {@link #isLeftCurly(Token)} and + * {@link #isRightCurly(Token)} methods with your own definitions. In theory, + * you could extend this fold parser to parse languages that use completely + * different tokens than curly braces to denote foldable regions by overriding + * those two methods.

+ * + * Note also that this class may impose somewhat of a performance penalty on + * large source files, since it re-parses the entire document each time folds + * are reevaluated. + * + * @author Robert Futrell + * @version 1.0 + */ +public class CurlyFoldParser implements FoldParser { + + /** + * Whether to scan for C-style multi-line comments and make them foldable. + */ + private boolean foldableMultiLineComments; + + /** + * Whether this parser is folding Java. + */ + private final boolean java; + + /** + * Used to find import statements when folding Java code. + */ + private static final char[] KEYWORD_IMPORT = "import".toCharArray(); + + /** + * Ending of a multi-line comment in C, C++, Java, etc. + */ + protected static final char[] C_MLC_END = "*/".toCharArray(); + + + /** + * Creates a fold parser that identifies foldable regions via curly braces + * as well as C-style multi-line comments. + */ + public CurlyFoldParser() { + this(true, false); + } + + + /** + * Constructor. + * + * @param cStyleMultiLineComments Whether to scan for C-style multi-line + * comments and make them foldable. + * @param java Whether this parser is folding Java. This adds extra + * parsing rules, such as grouping all import statements into a + * fold section. + */ + public CurlyFoldParser(boolean cStyleMultiLineComments, boolean java) { + this.foldableMultiLineComments = cStyleMultiLineComments; + this.java = java; + } + + + /** + * Returns whether multi-line comments are foldable with this parser. + * + * @return Whether multi-line comments are foldable. + * @see #setFoldableMultiLineComments(boolean) + */ + public boolean getFoldableMultiLineComments() { + return foldableMultiLineComments; + } + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + int mlcStart = 0; + int importStartLine = -1; + int lastSeenImportLine = -1; + int importGroupStartOffs = -1; + int importGroupEndOffs = -1; + int lastRightCurlyLine = -1; + Fold prevFold = null; + + try { + + for (int line=0; line-1) { + if (lastSeenImportLine>importStartLine) { + Fold fold = null; + // Any imports found *should* be a top-level fold, + // but we're extra lenient here and allow groups + // of them anywhere to keep our parser better-behaved + // if they have random "imports" throughout code. + if (currentFold==null) { + fold = new Fold(FoldType.IMPORTS, + textArea, importGroupStartOffs); + folds.add(fold); + } + else { + fold = currentFold.createChild(FoldType.IMPORTS, + importGroupStartOffs); + } + fold.setEndOffset(importGroupEndOffs); + } + importStartLine = lastSeenImportLine = + importGroupStartOffs = importGroupEndOffs = -1; + } + + } + + if (inMLC) { + // If we found the end of an MLC that started + // on a previous line... + if (t.endsWith(C_MLC_END)) { + int mlcEnd = t.getEndOffset() - 1; + if (currentFold==null) { + currentFold = new Fold(FoldType.COMMENT, textArea, mlcStart); + currentFold.setEndOffset(mlcEnd); + folds.add(currentFold); + currentFold = null; + } + else { + currentFold = currentFold.createChild(FoldType.COMMENT, mlcStart); + currentFold.setEndOffset(mlcEnd); + currentFold = currentFold.getParent(); + } + //System.out.println("Ending MLC at: " + mlcEnd + ", parent==" + currentFold); + inMLC = false; + mlcStart = 0; + } + // Otherwise, this MLC is continuing on to yet + // another line. + } + else { + // If we're an MLC that ends on a later line... + if (t.getType()!=Token.COMMENT_EOL && !t.endsWith(C_MLC_END)) { + //System.out.println("Starting MLC at: " + t.offset); + inMLC = true; + mlcStart = t.getOffset(); + } + } + + } + + else if (isLeftCurly(t)) { + + // Java-specific stuff + if (java) { + + if (importStartLine>-1) { + if (lastSeenImportLine>importStartLine) { + Fold fold = null; + // Any imports found *should* be a top-level fold, + // but we're extra lenient here and allow groups + // of them anywhere to keep our parser better-behaved + // if they have random "imports" throughout code. + if (currentFold==null) { + fold = new Fold(FoldType.IMPORTS, + textArea, importGroupStartOffs); + folds.add(fold); + } + else { + fold = currentFold.createChild(FoldType.IMPORTS, + importGroupStartOffs); + } + fold.setEndOffset(importGroupEndOffs); + } + importStartLine = lastSeenImportLine = + importGroupStartOffs = importGroupEndOffs = -1; + } + + } + + // If a new fold block starts on the same line as the + // previous one ends, we treat it as one big block + // (e.g. K&R-style "} else {") + if (prevFold != null && line == lastRightCurlyLine) { + currentFold = prevFold; + // Keep currentFold.endOffset where it was, so that + // unclosed folds at end of the file work as well + // as possible + prevFold = null; + lastRightCurlyLine = -1; + } + else if (currentFold==null) { // A top-level fold + currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); + folds.add(currentFold); + } + else { // A nested fold + currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); + } + + } + + else if (isRightCurly(t)) { + + if (currentFold!=null) { + currentFold.setEndOffset(t.getOffset()); + Fold parentFold = currentFold.getParent(); + //System.out.println("... Adding regular fold at " + t.offset + ", parent==" + parentFold); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + if (!currentFold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + else { + // Remember the end of the last completed fold, + // in case it needs to get merged with the next + // one (e.g. K&R "} else {" style) + lastRightCurlyLine = line; + prevFold = currentFold; + } + currentFold = parentFold; + } + + } + + // Java-specific folding rules + else if (java) { + + if (t.is(Token.RESERVED_WORD, KEYWORD_IMPORT)) { + if (importStartLine==-1) { + importStartLine = line; + importGroupStartOffs = t.getOffset(); + importGroupEndOffs = t.getOffset(); + } + lastSeenImportLine = line; + } + + else if (importStartLine>-1 && + t.isIdentifier() &&//SEPARATOR && + t.isSingleChar(';')) { + importGroupEndOffs = t.getOffset(); + } + + } + + t = t.getNextToken(); + + } + + } + + } catch (BadLocationException ble) { // Should never happen + ble.printStackTrace(); + } + + return folds; + + } + + + /** + * Returns whether the token is a left curly brace. This method exists + * so subclasses can provide their own curly brace definition. + * + * @param t The token. + * @return Whether it is a left curly brace. + * @see #isRightCurly(Token) + */ + public boolean isLeftCurly(Token t) { + return t.isLeftCurly(); + } + + + /** + * Returns whether the token is a right curly brace. This method exists + * so subclasses can provide their own curly brace definition. + * + * @param t The token. + * @return Whether it is a right curly brace. + * @see #isLeftCurly(Token) + */ + public boolean isRightCurly(Token t) { + return t.isRightCurly(); + } + + + /** + * Sets whether multi-line comments are foldable with this parser. + * + * @param foldable Whether multi-line comments are foldable. + * @see #getFoldableMultiLineComments() + */ + public void setFoldableMultiLineComments(boolean foldable) { + this.foldableMultiLineComments = foldable; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java b/src/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java new file mode 100644 index 0000000..719c6d5 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java @@ -0,0 +1,612 @@ +/* + * 10/08/2011 + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Element; + +import org.fife.ui.rsyntaxtextarea.RSyntaxDocument; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.parser.AbstractParser; +import org.fife.ui.rsyntaxtextarea.parser.DefaultParseResult; +import org.fife.ui.rsyntaxtextarea.parser.ParseResult; +import org.fife.ui.rsyntaxtextarea.parser.Parser; +import org.fife.ui.rtextarea.RDocument; + + +/** + * The default implementation of a fold manager. Besides keeping track of + * folds, this class behaves as follows: + * + *

    + *
  • If text containing a newline is inserted in a collapsed fold, + * that fold, and any ancestor folds, are expanded. This ensures that + * modified text is always visible to the user. + *
  • If the text area's {@link RSyntaxTextArea#SYNTAX_STYLE_PROPERTY} + * changes, the current fold parser is uninstalled, and one appropriate + * for the new language, if any, is installed. + *
+ * + * The folding strategy to use is retrieved from {@link FoldParserManager}. + * + * @author Robert Futrell + * @version 1.0 + */ +public class DefaultFoldManager implements FoldManager { + + private RSyntaxTextArea textArea; + private Parser rstaParser; + private FoldParser foldParser; + private List folds; + private boolean codeFoldingEnabled; + private PropertyChangeSupport support; + private Listener l; + + + /** + * Constructor. + * + * @param textArea The text area whose folds we are managing. + */ + public DefaultFoldManager(RSyntaxTextArea textArea) { + this.textArea = textArea; + support = new PropertyChangeSupport(this); + l = new Listener(); + textArea.getDocument().addDocumentListener(l); + textArea.addPropertyChangeListener(RSyntaxTextArea.SYNTAX_STYLE_PROPERTY, l); + textArea.addPropertyChangeListener("document", l); + folds = new ArrayList(); + updateFoldParser(); + } + + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + support.addPropertyChangeListener(l); + } + + + @Override + public void clear() { + folds.clear(); + } + + + @Override + public boolean ensureOffsetNotInClosedFold(int offs) { + + boolean foldsOpened = false; + Fold fold = getDeepestFoldContaining(offs); + + while (fold!=null) { + if (fold.isCollapsed()) { + fold.setCollapsed(false); + foldsOpened = true; + } + fold = fold.getParent(); + } + + if (foldsOpened) { // Folds changing state mean gutter is stale + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + + return foldsOpened; + + } + + + @Override + public Fold getDeepestFoldContaining(int offs) { + Fold deepestFold = null; + if (offs>-1) { + for (int i=0; i-1) { + for (int i=0; i folds, int line) { + + int low = 0; + int high = folds.size() - 1; + + while (low <= high) { + int mid = (low + high) >> 1; + Fold midFold = folds.get(mid); + int startLine = midFold.getStartLine(); + if (line==startLine) { + return midFold; + } + else if (line=endLine) { + low = mid + 1; + } + else { // line>startLine && line<=endLine + List children = midFold.getChildren(); + return children!=null ? getFoldForLineImpl(midFold, children, line) : null; + } + } + } + + return null; // No fold for this line +} + + + @Override + public int getHiddenLineCount() { + int count = 0; + for (Fold fold : folds) { + count += fold.getCollapsedLineCount(); + } + return count; + } + + + @Override + public int getHiddenLineCountAbove(int line) { + return getHiddenLineCountAbove(line, false); + } + + + @Override + public int getHiddenLineCountAbove(int line, boolean physical) { + + int count = 0; + + for (Fold fold : folds) { + int comp = physical ? line+count : line; + if (fold.getStartLine()>=comp) { + break; + } + count += getHiddenLineCountAboveImpl(fold, comp, physical); + } + + return count; + + } + + + /** + * Returns the number of lines "hidden" by collapsed folds above the + * specified line. + * + * @param fold The current fold in the recursive algorithm. It and its + * children are examined. + * @param line The line. + * @param physical Whether line is the number of a physical + * line (i.e. visible, not code-folded), or a logical one (i.e. any + * line from the model). If line was determined by a + * raw line calculation (i.e. (visibleTopY / lineHeight)), + * this value should be true. It should be + * false when it was calculated from an offset in the + * document (for example). + * @return The number of lines hidden in folds that are descendants of + * fold, or fold itself, above + * line. + */ + private int getHiddenLineCountAboveImpl(Fold fold, int line, boolean physical) { + + int count = 0; + + if (fold.getEndLine()=comp) { + break; + } + count += getHiddenLineCountAboveImpl(child, comp, physical); + } + } + + return count; + + } + + + @Override + public int getLastVisibleLine() { + + int lastLine = textArea.getLineCount() - 1; + + if (isCodeFoldingSupportedAndEnabled()) { + int foldCount = getFoldCount(); + if (foldCount>0) { + Fold lastFold = getFold(foldCount-1); + if (lastFold.containsLine(lastLine)) { + if (lastFold.isCollapsed()) { + lastLine = lastFold.getStartLine(); + } + else { // Child fold may end on the same line as parent + while (lastFold.getHasChildFolds()) { + lastFold = lastFold.getLastChild(); + if (lastFold.containsLine(lastLine)) { + if (lastFold.isCollapsed()) { + lastLine = lastFold.getStartLine(); + break; + } + } + else { // Higher up + break; + } + } + } + } + } + } + + return lastLine; + + } + + + @Override + public int getVisibleLineAbove(int line) { + + if (line<=0 || line>=textArea.getLineCount()) { + return -1; + } + + do { + line--; + } while (line>=0 && isLineHidden(line)); + + return line; + + } + + + @Override + public int getVisibleLineBelow(int line) { + + int lineCount = textArea.getLineCount(); + if (line<0 || line>=lineCount-1) { + return -1; + } + + do { + line++; + } while (line> 1; +// Fold midVal = (Fold)allFolds.get(mid); +// if (midVal.containsLine(line)) { +// return mid; +// } +// if (line<=midVal.getStartLine()) { +// high = mid - 1; +// } +// else { // line > midVal.getEndLine() +// low = mid + 1; +// } +// } +// +// return -(low + 1); // key not found +// +// } + + + @Override + public boolean isCodeFoldingEnabled() { + return codeFoldingEnabled; + } + + + @Override + public boolean isCodeFoldingSupportedAndEnabled() { + return codeFoldingEnabled && foldParser!=null; + } + + + @Override + public boolean isFoldStartLine(int line) { + return getFoldForLine(line)!=null; + } + + + @Override + public boolean isLineHidden(int line) { + for (Fold fold : folds) { + if (fold.containsLine(line)) { + if (fold.isCollapsed()) { + return true; + } + else { + return isLineHiddenImpl(fold, line); + } + } + } + return false; + } + + + private boolean isLineHiddenImpl(Fold parent, int line) { + for (int i=0; i oldFolds) { + int previousLoc = Collections.binarySearch(oldFolds, newFold); + //System.out.println(newFold + " => " + previousLoc); + if (previousLoc>=0) { + Fold prevFold = oldFolds.get(previousLoc); + newFold.setCollapsed(prevFold.isCollapsed()); + } + else { + //previousLoc = -(insertion point) - 1; + int insertionPoint = -(previousLoc + 1); + if (insertionPoint>0) { + Fold possibleParentFold = oldFolds.get(insertionPoint-1); + if (possibleParentFold.containsOffset( + newFold.getStartOffset())) { + List children = possibleParentFold.getChildren(); + if (children!=null) { + keepFoldState(newFold, children); + } + } + } + } + } + + + private void keepFoldStates(List newFolds, List oldFolds) { + for (Fold newFold : newFolds) { + keepFoldState(newFold, folds); + List newChildFolds = newFold.getChildren(); + if (newChildFolds!=null) { + keepFoldStates(newChildFolds, oldFolds); + } + } + } + + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + support.removePropertyChangeListener(l); + } + + + @Override + public void reparse() { + + if (codeFoldingEnabled && foldParser!=null) { + + // Re-calculate folds. Keep the fold state of folds that are + // still around. + List newFolds = foldParser.getFolds(textArea); + if (newFolds==null) { + newFolds = Collections.emptyList(); + } + else { + keepFoldStates(newFolds, folds); + } + folds = newFolds; + + // Let folks (gutter, etc.) know that folds have been updated. + support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, folds); + textArea.repaint(); + + } + else { + folds.clear(); + } + + } + + + @Override + public void setCodeFoldingEnabled(boolean enabled) { + if (enabled!=codeFoldingEnabled) { + codeFoldingEnabled = enabled; + if (rstaParser!=null) { + textArea.removeParser(rstaParser); + } + if (enabled) { + rstaParser = new AbstractParser() { + @Override + public ParseResult parse(RSyntaxDocument doc, String style) { + reparse(); + return new DefaultParseResult(this); + } + }; + textArea.addParser(rstaParser); + support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, null); + //reparse(); + } + else { + folds = Collections.emptyList(); + textArea.repaint(); + support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, null); + } + } + } + + + @Override + public void setFolds(List folds) { + this.folds = folds; + } + + + /** + * Updates the fold parser to be the one appropriate for the language + * currently being highlighted. + */ + private void updateFoldParser() { + foldParser = FoldParserManager.get().getFoldParser( + textArea.getSyntaxEditingStyle()); + } + + + /** + * Listens for events in the text editor. + */ + private class Listener implements DocumentListener, PropertyChangeListener { + + @Override + public void changedUpdate(DocumentEvent e) { + } + + @Override + public void insertUpdate(DocumentEvent e) { + // Adding text containing a newline to the visible line of a folded + // Fold causes that Fold to unfold. Check only start offset of + // insertion since that's the line that was "modified". + int startOffs = e.getOffset(); + int endOffs = startOffs + e.getLength(); + Document doc = e.getDocument(); + Element root = doc.getDefaultRootElement(); + int startLine = root.getElementIndex(startOffs); + int endLine = root.getElementIndex(endOffs); + if (startLine!=endLine) { // Inserted text covering > 1 line... + Fold fold = getFoldForLine(startLine); + if (fold!=null && fold.isCollapsed()) { + fold.toggleCollapsedState(); + } + } + } + + @Override + public void propertyChange(PropertyChangeEvent e) { + + String name = e.getPropertyName(); + + if (RSyntaxTextArea.SYNTAX_STYLE_PROPERTY.equals(name)) { + // Syntax style changed in editor. + updateFoldParser(); + reparse(); // Even if no fold parser change, highlighting did + } + + else if ("document".equals(name)) { + // The document switched out from under us + RDocument old = (RDocument)e.getOldValue(); + if (old != null) { + old.removeDocumentListener(this); + } + RDocument newDoc = (RDocument)e.getNewValue(); + if (newDoc != null) { + newDoc.addDocumentListener(this); + } + reparse(); + } + + } + + @Override + public void removeUpdate(DocumentEvent e) { + // Removing text from the visible line of a folded Fold causes that + // Fold to unfold. We only need to check the removal offset since + // that's the new caret position. + int offs = e.getOffset(); + try { + int lastLineModified = textArea.getLineOfOffset(offs); + //System.out.println(">>> " + lastLineModified); + Fold fold = getFoldForLine(lastLineModified); + //System.out.println("&&& " + fold); + if (fold!=null && fold.isCollapsed()) { + fold.toggleCollapsedState(); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/Fold.java b/src/org/fife/ui/rsyntaxtextarea/folding/Fold.java new file mode 100644 index 0000000..287f81c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/Fold.java @@ -0,0 +1,568 @@ +/* + * 10/08/2011 + * + * Fold.java - A foldable region of text in an RSyntaxTextArea instance. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; +import javax.swing.text.Position; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; + + +/** + * Information about a foldable region.

+ * + * A Fold has zero or more children, and Folds thus + * form a hierarchical structure, with "parent" folds containing the info about + * any "child" folds they contain.

+ * + * Fold regions are denoted by a starting and ending offset, but the actual + * folding is done on a per-line basis, so Fold instances provide + * methods for retrieving both starting and ending offsets and lines. The + * starting and ending offsets/lines are "sticky" and correctly track their + * positions even as the document is modified. + * + * @author Robert Futrell + * @version 1.0 + */ +public class Fold implements Comparable { + + private int type; + private RSyntaxTextArea textArea; + private Position startOffs; + private Position endOffs; + private Fold parent; + private List children; + private boolean collapsed; + private int childCollapsedLineCount; + + private int lastStartOffs = -1; + private int cachedStartLine; + + private int lastEndOffs = -1; + private int cachedEndLine; + + + public Fold(int type, RSyntaxTextArea textArea, int startOffs) + throws BadLocationException { + this.type = type; + this.textArea = textArea; + this.startOffs = textArea.getDocument().createPosition(startOffs); + } + + + /** + * Creates a fold that is a child of this one. + * + * @param type The type of fold. + * @param startOffs The starting offset of the fold. + * @return The child fold. + * @throws BadLocationException If startOffs is invalid. + * @see FoldType + */ + public Fold createChild(int type, int startOffs) throws BadLocationException { + Fold child = new Fold(type, textArea, startOffs); + child.parent = this; + if (children==null) { + children = new ArrayList(); + } + children.add(child); + return child; + } + + + /** + * Two folds are considered equal if they start at the same offset. + * + * @param otherFold Another fold to compare this one to. + * @return How this fold compares to the other. + */ + @Override + public int compareTo(Fold otherFold) { + int result = -1; + if (otherFold!=null) { + result = startOffs.getOffset() - otherFold.startOffs.getOffset(); + //result = getStartLine() - otherFold.getStartLine(); + } + return result; + } + + + /** + * Returns whether the specified line would be hidden in this fold. Since + * RSTA displays the "first" line in a fold, this means that the line must + * must be between (getStartLine()+1) and + * getEndLine(), inclusive. + * + * @param line The line to check. + * @return Whether the line would be hidden if this fold is collapsed. + * @see #containsOffset(int) + * @see #containsOrStartsOnLine(int) + */ + public boolean containsLine(int line) { + return line>getStartLine() && line<=getEndLine(); + } + + + /** + * Returns whether the given line is in the range + * [getStartLine(), getEndLine()], inclusive. + * + * @param line The line to check. + * @return Whether this fold contains, or starts on, the line. + * @see #containsLine(int) + */ + public boolean containsOrStartsOnLine(int line) { + return line>=getStartLine() && line<=getEndLine(); + } + + + /** + * Returns whether the specified offset is "inside" the fold. This method + * returns true if the offset is greater than the fold start + * offset, and no further than the last offset of the last folded line. + * + * @param offs The offset to check. + * @return Whether the offset is "inside" the fold. + * @see #containsLine(int) + */ + public boolean containsOffset(int offs) { + boolean contained = false; + if (offs>getStartOffset()) { + // Use Elements to avoid BadLocationExceptions + Element root = textArea.getDocument().getDefaultRootElement(); + int line = root.getElementIndex(offs); + contained = line<=getEndLine(); + } + return contained; + } + + + /** + * Two folds are considered equal if they have the same starting offset. + * + * @param otherFold Another fold to compare this one to. + * @return Whether the two folds are equal. + * @see #compareTo(Fold) + */ + @Override + public boolean equals(Object otherFold) { + return otherFold instanceof Fold && compareTo((Fold)otherFold)==0; + } + + + /** + * Returns a specific child fold. + * + * @param index The index of the child fold. + * @return The child fold. + * @see #getChildCount() + */ + public Fold getChild(int index) { + return children.get(index); + } + + + /** + * Returns the number of child folds. + * + * @return The number of child folds. + * @see #getChild(int) + */ + public int getChildCount() { + return children==null ? 0 : children.size(); + } + + + /** + * Returns the array of child folds. This is a shallow copy. + * + * @return The array of child folds, or null if there are + * none. + */ + List getChildren() { + return children; + } + + + /** + * Returns the number of collapsed lines under this fold. If this fold + * is collapsed, this method returns {@link #getLineCount()}, otherwise + * it returns the sum of all collapsed lines of all child folds of this + * one.

+ * + * The value returned is cached, so this method returns quickly and + * shouldn't affect performance. + * + * @return The number of collapsed lines under this fold. + */ + public int getCollapsedLineCount() { + return collapsed ? getLineCount() : childCollapsedLineCount; + } + + + /** + * Returns the "deepest" fold containing the specified offset. It is + * assumed that it's already been verified that offs is indeed + * contained in this fold. + * + * @param offs The offset. + * @return The fold, or null if no child fold also contains + * the offset. + * @see FoldManager#getDeepestFoldContaining(int) + */ + Fold getDeepestFoldContaining(int offs) { + Fold deepestFold = this; + for (int i=0; ioffs is + * indeed contained in this fold. + * + * @param offs The offset. + * @return The fold, or null if no open fold contains the + * offset. + * @see FoldManager#getDeepestOpenFoldContaining(int) + */ + Fold getDeepestOpenFoldContaining(int offs) { + + Fold deepestFold = this; + + for (int i=0; i + * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the ending line of the + * code block. + * + * @return The end line of this code block. + * @see #getEndOffset() + * @see #getStartLine() + */ + public int getEndLine() { + int endOffs = getEndOffset(); + if (lastEndOffs==endOffs) { + return cachedEndLine; + } + lastEndOffs = endOffs; + Element root = textArea.getDocument().getDefaultRootElement(); + return cachedEndLine = root.getElementIndex(endOffs); + } + + + /** + * Returns the end offset of this fold. For example, in languages such as + * C and Java, this might be the offset of the closing curly brace of a + * code block.

+ * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the ending offset of the + * code block. + * + * @return The end offset of this code block, or {@link Integer#MAX_VALUE} + * if this fold region isn't closed properly. The latter causes + * this fold to collapsed all lines through the end of the file. + * @see #getEndLine() + * @see #getStartOffset() + */ + public int getEndOffset() { + return endOffs!=null ? endOffs.getOffset() : Integer.MAX_VALUE; + } + + + /** + * Returns the type of fold this is. This will be one of the values in + * {@link FoldType}, or a user-defined value. + * + * @return The type of fold this is. + */ + public int getFoldType() { + return type; + } + + + /** + * Returns whether this fold has any child folds. + * + * @return Whether this fold has any children. + * @see #getChildCount() + */ + public boolean getHasChildFolds() { + return getChildCount()>0; + } + + + /** + * Returns the last child fold. + * + * @return The last child fold, or null if this fold does not + * have any children. + * @see #getChild(int) + * @see #getHasChildFolds() + */ + public Fold getLastChild() { + int childCount = getChildCount(); + return childCount==0 ? null : getChild(childCount-1); + } + + + /** + * Returns the number of lines that are hidden when this fold is + * collapsed. + * + * @return The number of lines hidden. + * @see #getStartLine() + * @see #getEndLine() + */ + public int getLineCount() { + return getEndLine() - getStartLine(); + } + + + /** + * Returns the parent fold of this one. + * + * @return The parent fold, or null if this is a top-level + * fold. + */ + public Fold getParent() { + return parent; + } + + + /** + * Returns the starting line of this fold region. This is the only line + * in the fold region that is not hidden when a fold is collapsed.

+ * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the starting line of the + * code block. + * + * @return The starting line of the code block. + * @see #getEndLine() + * @see #getStartOffset() + */ + public int getStartLine() { + int startOffs = getStartOffset(); + if (lastStartOffs==startOffs) { + return cachedStartLine; + } + lastStartOffs = startOffs; + Element root = textArea.getDocument().getDefaultRootElement(); + return cachedStartLine = root.getElementIndex(startOffs); + } + + + /** + * Returns the starting offset of this fold region. For example, for + * languages such as C and Java, this would be the offset of the opening + * curly brace of a code block.

+ * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the starting offset of the + * code block. + * + * @return The start offset of this fold. + * @see #getStartLine() + * @see #getEndOffset() + */ + public int getStartOffset() { + return startOffs.getOffset(); + } + + + @Override + public int hashCode() { + return getStartLine(); + } + + + /** + * Returns whether this fold is collapsed. + * + * @return Whether this fold is collapsed. + * @see #setCollapsed(boolean) + * @see #toggleCollapsedState() + */ + public boolean isCollapsed() { + return collapsed; + } + + + /** + * Returns whether this fold is entirely on a single line. In general, + * a {@link FoldParser} should not remember fold regions all on a single + * line, since there's really nothing to fold. + * + * @return Whether this fold is on a single line. + * @see #removeFromParent() + */ + public boolean isOnSingleLine() { + return getStartLine()==getEndLine(); + } + + + /** + * Removes this fold from its parent. This should only be called by + * {@link FoldParser} implementations if they determine that a fold is all + * on a single line (and thus shouldn't be remembered) after creating it. + * + * @return Whether this fold had a parent to be removed from. + * @see #isOnSingleLine() + */ + public boolean removeFromParent() { + if (parent!=null) { + parent.removeMostRecentChild(); + parent = null; + return true; + } + return false; + } + + + private void removeMostRecentChild() { + children.remove(children.size()-1); + } + + + /** + * Sets whether this Fold is collapsed. Calling this method + * will update both the text area and all Gutter components. + * + * @param collapsed Whether this fold should be collapsed. + * @see #isCollapsed() + * @see #toggleCollapsedState() + */ + public void setCollapsed(boolean collapsed) { + + if (collapsed!=this.collapsed) { + + // Change our fold state and cached info about folded line count. + int lineCount = getLineCount(); + int linesToCollapse = lineCount - childCollapsedLineCount; + if (!collapsed) { // If we're expanding + linesToCollapse = -linesToCollapse; + } + //System.out.println("Hiding lines: " + linesToCollapse + + // " (" + lineCount + ", " + linesToCollapse + ")"); + this.collapsed = collapsed; + if (parent!=null) { + parent.updateChildCollapsedLineCount(linesToCollapse); + } + + // If an end point of the selection is being hidden, move the caret + // "out" of the fold. + if (collapsed) { + int dot = textArea.getSelectionStart(); // Forgive variable name + Element root = textArea.getDocument().getDefaultRootElement(); + int dotLine = root.getElementIndex(dot); + boolean updateCaret = containsLine(dotLine); + if (!updateCaret) { + int mark = textArea.getSelectionEnd(); + if (mark!=dot) { + int markLine = root.getElementIndex(mark); + updateCaret = containsLine(markLine); + } + } + if (updateCaret) { + dot = root.getElement(getStartLine()).getEndOffset() - 1; + textArea.setCaretPosition(dot); + } + } + + textArea.foldToggled(this); + + } + + } + + + /** + * Sets the ending offset of this fold, such as the closing curly brace + * of a code block in C or Java. {@link FoldParser} implementations should + * call this on an existing Fold upon finding its end. If + * this method isn't called, then this Fold is considered to + * have no end, i.e., it will collapse everything to the end of the file. + * + * @param endOffs The end offset of this fold. + * @throws BadLocationException If endOffs is not a valid + * location in the text area. + */ + public void setEndOffset(int endOffs) throws BadLocationException { + this.endOffs = textArea.getDocument().createPosition(endOffs); + } + + + /** + * Toggles the collapsed state of this fold. + * + * @see #setCollapsed(boolean) + */ + public void toggleCollapsedState() { + setCollapsed(!collapsed); + } + + + private void updateChildCollapsedLineCount(int count) { + childCollapsedLineCount += count; + //if (childCollapsedLineCount>getLineCount()) { + // Thread.dumpStack(); + //} + if (!collapsed && parent!=null) { + parent.updateChildCollapsedLineCount(count); + } + } + + + /** + * Overridden for debugging purposes. + * + * @return A string representation of this Fold. + */ + @Override + public String toString() { + return "[Fold: " + + "startOffs=" + getStartOffset() + + ", endOffs=" + getEndOffset() + + ", collapsed=" + collapsed + + "]"; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java b/src/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java new file mode 100644 index 0000000..7f7cdbf --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java @@ -0,0 +1,106 @@ +/* + * 10/23/2011 + * + * FoldCollapser.java - Goes through an RSTA instance and collapses folds of + * specific types, such as comments. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Collapses folds based on their type. You can create an instance of this + * class to collapse all comment blocks when opening a new file, for example. + * + * @author Robert Futrell + * @version 1.0 + */ +public class FoldCollapser { + + private List typesToCollapse; + + + /** + * Creates an instance that collapses all comment blocks. + */ + public FoldCollapser() { + this(FoldType.COMMENT); + } + + + /** + * Creates an instance that collapses all blocks of the specified + * type. + * + * @param typeToCollapse The type to collapse. + * @see FoldType + */ + public FoldCollapser(int typeToCollapse) { + typesToCollapse = new ArrayList(3); + addTypeToCollapse(typeToCollapse); + } + + + /** + * Adds a type of fold to collapse. + * + * @param typeToCollapse The type of fold to collapse. + */ + public void addTypeToCollapse(int typeToCollapse) { + typesToCollapse.add(Integer.valueOf(typeToCollapse)); + } + + + /** + * Collapses any relevant folds known by the fold manager. + * + * @param fm The fold manager. + */ + public void collapseFolds(FoldManager fm) { + for (int i=0; i + * + * By default, {@code RSyntaxTextArea} uses a {@link DefaultFoldManager}, which + * is sufficient for almost all applications. + * + * @author Robert Futrell + * @version 1.0 + * @see DefaultFoldManager + */ +public interface FoldManager { + + /** + * Property fired when folds have been updated. + */ + String PROPERTY_FOLDS_UPDATED = "FoldsUpdated"; + + + /** + * Adds a property change listener to this fold manager. + * + * @param l The new listener. + * @see #removePropertyChangeListener(PropertyChangeListener) + */ + void addPropertyChangeListener(PropertyChangeListener l); + + + /** + * Removes all folds. + */ + void clear(); + + + /** + * Ensures that the specified offset is not hidden in a collapsed fold. + * Any folds containing this offset that are collapsed will be expanded. + * + * @param offs The offset. + * @return Whether any folds had to be opened. + * @see #getDeepestFoldContaining(int) + */ + boolean ensureOffsetNotInClosedFold(int offs); + + + /** + * Returns the "deepest" nested fold containing the specified offset. + * + * @param offs The offset. + * @return The deepest fold containing the offset, or null if + * no fold contains the offset. + */ + Fold getDeepestFoldContaining(int offs); + + + /** + * Returns the "deepest" open fold containing the specified offset. + * + * @param offs The offset. + * @return The fold, or null if no open fold contains the + * offset. + */ + Fold getDeepestOpenFoldContaining(int offs); + + + /** + * Returns a specific top-level fold, which may have child folds. + * + * @param index The index of the fold. + * @return The fold. + * @see #getFoldCount() + */ + Fold getFold(int index); + + + /** + * Returns the number of top-level folds. + * + * @return The number of top-level folds. + * @see #getFold(int) + */ + int getFoldCount(); + + + /** + * Returns the fold region that starts at the specified line. + * + * @param line The line number. + * @return The fold, or null if the line is not the start + * of a fold region. + * @see #isFoldStartLine(int) + */ + Fold getFoldForLine(int line); + + + /** + * Returns the total number of hidden (folded) lines. + * + * @return The total number of hidden (folded) lines. + * @see #getHiddenLineCountAbove(int) + */ + int getHiddenLineCount(); + + + /** + * Returns the number of lines "hidden" by collapsed folds above the + * specified line. + * + * @param line The line. This is the line number for a logical line. + * For the line number of a physical line (i.e. visible, not folded), + * use getHiddenLineCountAbove(int, true). + * @return The number of lines hidden in folds above line. + * @see #getHiddenLineCountAbove(int, boolean) + */ + int getHiddenLineCountAbove(int line); + + + /** + * Returns the number of lines "hidden" by collapsed folds above the + * specified line. + * + * @param line The line. + * @param physical Whether line is the number of a physical + * line (i.e. visible, not code-folded), or a logical one (i.e. any + * line from the model). If line was determined by a + * raw line calculation (i.e. (visibleTopY / lineHeight)), + * this value should be true. It should be + * false when it was calculated from an offset in the + * document (for example). + * @return The number of lines hidden in folds above line. + */ + int getHiddenLineCountAbove(int line, boolean physical); + + + /** + * Returns the last visible line in the text area, taking into account + * folds. + * + * @return The last visible line. + */ + int getLastVisibleLine(); + + + int getVisibleLineAbove(int line); + + + int getVisibleLineBelow(int line); + + + /** + * Returns whether code folding is enabled. Note that only certain + * languages support code folding; those that do not will ignore this + * property. + * + * @return Whether code folding is enabled. + * @see #setCodeFoldingEnabled(boolean) + */ + boolean isCodeFoldingEnabled(); + + + /** + * Returns true if and only if code folding is enabled for + * this text area, AND folding is supported for the language it is editing. + * Whether or not folding is supported for a language depends on whether + * a fold parser is registered for that language with the + * FoldParserManager. + * + * @return Whether folding is supported and enabled for this text area. + * @see FoldParserManager + */ + boolean isCodeFoldingSupportedAndEnabled(); + + + /** + * Returns whether the specified line contains the start of a fold region. + * + * @param line The line. + * @return Whether the line contains the start of a fold region. + * @see #getFoldForLine(int) + */ + boolean isFoldStartLine(int line); + + + /** + * Returns whether a line is hidden in a collapsed fold. + * + * @param line The line to check. + * @return Whether the line is hidden in a collapsed fold. + */ + boolean isLineHidden(int line); + + + /** + * Removes a property change listener from this fold manager. + * + * @param l The listener to remove. + * @see #addPropertyChangeListener(PropertyChangeListener) + */ + void removePropertyChangeListener(PropertyChangeListener l); + + + /** + * Forces an immediate reparsing for folds, if folding is enabled. This + * usually does not need to be called by the programmer, since fold + * parsing is done automatically by RSTA. + */ + void reparse(); + + + /** + * Sets whether code folding is enabled. Note that only certain + * languages will support code folding out of the box. Those languages + * which do not support folding will ignore this property. + * + * @param enabled Whether code folding should be enabled. + * @see #isCodeFoldingEnabled() + */ + void setCodeFoldingEnabled(boolean enabled); + + + /** + * Sets the folds for this fold manager. + * + * @param folds The new folds. This should not be null. + */ + void setFolds(List folds); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java b/src/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java new file mode 100644 index 0000000..e679f7f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java @@ -0,0 +1,41 @@ +/* + * 10/08/2011 + * + * FoldParser.java - Locates folds in an RSyntaxTextArea instance. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.List; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; + + +/** + * Locates folds in a document. If you are implementing a language that has + * sections of source code that can be logically "folded," you can create an + * instance of this interface that locates those regions and represents them + * as {@link Fold}s. RSyntaxTextArea knows how to take it from + * there and implement code folding in the editor. + * + * @author Robert Futrell + * @version 1.0 + * @see CurlyFoldParser + * @see XmlFoldParser + */ +public interface FoldParser { + + + /** + * Returns a list of all folds in the text area. + * + * @param textArea The text area whose contents should be analyzed. + * @return The list of folds. If this method returns null, + * it is treated as if no folds were found. + */ + List getFolds(RSyntaxTextArea textArea); + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java b/src/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java new file mode 100644 index 0000000..0c80e13 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java @@ -0,0 +1,127 @@ +/* + * 10/08/2011 + * + * FoldParserManager.java - Used by RSTA to determine what fold parser to use + * for each language it supports. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.HashMap; +import java.util.Map; + +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; + + +/** + * Manages fold parsers. Instances of RSyntaxTextArea call into + * this class to retrieve fold parsers for whatever language they're editing. + * Folks implementing custom languages can add a {@link FoldParser} + * implementation for their language to this manager and it will be used by + * RSTA. + * + * @author Robert Futrell + * @version 1.0 + */ +public final class FoldParserManager implements SyntaxConstants { + + /** + * Map from syntax styles to fold parsers. + */ + private Map foldParserMap; + + private static final FoldParserManager INSTANCE = new FoldParserManager(); + + + /** + * Private constructor to prevent instantiation. + */ + private FoldParserManager() { + foldParserMap = createFoldParserMap(); + } + + + /** + * Adds a mapping from a syntax style to a fold parser. The parser + * specified will be shared among all RSTA instances editing that language, + * so it should be stateless (which should not be difficult for a fold + * parser). You can also override the fold parser for built-in languages, + * such as SYNTAX_STYLE_JAVA, with your own parser + * implementations. + * + * @param syntaxStyle The syntax style. + * @param parser The parser. + * @see SyntaxConstants + */ + public void addFoldParserMapping(String syntaxStyle, FoldParser parser) { + foldParserMap.put(syntaxStyle, parser); + } + + + /** + * Creates the syntax style-to-fold parser mapping for built-in languages. + * + * @return The style-to-fold parser mapping. + */ + private Map createFoldParserMap() { + + Map map = new HashMap(); + + map.put(SYNTAX_STYLE_C, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_CPLUSPLUS, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_CSHARP, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_CLOJURE, new LispFoldParser()); + map.put(SYNTAX_STYLE_CSS, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_D, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_DART, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_GROOVY, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_HTACCESS, new XmlFoldParser()); + map.put(SYNTAX_STYLE_HTML, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_HTML)); + map.put(SYNTAX_STYLE_JAVA, new CurlyFoldParser(true, true)); + map.put(SYNTAX_STYLE_JAVASCRIPT, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_JSON, new JsonFoldParser()); + map.put(SYNTAX_STYLE_JSON_WITH_COMMENTS,new JsonFoldParser()); + map.put(SYNTAX_STYLE_JSP, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_JSP)); + map.put(SYNTAX_STYLE_LATEX, new LatexFoldParser()); + map.put(SYNTAX_STYLE_LESS, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_LISP, new LispFoldParser()); + map.put(SYNTAX_STYLE_MXML, new XmlFoldParser()); + map.put(SYNTAX_STYLE_NSIS, new NsisFoldParser()); + map.put(SYNTAX_STYLE_PERL, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_PHP, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_PHP)); + map.put(SYNTAX_STYLE_SCALA, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_TYPESCRIPT, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_XML, new XmlFoldParser()); + + return map; + + } + + + /** + * Returns the singleton instance of this class. + * + * @return The singleton instance. + */ + public static FoldParserManager get() { + return INSTANCE; + } + + + /** + * Returns a fold parser to use for an editor highlighting code of a + * specific language. + * + * @param syntaxStyle A value from {@link SyntaxConstants}, such as + * SYNTAX_STYLE_JAVA. + * @return A fold parser to use, or null if none is registered + * for the language. + */ + public FoldParser getFoldParser(String syntaxStyle) { + return foldParserMap.get(syntaxStyle); + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/FoldType.java b/src/org/fife/ui/rsyntaxtextarea/folding/FoldType.java new file mode 100644 index 0000000..d609748 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/FoldType.java @@ -0,0 +1,59 @@ +/* + * 10/08/2011 + * + * FoldType.java - Types of folds found in many programming languages. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + + +/** + * Constants representing the "type" of a folded region. Implementations of + * {@link FoldParser} can also define their own folded region types, provided + * they give them values of at least {@link #FOLD_TYPE_USER_DEFINED_MIN}. This + * allows you to identify and auto-fold specific regions of source code when + * opening files; for example, a Java editor could identify all import + * statements in a file as a foldable region, and give it a user-defined value + * for fold type. Then, the UI could provide a means for the user to specify + * that they always want the import region folded when opening a new file.

+ * + * The majority of the time, however, code editors won't need to be that fancy, + * and can simply use the standard CODE and COMMENT + * fold types. + * + * @author Robert Futrell + * @version 1.0 + * @see Fold + */ +public interface FoldType { + + /** + * Denotes a Fold as being a region of code. + */ + int CODE = 0; + + /** + * Denotes a Fold as being a multi-line comment. + */ + int COMMENT = 1; + + /** + * Denotes a Fold as being a section of import statements + * (Java), include statements (C), etc. + */ + int IMPORTS = 2; + + /** + * Users building advanced editors such as IDE's, that want to allow their + * users to auto-expand/collapse foldable regions of a specific type other + * than comments, should define their custom fold types using values + * FOLD_TYPE_USER_DEFINED_MIN + n. That way, if + * new default fold types are added to this interface in the future, your + * code won't suddenly break when upgrading to a new version of RSTA. + */ + int FOLD_TYPE_USER_DEFINED_MIN = 1000; + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java b/src/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java new file mode 100644 index 0000000..10e430c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java @@ -0,0 +1,412 @@ +/* + * 09/30/2012 + * + * HtmlFoldParser.java - Fold parser for HTML 5 and PHP. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.Stack; + +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + + +/** + * Fold parser for HTML 5, PHP and JSP. For HTML, we currently don't fold + * everything possible, just the "big" stuff. For PHP, we only fold + * the "big" HTML stuff and PHP regions, not code blocks in the actual PHP. + * For JSP we only fold the "big" HTML stuff and JSP blocks, not anything in + * the actual Java code. + * + * @author Robert Futrell + * @version 1.0 + */ +public class HtmlFoldParser implements FoldParser { + + /** + * Constant denoting we're folding HTML. + */ + public static final int LANGUAGE_HTML = -1; + + /** + * Constant denoting we're folding PHP. + */ + public static final int LANGUAGE_PHP = 0; + + /** + * Constant denoting we're folding JSP. + */ + public static final int LANGUAGE_JSP = 1; + + /** + * The language we're folding. + */ + private final int language; + + /** + * The set of tags we allow to be folded. These are tags that must have + * explicit close tags in both HTML 4 and HTML 5. + */ + private static final Set FOLDABLE_TAGS; + + private static final char[] MARKUP_CLOSING_TAG_START = "".toCharArray(); + private static final char[] MLC_START = "".toCharArray(); + + private static final char[] PHP_START = "".toCharArray(); + + // Scriptlets, declarations, and expressions all start the same way. + private static final char[] JSP_START = "<%".toCharArray(); + private static final char[] JSP_END = "%>".toCharArray(); + + private static final char[][] LANG_START = { PHP_START, JSP_START }; + private static final char[][] LANG_END = { PHP_END, JSP_END }; + + private static final char[] JSP_COMMENT_START = "<%--".toCharArray(); + private static final char[] JSP_COMMENT_END = "--%>".toCharArray(); + + static { + FOLDABLE_TAGS = new HashSet(); + FOLDABLE_TAGS.add("body"); + FOLDABLE_TAGS.add("canvas"); + FOLDABLE_TAGS.add("div"); + FOLDABLE_TAGS.add("form"); + FOLDABLE_TAGS.add("head"); + FOLDABLE_TAGS.add("html"); + FOLDABLE_TAGS.add("ol"); + FOLDABLE_TAGS.add("pre"); + FOLDABLE_TAGS.add("script"); + FOLDABLE_TAGS.add("span"); + FOLDABLE_TAGS.add("style"); + FOLDABLE_TAGS.add("table"); + FOLDABLE_TAGS.add("tfoot"); + FOLDABLE_TAGS.add("thead"); + FOLDABLE_TAGS.add("tr"); + FOLDABLE_TAGS.add("td"); + FOLDABLE_TAGS.add("ul"); + } + + + /** + * Constructor. + * + * @param language The language to fold, such as {@link #LANGUAGE_PHP}. + */ + public HtmlFoldParser(int language) { + if (languageLANGUAGE_JSP) { + throw new IllegalArgumentException("Invalid language: " + language); + } + this.language = language; + } + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList(); + Stack tagNameStack = new Stack(); + boolean inSublanguage = false; + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + boolean inJSMLC = false; + TagCloseInfo tci = new TagCloseInfo(); + + try { + + for (int line=0; line=0 && t.getType()==Token.SEPARATOR) { + + // or %> + else if (t.startsWith(LANG_END[language]) && currentFold != null) { + int phpEnd = t.getEndOffset() - 1; + currentFold.setEndOffset(phpEnd); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + inSublanguage = false; + t = t.getNextToken(); + continue; + } + + } + + if (!inSublanguage) { + + if (t.getType()==Token.COMMENT_MULTILINE) { + + // Continuing an MLC from a previous line + if (inMLC) { + // Found the end of the MLC starting on a previous line... + if (t.endsWith(MLC_END)) { + int mlcEnd = t.getEndOffset() - 1; + currentFold.setEndOffset(mlcEnd); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + inMLC = false; + } + // Otherwise, this MLC is continuing on to yet + // another line. + } + + // Continuing a JS MLC from a previous line + else if (inJSMLC) { + // Found the end of the MLC starting on a previous line... + if (t.endsWith(JSP_COMMENT_END)) { + int mlcEnd = t.getEndOffset() - 1; + currentFold.setEndOffset(mlcEnd); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + inJSMLC = false; + } + // Otherwise, this MLC is continuing on to yet + // another line. + } + + // Starting a MLC that ends on a later line... + else if (t.startsWith(MLC_START) && !t.endsWith(MLC_END)) { + if (currentFold==null) { + currentFold = new Fold(FoldType.COMMENT, textArea, t.getOffset()); + folds.add(currentFold); + } + else { + currentFold = currentFold.createChild(FoldType.COMMENT, t.getOffset()); + } + inMLC = true; + } + + // Starting a JSP comment that ends on a later line... + else if (language==LANGUAGE_JSP && + t.startsWith(JSP_COMMENT_START) && + !t.endsWith(JSP_COMMENT_END)) { + if (currentFold==null) { + currentFold = new Fold(FoldType.COMMENT, textArea, t.getOffset()); + folds.add(currentFold); + } + else { + currentFold = currentFold.createChild(FoldType.COMMENT, t.getOffset()); + } + inJSMLC = true; + } + + } + + // If we're starting a new tag... + else if (t.isSingleChar(Token.MARKUP_TAG_DELIMITER, '<')) { + Token tagStartToken = t; + Token tagNameToken = t.getNextToken(); + if (isFoldableTag(tagNameToken)) { + int newLine = getTagCloseInfo(tagNameToken, textArea, line, tci); + if (tci.line==-1) { // EOF reached before end of tag + return folds; + } + // We have found either ">" or "/>" with tci. + //System.out.println(line + ", "+ tci + ", " + t); + Token tagCloseToken = tci.closeToken; + if (tagCloseToken.isSingleChar(Token.MARKUP_TAG_DELIMITER, '>')) { + if (currentFold==null) { + currentFold = new Fold(FoldType.CODE, textArea, + tagStartToken.getOffset()); + folds.add(currentFold); + } + else { + currentFold = currentFold.createChild(FoldType.CODE, + tagStartToken.getOffset()); + } + tagNameStack.push(tagNameToken.getLexeme()); + } + t = tagCloseToken; // Continue parsing after tag + line = newLine; + } + } + + // If we've found a closing tag (e.g. ""). + else if (t.is(Token.MARKUP_TAG_DELIMITER, MARKUP_CLOSING_TAG_START)) { + if (currentFold!=null) { + Token tagNameToken = t.getNextToken(); + if (isFoldableTag(tagNameToken) && + isEndOfLastFold(tagNameStack, tagNameToken)) { + tagNameStack.pop(); + currentFold.setEndOffset(t.getOffset()); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + t = tagNameToken; + } + } + } + + } + + t = t.getNextToken(); + + } + + } + + } catch (BadLocationException ble) { // Should never happen + ble.printStackTrace(); + } + + return folds; + + } + + + /** + * Grabs the token representing the closing of a tag (i.e. + * ">" or "/>"). This should only be + * called after a tag name has been parsed, to ensure the "closing" of + * other tags is not identified. + * + * @param tagNameToken The token denoting the name of the tag. + * @param textArea The text area whose contents are being parsed. + * @param line The line we're currently on. + * @param info On return, information about the closing of the tag is + * returned in this object. + * @return The line number of the closing tag token. + */ + private int getTagCloseInfo(Token tagNameToken, RSyntaxTextArea textArea, + int line, TagCloseInfo info) { + + info.reset(); + Token t = tagNameToken.getNextToken(); + + do { + + while (t!=null && t.getType()!=Token.MARKUP_TAG_DELIMITER) { + t = t.getNextToken(); + } + + if (t!=null) { + info.closeToken = t; + info.line = line; + break; + } + + } while (++line</...>") with a + * specific name is the closing tag of our current fold region. + * + * @param tagNameStack The stack of fold regions. + * @param tagNameToken The tag name of the most recently parsed closing + * tag. + * @return Whether it's the end of the current fold region. + */ + private static boolean isEndOfLastFold(Stack tagNameStack, + Token tagNameToken) { + if (tagNameToken!=null && !tagNameStack.isEmpty()) { + return tagNameToken.getLexeme().equalsIgnoreCase(tagNameStack.peek()); + } + return false; + } + + + /** + * Returns whether a tag is one we allow as a foldable region. + * + * @param tagNameToken The tag's name token. This may be null. + * @return Whether this tag can be a foldable region. + */ + private static boolean isFoldableTag(Token tagNameToken) { + return tagNameToken!=null && + FOLDABLE_TAGS.contains(tagNameToken.getLexeme().toLowerCase()); + } + + + /** + * If this fold has a parent fold, this method removes it from its parent. + * Otherwise, it's assumed to be the most recent (top-level) fold in the + * folds list, and is removed from that. + * + * @param fold The fold to remove. + * @param folds The list of top-level folds. + */ + private static void removeFold(Fold fold, List folds) { + if (!fold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + + + /** + * A simple wrapper for the token denoting the closing of a tag (i.e. + * ">" or "/>"). + */ + private static class TagCloseInfo { + + private Token closeToken; + private int line; + + public void reset() { + closeToken = null; + line = -1; + } + + @Override + public String toString() { + return "[TagCloseInfo: " + + "closeToken=" + closeToken + + ", line=" + line + + "]"; + } + + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java b/src/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java new file mode 100644 index 0000000..a5dee88 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java @@ -0,0 +1,163 @@ +/* + * 12/23/2012 + * + * JsonFoldParser.java - Fold parser for JSON. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenTypes; + + +/** + * The fold parser for JSON. Objects ("{ ... }") and arrays + * ("[ ... ]") that span multiple lines are considered fold + * regions. + * + * @author Robert Futrell + * @version 1.0 + */ +public class JsonFoldParser implements FoldParser { + + private static final Object OBJECT_BLOCK = new Object(); + private static final Object ARRAY_BLOCK = new Object(); + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + Stack blocks = new Stack(); + List folds = new ArrayList(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + + try { + + for (int line=0; linetrue. Otherwise, return false. + * + * @param stack The stack. + * @param value The value to check for. + * @return Whether the value was found on top of the stack. + */ + private static boolean popOffTop(Stack stack, Object value) { + if (stack.size()>0 && stack.peek()==value) { + stack.pop(); + return true; + } + return false; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java b/src/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java new file mode 100644 index 0000000..924b744 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java @@ -0,0 +1,109 @@ +/* + * 04/24/2012 + * + * LatexFoldParser.java - Fold parser for LaTeX. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + + +/** + * A fold parser for LaTeX documents. This is likely incomplete and/or not + * quite right; feedback is appreciated. + * + * @author Robert Futrell + * @version 1.0 + */ +public class LatexFoldParser implements FoldParser { + + private static final char[] BEGIN = "\\begin".toCharArray(); + private static final char[] END = "\\end".toCharArray(); + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList(); + Stack expectedStack = new Stack(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + + try { + + for (int line=0; line + * + * Note that this class may impose somewhat of a performance penalty on large + * source files, since it re-parses the entire document each time folds are + * reevaluated. + * + * @author Robert Futrell + * @version 1.0 + */ +public class NsisFoldParser implements FoldParser { + + private static final char[] KEYWORD_FUNCTION = "Function".toCharArray(); + private static final char[] KEYWORD_FUNCTION_END = "FunctionEnd".toCharArray(); + private static final char[] KEYWORD_SECTION = "Section".toCharArray(); + private static final char[] KEYWORD_SECTION_END = "SectionEnd".toCharArray(); + + protected static final char[] C_MLC_END = "*/".toCharArray(); + + + private static boolean foundEndKeyword(char[] keyword, Token t, + Stack endWordStack) { + return t.is(Token.RESERVED_WORD, keyword) && !endWordStack.isEmpty() && + keyword==endWordStack.peek(); + } + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + int mlcStart = 0; + Stack endWordStack = new Stack(); + + try { + + for (int line=0; line' }; + private static final char[] MLC_END = { '-', '-', '>' }; + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + int mlcStart = 0; + + try { + + for (int line=0; linefolds list, and is removed from that. + * + * @param fold The fold to remove. + * @param folds The list of top-level folds. + */ + private static void removeFold(Fold fold, List folds) { + if (!fold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java new file mode 100644 index 0000000..ffcf175 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java @@ -0,0 +1,52 @@ +/* + * 10/03/2009 + * + * AbstractMarkupTokenMaker.java - Base class for token makers for markup + * languages. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; + + +/** + * Base class for token makers for markup languages. + * + * @author Robert Futrell + * @version 1.0 + */ +public abstract class AbstractMarkupTokenMaker extends AbstractJFlexTokenMaker { + + + /** + * Returns whether markup close tags should be completed. + * + * @return Whether closing markup tags are to be completed. + */ + public abstract boolean getCompleteCloseTags(); + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "" }; + } + + + /** + * Overridden to return true. + * + * @return true always. + */ + @Override + public final boolean isMarkupLanguage() { + return true; + } + + +} \ No newline at end of file diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex new file mode 100644 index 0000000..b10572f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex @@ -0,0 +1,495 @@ +/* + * 04/27/2010 + * + * ActionScriptTokenMaker.java - Scanner for ActionScript. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the ActionScript.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated ActionScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class ActionScriptTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ActionScriptTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +AnyCharacterButApostropheOrBackSlash = ([^\\']) +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})*[\']) +UnclosedCharLiteral = ([\']([\\].|[^\\\'])*[^\']*) +ErrorCharLiteral = ({UnclosedCharLiteral}[\']) +StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + +MLCBegin = ("/*") +MLCEnd = ("*/") +LineCommentBegin = ("//") +IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +IntegerLiteral = ({IntegerHelper1}[lL]?) +HexLiteral = ({IntegerHelper2}[lL]?) +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state MLC +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "add" | + "and" | + "break" | + "case" | + "catch" | + "class" | + "const" | + "continue" | + "default" | + "delete" | + "do" | + "dynamic" | + "else" | + "eq" | + "extends" | + "final" | + "finally" | + "for" | + "for each" | + "function" | + "ge" | + "get" | + "gt" | + "if" | + "ifFrameLoaded" | + "implements" | + "import" | + "in" | + "include" | + "interface" | + "internal" | + "label" | + "le" | + "lt" | + "namespace" | + "native" | + "ne" | + "new" | + "not" | + "on" | + "onClipEvent" | + "or" | + "override" | + "package" | + "private" | + "protected" | + "public" | + "return" | + "set" | + "static" | + "super" | + "switch" | + "tellTarget" | + "this" | + "throw" | + "try" | + "typeof" | + "use" | + "var" | + "void" | + "while" | + "with" | + + "null" | + "undefined" { addToken(Token.RESERVED_WORD); } + + /* Built-in objects (good idea not to use these names!) */ + "Array" | + "Boolean" | + "Color" | + "Date" | + "Function" | + "int" | + "Key" | + "MovieClip" | + "Math" | + "Mouse" | + "Null" | + "Number" | + "Object" | + "Selection" | + "Sound" | + "String" | + "uint" | + "Vector" | + "XML" | + "XMLNode" | + "XMLSocket" { addToken(Token.DATA_TYPE); } + + /* Global functions */ + "call" | + "escape" | + "eval" | + "fscommand" | + "getProperty" | + "getTimer" | + "getURL" | + "getVersion" | + "gotoAndPlay" | + "gotoAndStop" | + "#include" | + "int" | + "isFinite" | + "isNaN" | + "loadMovie" | + "loadMovieNum" | + "loadVariables" | + "loadVariablesNum" | + "maxscroll" | + "newline" | + "nextFrame" | + "nextScene" | + "Number" | + "parseFloat" | + "parseInt" | + "play" | + "prevFrame" | + "prevScene" | + "print" | + "printAsBitmap" | + "printAsBitmapNum" | + "printNum" | + "random" | + "removeMovieClip" | + "scroll" | + "setProperty" | + "startDrag" | + "stop" | + "stopAllSounds" | + "stopDrag" | + "String" | + "targetPath" | + "tellTarget" | + "toggleHighQuality" | + "trace" | + "unescape" | + "unloadMovie" | + "unloadMovieNum" | + "updateAfterEvent" { addToken(Token.FUNCTION); } + + /* Booleans. */ + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java new file mode 100644 index 0000000..7440381 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java @@ -0,0 +1,1957 @@ +/* The following code was generated by JFlex 1.4.1 on 11/24/15 12:57 AM */ + +/* + * 04/27/2010 + * + * ActionScriptTokenMaker.java - Scanner for ActionScript. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the ActionScript.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated ActionScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class ActionScriptTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\20\1\10\1\0\1\20\1\16\22\0\1\71\1\47\1\15"+ + "\1\17\1\1\1\47\1\51\1\7\2\54\1\22\1\42\1\41\1\30"+ + "\1\31\1\21\1\4\3\6\4\6\2\3\1\52\1\41\1\43\1\44"+ + "\1\46\1\50\1\53\1\77\1\5\1\75\1\25\1\27\1\73\1\1"+ + "\1\113\1\112\1\1\1\100\1\24\1\101\1\102\1\103\1\107\1\114"+ + "\1\111\1\105\1\76\1\110\1\106\1\1\1\23\2\1\1\54\1\11"+ + "\1\54\1\45\1\2\1\0\1\35\1\14\1\63\1\61\1\34\1\26"+ + "\1\72\1\55\1\57\1\104\1\62\1\36\1\66\1\13\1\64\1\56"+ + "\1\67\1\33\1\37\1\32\1\12\1\74\1\60\1\70\1\65\1\1"+ + "\1\40\1\45\1\40\1\50\uff81\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 = + "\3\0\1\1\1\2\2\3\1\2\1\4\1\5\3\2"+ + "\1\6\2\1\1\7\2\10\3\2\1\10\7\2\1\11"+ + "\1\2\5\10\22\2\1\12\1\13\5\12\1\14\3\12"+ + "\1\1\1\15\1\3\1\16\1\15\1\16\1\15\1\17"+ + "\1\15\1\2\1\20\1\4\5\2\1\21\3\2\2\6"+ + "\1\22\1\1\1\23\1\24\21\2\1\21\12\2\1\0"+ + "\1\10\4\2\2\21\11\2\1\21\2\2\1\21\17\2"+ + "\1\25\10\0\1\1\1\16\1\0\2\17\1\2\3\4"+ + "\6\2\1\21\4\2\1\6\1\26\1\6\1\1\1\0"+ + "\1\27\5\2\1\21\23\2\1\21\11\2\1\27\20\2"+ + "\1\21\4\2\1\27\12\2\10\0\1\1\1\2\1\30"+ + "\2\4\10\2\1\6\1\1\1\31\5\2\1\0\1\32"+ + "\13\2\1\33\3\2\1\33\40\2\2\0\1\34\2\0"+ + "\1\35\1\1\1\2\1\4\7\2\1\6\1\1\4\2"+ + "\1\21\1\0\17\2\1\33\23\2\4\0\1\1\1\2"+ + "\1\4\6\2\1\6\1\1\4\2\1\0\35\2\1\1"+ + "\2\2\1\0\24\2\1\33\1\2\1\21\25\2\1\33"+ + "\40\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[528]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + 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\u03e9\0\u02b5\0\u0436"+ + "\0\u0483\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e"+ + "\0\u06eb\0\u0738\0\u0785\0\u07d2\0\u081f\0\u086c\0\u02b5\0\u02b5"+ + "\0\u08b9\0\u0906\0\u0953\0\u02b5\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\u0e70\0\u0ebd\0\u0f0a\0\u0f57"+ + "\0\u02b5\0\u0fa4\0\u0ff1\0\u103e\0\u108b\0\u10d8\0\u02b5\0\u1125"+ + "\0\u1172\0\u11bf\0\u120c\0\u1259\0\u1259\0\u1259\0\u12a6\0\u12f3"+ + "\0\u1340\0\u138d\0\u13da\0\u1427\0\u02b5\0\u1474\0\u14c1\0\u150e"+ + "\0\u155b\0\u15a8\0\u15f5\0\u1642\0\u168f\0\u16dc\0\u1729\0\u1776"+ + "\0\u17c3\0\u02b5\0\u1810\0\u02b5\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\u1c93\0\u1ce0\0\u1d2d\0\u1d7a\0\u0134\0\u1dc7"+ + "\0\u1e14\0\u1e61\0\u1eae\0\u1efb\0\u1f48\0\u1f95\0\u1fe2\0\u202f"+ + "\0\u207c\0\u051d\0\u20c9\0\u2116\0\u2163\0\u21b0\0\u21fd\0\u224a"+ + "\0\u2297\0\u22e4\0\u2331\0\u237e\0\u23cb\0\u2418\0\u2465\0\u24b2"+ + "\0\u24ff\0\u254c\0\u2599\0\u25e6\0\u2633\0\u2680\0\u26cd\0\u271a"+ + "\0\u2767\0\u27b4\0\u2801\0\u284e\0\u289b\0\u28e8\0\u2935\0\u2982"+ + "\0\u29cf\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u02b5\0\u2b50\0\u2b9d"+ + "\0\u2bea\0\u2c37\0\u2c84\0\u2cd1\0\u2d1e\0\u2d6b\0\u2db8\0\u2e05"+ + "\0\u2e52\0\u1259\0\u2e9f\0\u2eec\0\u2f39\0\u2f86\0\u2fd3\0\u3020"+ + "\0\u306d\0\u30ba\0\u3107\0\u3154\0\u31a1\0\u31ee\0\u323b\0\u3288"+ + "\0\u32d5\0\u3322\0\u336f\0\u02b5\0\u33bc\0\u3409\0\u3456\0\u34a3"+ + "\0\u34f0\0\u353d\0\u358a\0\u35d7\0\u3624\0\u3671\0\u36be\0\u370b"+ + "\0\u3758\0\u37a5\0\u37f2\0\u383f\0\u388c\0\u38d9\0\u3926\0\u3973"+ + "\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7\0\u3af4\0\u3b41\0\u3b8e\0\u3bdb"+ + "\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f\0\u3d5c\0\u3da9\0\u3df6\0\u3e43"+ + "\0\u3e90\0\u3edd\0\u3f2a\0\u3f77\0\u3fc4\0\u4011\0\u405e\0\u40ab"+ + "\0\u40f8\0\u4145\0\u4192\0\u41df\0\u422c\0\u4279\0\u42c6\0\u4313"+ + "\0\u4360\0\u43ad\0\u43fa\0\u4447\0\u4494\0\u44e1\0\u452e\0\u457b"+ + "\0\u45c8\0\u0134\0\u4615\0\u4662\0\u46af\0\u46fc\0\u4749\0\u4796"+ + "\0\u47e3\0\u4830\0\u487d\0\u48ca\0\u4917\0\u4964\0\u49b1\0\u49fe"+ + "\0\u4a4b\0\u4a98\0\u4ae5\0\u4b32\0\u4b7f\0\u4bcc\0\u02b5\0\u4c19"+ + "\0\u4c66\0\u4cb3\0\u4d00\0\u4d4d\0\u4d9a\0\u4de7\0\u4e34\0\u4e81"+ + "\0\u4ece\0\u4f1b\0\u4f68\0\u02b5\0\u4fb5\0\u5002\0\u504f\0\u509c"+ + "\0\u50e9\0\u5136\0\u0134\0\u5183\0\u51d0\0\u521d\0\u526a\0\u52b7"+ + "\0\u5304\0\u5351\0\u539e\0\u53eb\0\u5438\0\u5485\0\u0134\0\u54d2"+ + "\0\u551f\0\u556c\0\u55b9\0\u5606\0\u5653\0\u56a0\0\u56ed\0\u573a"+ + "\0\u5787\0\u57d4\0\u5821\0\u586e\0\u58bb\0\u5908\0\u5955\0\u59a2"+ + "\0\u59ef\0\u5a3c\0\u5a89\0\u5ad6\0\u5b23\0\u5b70\0\u5bbd\0\u5c0a"+ + "\0\u5c57\0\u5ca4\0\u5cf1\0\u5d3e\0\u5d8b\0\u5dd8\0\u5e25\0\u5e72"+ + "\0\u5ebf\0\u5f0c\0\u5f59\0\u5fa6\0\u5ff3\0\u6040\0\u608d\0\u60da"+ + "\0\u6127\0\u6174\0\u61c1\0\u620e\0\u625b\0\u62a8\0\u62f5\0\u6342"+ + "\0\u638f\0\u63dc\0\u6429\0\u6476\0\u64c3\0\u6510\0\u655d\0\u65aa"+ + "\0\u65f7\0\u6644\0\u6691\0\u66de\0\u672b\0\u6778\0\u67c5\0\u6812"+ + "\0\u685f\0\u68ac\0\u68f9\0\u6946\0\u6993\0\u69e0\0\u6a2d\0\u6a7a"+ + "\0\u6ac7\0\u6b14\0\u6b61\0\u6bae\0\u6bfb\0\u6c48\0\u6c95\0\u6ce2"+ + "\0\u6d2f\0\u6d7c\0\u6dc9\0\u6e16\0\u6e63\0\u6eb0\0\u6efd\0\u6f4a"+ + "\0\u6f97\0\u6fe4\0\u7031\0\u707e\0\u70cb\0\u7118\0\u7165\0\u6040"+ + "\0\u71b2\0\u6127\0\u71ff\0\u724c\0\u7299\0\u72e6\0\u7333\0\u7380"+ + "\0\u73cd\0\u741a\0\u7467\0\u74b4\0\u7501\0\u754e\0\u759b\0\u75e8"+ + "\0\u7635\0\u7682\0\u76cf\0\u771c\0\u7769\0\u77b6\0\u7803\0\u7850"+ + "\0\u789d\0\u78ea\0\u7937\0\u7984\0\u79d1\0\u7a1e\0\u7a6b\0\u7ab8"+ + "\0\u7b05\0\u7b52\0\u7b9f\0\u7bec\0\u7c39\0\u7c86\0\u7cd3\0\u7d20"+ + "\0\u7d6d\0\u7dba\0\u7e07\0\u7e54\0\u7ea1\0\u7eee\0\u7f3b\0\u7f88"+ + "\0\u7fd5\0\u8022\0\u806f\0\u80bc\0\u8109\0\u8156\0\u81a3\0\u81f0"+ + "\0\u823d\0\u828a\0\u82d7\0\u8324\0\u8371\0\u83be\0\u840b\0\u8458"+ + "\0\u84a5\0\u84f2\0\u853f\0\u858c\0\u85d9\0\u8626\0\u8673\0\347"+ + "\0\u86c0\0\u02b5\0\u870d\0\u875a\0\u87a7\0\u87f4\0\u8841\0\u888e"+ + "\0\u88db\0\u8928\0\u8975\0\u89c2\0\u8a0f\0\u8a5c\0\u8aa9\0\u8af6"+ + "\0\u8b43\0\u8b90\0\u8bdd\0\u8c2a\0\u8c77\0\u8cc4\0\u8d11\0\u8d5e"+ + "\0\u8dab\0\u8df8\0\u8e45\0\u8e92\0\u8edf\0\u8f2c\0\u8f79\0\u8fc6"+ + "\0\u9013\0\u9060\0\u90ad\0\u90fa\0\u9147\0\u9194\0\u91e1\0\u922e"+ + "\0\u927b\0\u92c8\0\u9315\0\u9362\0\u93af\0\u93fc\0\u9449\0\u9496"+ + "\0\u94e3\0\u9530\0\u957d\0\u95ca\0\u9617\0\u9664\0\u96b1\0\u96fe"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[528]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\2\5\1\6\1\7\1\10\1\6\1\11\1\12"+ + "\1\4\1\13\1\14\1\15\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\1\24\1\5\1\25\1\26\1\5\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\23\1\43\1\23\1\44\1\45"+ + "\1\44\1\4\1\37\1\5\1\46\1\47\1\50\1\51"+ + "\1\5\1\52\1\53\1\5\1\54\2\5\1\21\1\55"+ + "\1\56\1\57\1\60\1\5\1\61\1\62\1\63\1\64"+ + "\1\65\1\5\1\66\1\67\6\5\10\70\1\71\11\70"+ + "\1\72\3\70\1\73\26\70\1\74\2\70\1\75\34\70"+ + "\10\76\1\77\15\76\1\100\26\76\1\101\2\76\1\102"+ + "\34\76\7\4\2\0\4\4\2\0\1\4\3\0\5\4"+ + "\2\0\6\4\13\0\1\4\1\0\14\4\1\0\24\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\3\104\2\6\1\104\1\6\2\0\4\104\2\0\1\104"+ + "\3\0\1\104\1\105\2\106\1\107\1\0\1\110\2\104"+ + "\1\107\1\104\1\105\1\104\13\0\1\104\1\0\4\104"+ + "\1\106\7\104\1\0\1\104\1\106\24\104\1\111\1\112"+ + "\1\104\1\112\2\0\4\104\2\0\1\104\3\0\1\113"+ + "\1\105\2\106\1\107\1\0\1\110\2\104\1\107\1\104"+ + "\1\105\1\104\13\0\1\104\1\0\4\104\1\106\6\104"+ + "\1\113\1\0\1\104\1\106\21\104\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\114\4\5\1\0\23\5"+ + "\7\11\1\115\1\11\1\116\103\11\115\0\1\4\6\5"+ + "\2\0\1\103\1\5\1\117\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\5\5\1\120\13\0\1\4\1\0\1\5"+ + "\1\121\1\122\11\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\123\2\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\124\1\125\2\5\13\0\1\4\1\0\7\5"+ + "\1\126\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\127"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\10\16"+ + "\1\130\1\131\3\16\1\132\77\16\7\4\2\0\4\4"+ + "\2\0\1\4\3\0\5\4\2\0\6\4\13\0\1\4"+ + "\1\0\2\4\1\133\11\4\1\0\23\4\20\0\1\21"+ + "\50\0\1\21\44\0\1\134\1\135\21\0\1\44\114\0"+ + "\1\44\50\0\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\7\5\1\136\13\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\137\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\140\2\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\141\1\5\1\142\13\0"+ + "\1\4\1\0\2\5\1\143\4\5\1\144\4\5\1\0"+ + "\23\5\30\0\1\44\13\0\1\44\53\0\2\110\1\0"+ + "\1\110\106\0\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\145\1\146\1\147"+ + "\2\5\13\0\1\4\1\0\1\150\6\5\1\151\1\152"+ + "\3\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\153\1\154"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\155\1\156\13\0\1\4\1\0\12\5"+ + "\1\157\1\160\1\0\2\5\1\161\20\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\162\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\162"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\157\1\5\1\157"+ + "\1\163\2\5\13\0\1\4\1\0\7\5\1\164\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\165\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\166\1\5\1\167"+ + "\3\5\13\0\1\4\1\0\3\5\1\170\2\5\1\171"+ + "\5\5\1\0\23\5\42\0\1\44\1\0\1\44\113\0"+ + "\1\172\1\44\114\0\1\44\1\0\1\173\112\0\1\44"+ + "\4\0\1\44\43\0\1\4\6\5\2\0\1\103\1\174"+ + "\2\5\2\0\1\4\3\0\5\5\2\0\1\5\1\175"+ + "\1\5\1\176\1\177\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\200"+ + "\1\5\2\0\1\4\3\0\3\5\1\201\1\5\2\0"+ + "\5\5\1\202\13\0\1\4\1\0\11\5\1\203\2\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\1\204\1\5\1\205\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\206\3\5\13\0\1\4\1\0\7\5\1\157"+ + "\1\207\3\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\210"+ + "\1\211\1\5\13\0\1\4\1\0\7\5\1\212\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\213"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\1\5\1\157"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\2\5\1\214"+ + "\20\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\215\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\157\1\5"+ + "\1\216\3\5\13\0\1\4\1\0\7\5\1\217\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\220\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\221"+ + "\2\5\13\0\1\4\1\0\7\5\1\222\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ + "\1\223\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\224"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\225\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\3\5\1\226\2\5\13\0"+ + "\1\4\1\0\7\5\1\227\4\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\230\2\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\2\5\1\231\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\232\1\5\1\233"+ + "\3\5\13\0\1\4\1\0\7\5\1\234\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\235\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\10\70\1\0\11\70\1\0"+ + "\3\70\1\0\26\70\1\0\2\70\1\0\34\70\21\0"+ + "\1\236\125\0\1\237\24\0\1\240\67\0\1\241\142\0"+ + "\1\242\34\0\10\76\1\0\15\76\1\0\26\76\1\0"+ + "\2\76\1\0\34\76\32\0\1\243\24\0\1\244\67\0"+ + "\1\245\142\0\1\246\34\0\7\4\2\0\1\4\1\247"+ + "\2\4\2\0\1\4\3\0\5\4\2\0\6\4\13\0"+ + "\1\4\1\0\14\4\1\0\23\4\7\104\2\0\4\104"+ + "\2\0\1\104\3\0\5\104\2\0\6\104\13\0\1\104"+ + "\1\0\14\104\1\0\26\104\2\250\1\104\1\250\2\0"+ + "\4\104\2\0\1\104\3\0\5\104\1\251\1\0\6\104"+ + "\2\0\1\251\10\0\1\104\1\0\14\104\1\0\26\104"+ + "\2\110\1\104\1\110\2\0\4\104\2\0\1\104\3\0"+ + "\2\104\2\106\1\107\2\0\2\104\1\107\3\104\13\0"+ + "\1\104\1\0\4\104\1\106\7\104\1\0\1\104\1\106"+ + "\24\104\2\111\1\104\1\111\2\0\4\104\2\0\1\104"+ + "\3\0\2\104\2\106\1\107\1\0\1\110\2\104\1\107"+ + "\3\104\13\0\1\104\1\0\4\104\1\106\7\104\1\0"+ + "\1\104\1\106\24\104\1\111\1\112\1\104\1\112\2\0"+ + "\4\104\2\0\1\104\3\0\1\104\1\252\2\106\1\107"+ + "\1\0\1\110\2\104\1\107\1\104\1\252\1\104\13\0"+ + "\1\104\1\0\4\104\1\106\7\104\1\0\1\104\1\106"+ + "\24\104\4\253\2\0\3\104\1\253\2\0\1\104\3\0"+ + "\2\104\3\253\2\0\2\104\2\253\2\104\13\0\1\104"+ + "\1\0\4\104\1\253\1\104\1\253\5\104\1\0\1\104"+ + "\1\253\1\104\1\253\1\104\1\253\15\104\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\254\4\5\1\0"+ + "\23\5\4\255\1\11\1\255\2\11\1\256\1\11\1\257"+ + "\3\11\10\255\1\11\3\255\2\11\61\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\260\1\5\1\261\1\5\13\0\1\4\1\0"+ + "\4\5\1\262\7\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\157\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\263"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ + "\1\264\1\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\265\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\3\5"+ + "\1\266\7\5\1\267\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\270"+ + "\5\5\13\0\1\4\1\0\11\5\1\271\2\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\157\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\272\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\11\130\1\273"+ + "\3\130\1\274\103\130\1\16\1\130\2\16\1\0\1\16"+ + "\1\275\3\16\10\130\1\16\3\130\2\16\61\130\7\4"+ + "\2\0\2\4\1\276\1\4\2\0\1\4\3\0\5\4"+ + "\2\0\6\4\13\0\1\4\1\0\14\4\1\0\23\4"+ + "\22\0\1\277\72\0\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\1\5\1\300\3\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\301\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\302\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\303\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\6\5\1\304\5\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\305\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\306"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\307\2\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\310\2\5\13\0\1\4\1\0"+ + "\10\5\1\157\3\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\311\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\5\1\312\4\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\313\4\5"+ + "\13\0\1\4\1\0\2\5\1\314\11\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\315\22\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\1\5\1\316\12\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\317"+ + "\5\5\13\0\1\4\1\0\11\5\1\320\2\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\321\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\5\5\1\120"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\6\5\1\322\5\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\323\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\3\5\1\324\2\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\4\5\1\157\7\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\2\5\1\325\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\3\5\1\326\2\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\1\5\1\327\12\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\330\2\5\13\0\1\4"+ + "\1\0\7\5\1\331\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\332\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\333"+ + "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\334\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\44\0\1\44"+ + "\1\0\1\23\46\0\1\4\6\5\2\0\1\103\2\5"+ + "\1\335\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\336\3\5\13\0\1\4\1\0\2\5\1\337\4\5"+ + "\1\340\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\341"+ + "\4\5\13\0\1\4\1\0\6\5\1\342\5\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\343\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\344\5\5"+ + "\13\0\1\4\1\0\6\5\1\345\5\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\5\1\346\21\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\1\5\1\347\6\5\1\350\12\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\1\5\1\351"+ + "\12\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\352\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\353\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\3\5\1\354\1\5\2\0\4\5\1\355\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\5\1\356\1\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\357\3\5\1\324\1\120\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\360"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\5\1\361\1\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\3\5\1\362\17\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\363\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\13\5\1\364"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\365\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\366\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\367\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\5\1\157\4\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\162\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\370\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\371\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\10\5\1\372\3\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\373\5\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\374\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\2\5\1\375\20\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\376\1\5\13\0\1\4\1\0\11\5\1\377"+ + "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\12\5\1\u0100\10\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\u0101\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u0102\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\1\u0103\2\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\6\5\1\u0104\5\5\1\0"+ + "\23\5\56\0\1\u0105\74\0\1\u0106\110\0\1\u0107\142\0"+ + "\1\u0108\112\0\1\u0109\74\0\1\u010a\110\0\1\u010b\142\0"+ + "\1\u010c\34\0\3\4\4\u010d\2\0\3\4\1\u010d\2\0"+ + "\1\4\3\0\2\4\3\u010d\2\0\2\4\2\u010d\2\4"+ + "\13\0\1\4\1\0\4\4\1\u010d\1\4\1\u010d\5\4"+ + "\1\0\1\4\1\u010d\1\4\1\u010d\1\4\1\u010d\15\4"+ + "\3\104\2\250\1\104\1\250\2\0\4\104\2\0\1\104"+ + "\3\0\2\104\2\106\1\104\2\0\6\104\13\0\1\104"+ + "\1\0\4\104\1\106\7\104\1\0\1\104\1\106\21\104"+ + "\3\0\2\250\1\0\1\250\106\0\3\104\4\253\2\0"+ + "\3\104\1\253\2\0\1\104\3\0\1\104\1\252\3\253"+ + "\2\0\2\104\2\253\1\252\1\104\13\0\1\104\1\0"+ + "\4\104\1\253\1\104\1\253\5\104\1\0\1\104\1\253"+ + "\1\104\1\253\1\104\1\253\15\104\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u010e\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\7\255\1\u010f\1\255\1\u0110\103\255\7\256\1\u010f\105\256"+ + "\3\255\4\u0111\1\u010f\1\255\1\u0110\2\255\1\u0111\10\255"+ + "\3\u0111\4\255\2\u0111\23\255\1\u0111\1\255\1\u0111\7\255"+ + "\1\u0111\1\255\1\u0111\1\255\1\u0111\15\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\156\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0112"+ + "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u0113\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u0114\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\372\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\157\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\u0115\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\u0116\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u0117\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\u0118\3\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u0119\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\10\130\1\0\107\130\4\u011a"+ + "\2\130\1\273\2\130\1\u011a\1\274\7\130\3\u011a\4\130"+ + "\2\u011a\23\130\1\u011a\1\130\1\u011a\7\130\1\u011a\1\130"+ + "\1\u011a\1\130\1\u011a\15\130\7\4\2\0\4\4\2\0"+ + "\1\4\3\0\5\4\2\0\6\4\13\0\1\4\1\0"+ + "\6\4\1\u011b\5\4\1\0\23\4\21\0\1\u011c\73\0"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\10\5\1\u011d\2\5\1\u011e\7\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\372\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u011f"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\5\5\1\307\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\u0120\4\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\u0121\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\u0122\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u0123"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\6\5\1\u0124\5\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\u0125\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\1\u0126\22\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u0127\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\5\5\1\157\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\1\u0128\22\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\u0129\3\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\u012a\2\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\7\5\1\u012b\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\4\5\1\u012c\7\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u012d\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u012e"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\u012f\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\265\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\4\5\1\u0130\7\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\221\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\u0131\1\u0132\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\1\5\1\u0133\12\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\15\5\1\u0134\5\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\357\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\u0135\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u0131\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\2\5\1\u0116\20\5\1\4"+ + "\6\5\2\0\1\103\1\5\1\u0136\1\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\2\5\1\u0137\20\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u0138\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\u0139\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\5\5\1\u013a"+ + "\6\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\10\5\1\u012f\3\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\u013b\3\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u013c\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\u013d"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\2\5\1\u013e\11\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\3\5\1\u013f\2\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u0140\1\5\13\0\1\4\1\0\7\5\1\u0141\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\120\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\1\157\13\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u0142\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u0143\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u0144\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\353"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\5\5\1\314\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\u0145"+ + "\4\5\1\126\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\4\5\1\u0146\1\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\u0147\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\u0148\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\4\5\1\u0149\7\5\1\u014a\1\u0134\1\u014b\4\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u014c\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\6\5\1\u014d\5\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\u014e\4\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\225\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\1\372\13\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\5\5"+ + "\1\301\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\2\5\1\u014f\11\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\372\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\2\5\1\u0150\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\u0151\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\2\5\1\u0152\11\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\367\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\u0153\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\370\5\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\52\0\1\u0154\76\0"+ + "\1\u0105\136\0\1\u0155\67\0\1\u0156\135\0\1\u0157\76\0"+ + "\1\u0109\136\0\1\u0158\67\0\1\u0159\63\0\3\4\4\u015a"+ + "\2\0\3\4\1\u015a\2\0\1\4\3\0\2\4\3\u015a"+ + "\2\0\2\4\2\u015a\2\4\13\0\1\4\1\0\4\4"+ + "\1\u015a\1\4\1\u015a\5\4\1\0\1\4\1\u015a\1\4"+ + "\1\u015a\1\4\1\u015a\16\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u015b\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\10\255\1\256"+ + "\107\255\4\u015c\1\u010f\1\255\1\u0110\2\255\1\u015c\10\255"+ + "\3\u015c\4\255\2\u015c\23\255\1\u015c\1\255\1\u015c\7\255"+ + "\1\u015c\1\255\1\u015c\1\255\1\u015c\15\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u015d\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\3\5\1\u015e\1\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u015f\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\2\5\1\u0160\11\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\1\5\1\u0161\11\5\1\u0162\7\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\2\5\1\120"+ + "\20\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\5\5\1\u0163\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\5\5\1\157\6\5\1\0\23\5\3\130\4\u0164"+ + "\2\130\1\273\2\130\1\u0164\1\274\7\130\3\u0164\4\130"+ + "\2\u0164\23\130\1\u0164\1\130\1\u0164\7\130\1\u0164\1\130"+ + "\1\u0164\1\130\1\u0164\15\130\7\4\2\0\4\4\2\0"+ + "\1\4\3\0\5\4\2\0\4\4\1\u0165\1\4\13\0"+ + "\1\4\1\0\14\4\1\0\24\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\7\5\1\u0166\4\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u0167\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u0168\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\11\5\1\u0169\2\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\u016a\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\34\0\1\u016b\60\0\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\u012f\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\4\5\1\u016c\16\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u016d\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\3\5\1\157\10\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u016e\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\7\5\1\u016f\4\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\1\5\1\u0170\4\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\2\5\1\u0171\20\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\u0172\4\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\1\5\1\u0124"+ + "\12\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ + "\1\u0173\1\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u0174"+ + "\4\5\1\u0175\6\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u0176\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\u0177\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\2\5\1\u0178\2\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\5\5\1\u0179\15\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\5"+ + "\1\u017a\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\4\5\1\324\1\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\u017b\5\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u0143\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\u017c\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u017d\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u017e\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\5\1\u017f\4\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\1\u0180\2\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u0181\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\u0182\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\10\5\1\u012f\12\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\u0183\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\126\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\u0184\2\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\1\120\5\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5"+ + "\1\u0131\2\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\u0185\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\2\5\1\u0186\11\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\u0187\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\6\5\1\171\5\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u0188"+ + "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u0189\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\17\5\1\u018a"+ + "\3\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\5\5\1\u018b\15\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u018c\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\372\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\u018d\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u014e"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\6\5\1\264\5\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\u018e"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\4\5\1\372\7\5\1\0\23\5"+ + "\21\0\1\u018f\132\0\1\u0105\12\0\1\u0154\43\0\1\u0156"+ + "\1\u0190\4\u0156\1\u0190\2\0\3\u0156\2\0\1\u0190\1\0"+ + "\1\u0156\1\u0190\5\u0156\2\u0190\6\u0156\1\0\2\u0190\1\0"+ + "\1\u0190\2\0\6\u0190\14\u0156\1\0\23\u0156\21\0\1\u0191"+ + "\132\0\1\u0109\12\0\1\u0157\43\0\1\u0159\1\u0192\4\u0159"+ + "\1\u0192\2\0\3\u0159\2\0\1\u0192\1\0\1\u0159\1\u0192"+ + "\5\u0159\2\u0192\6\u0159\1\0\2\u0192\1\0\1\u0192\2\0"+ + "\6\u0192\14\u0159\1\0\23\u0159\3\4\4\u0193\2\0\3\4"+ + "\1\u0193\2\0\1\4\3\0\2\4\3\u0193\2\0\2\4"+ + "\2\u0193\2\4\13\0\1\4\1\0\4\4\1\u0193\1\4"+ + "\1\u0193\5\4\1\0\1\4\1\u0193\1\4\1\u0193\1\4"+ + "\1\u0193\16\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u0194\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\3\255\4\u0195\1\u010f\1\255"+ + "\1\u0110\2\255\1\u0195\10\255\3\u0195\4\255\2\u0195\23\255"+ + "\1\u0195\1\255\1\u0195\7\255\1\u0195\1\255\1\u0195\1\255"+ + "\1\u0195\15\255\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\4\5\1\u0196\7\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\2\5\1\u0197\11\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\u0198\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ + "\1\u0124\1\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\u0199\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\6\5"+ + "\1\u019a\5\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\1\5\1\u019b\12\5\1\0\23\5\3\130"+ + "\4\u019c\2\130\1\273\2\130\1\u019c\1\274\7\130\3\u019c"+ + "\4\130\2\u019c\23\130\1\u019c\1\130\1\u019c\7\130\1\u019c"+ + "\1\130\1\u019c\1\130\1\u019c\15\130\7\4\2\0\1\4"+ + "\1\u019d\2\4\2\0\1\4\3\0\5\4\2\0\6\4"+ + "\13\0\1\4\1\0\14\4\1\0\24\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\4\5\1\301\7\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u019e"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u019f\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\11\5\1\u01a0\2\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u01a1\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\35\0\1\u01a2\57\0\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01a3\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u01a4\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01a5"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\3\5"+ + "\1\157\1\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\157"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\u01a6\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\11\5\1\u012f"+ + "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\4\5\1\314\7\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\u01a7\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u01a8\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\6\5\1\157\5\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\2\5"+ + "\1\u0178\2\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\u01a9\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u01aa\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u01ab"+ + "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\5\5\1\u01ac\2\5\1\u01ad\12\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u01ae"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\1\5\1\u01af\16\5\1\u01b0\2\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\120\22\5\1\4\6\5\2\0\1\103\1\5\1\u01b1"+ + "\1\5\2\0\1\4\3\0\3\5\1\u019b\1\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\4\5\1\120\7\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\11\5\1\u01b2\2\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\2\5\1\u01b3\11\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\11\5\1\u01b4"+ + "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\126\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\u01b5\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\1\5"+ + "\1\u01b6\12\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\u0180\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\11\5\1\u01b7\2\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\u01b8\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\1\5\1\u012f\3\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\u01b9\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01ba\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\3\5\1\u01bb"+ + "\17\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\1\372\22\5\21\0\1\u0156\114\0\1\u0159\73\0"+ + "\3\4\4\5\2\0\3\4\1\5\2\0\1\4\3\0"+ + "\2\4\3\5\2\0\2\4\2\5\2\4\13\0\1\4"+ + "\1\0\4\4\1\5\1\4\1\5\5\4\1\0\1\4"+ + "\1\5\1\4\1\5\1\4\1\5\16\4\6\5\2\0"+ + "\1\103\1\5\1\372\1\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\3\255\4\11\1\u010f\1\255\1\u0110\2\255\1\11\10\255"+ + "\3\11\4\255\2\11\23\255\1\11\1\255\1\11\7\255"+ + "\1\11\1\255\1\11\1\255\1\11\15\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u0174"+ + "\13\5\1\4\6\5\2\0\1\103\1\5\1\u01bc\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\5\5\1\u01bd\15\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01be\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u0160\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u01bf\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\3\130\4\16\2\130\1\273\2\130\1\16\1\274\7\130"+ + "\3\16\4\130\2\16\23\130\1\16\1\130\1\16\7\130"+ + "\1\16\1\130\1\16\1\130\1\16\15\130\7\4\2\0"+ + "\4\4\2\0\1\4\3\0\5\4\2\0\6\4\13\0"+ + "\1\4\1\0\4\4\1\u01c0\7\4\1\0\24\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\5\5\1\u01c1\6\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ + "\1\u0170\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\u01c2"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\10\5\1\157\3\5"+ + "\1\0\23\5\63\0\1\u01c3\31\0\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\5"+ + "\1\u01c4\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\15\5\1\u01c5\5\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\21\5\1\u01c6\1\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u01c7"+ + "\13\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\2\5\1\u01c8\20\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\u01c9"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01ca\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\u01cb\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\1\5\1\u01cc\12\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\5\5\1\u01cd\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\u0172\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u01bc\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\u01ce\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\u01cf\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\265"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\u01d0\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u0124\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01d1"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\120\2\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\4\5\1\u01d2\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u01d3\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\u01d4\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\u01d5"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\7\5\1\u0194\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\u01d6\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\162\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\3\5\1\u01d7\1\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\11\5\1\u0124\2\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\6\5\1\120\5\5\1\0\23\5\7\4\2\0\4\4"+ + "\2\0\1\4\3\0\5\4\2\0\2\4\1\u01d8\3\4"+ + "\13\0\1\4\1\0\14\4\1\0\24\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\264\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\u01d9\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\55\0\1\u01da\37\0\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\1\u01db\22\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\u01dc\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01dd\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\u01de\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ + "\1\u01df\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\u01e0\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\1\u012f"+ + "\22\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\13\5\1\u01e1\7\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01e2"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\4\5\1\u01e3\1\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\7\5\1\u01e4\4\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\u012f"+ + "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\1\5"+ + "\1\u01e5\3\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\u01e6"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\2\5\1\u01e7\20\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\5\1\u012f\4\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01e8\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\13\5\1\u01e9"+ + "\1\5\1\u01ea\5\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01eb\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\u01ec\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\u012f"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\126\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\u01ed\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\u01ee\22\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\2\5\1\u01ef\20\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\u01f0\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\u01f1\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\7\5\1\u01f2\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\u01f3\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ + "\1\u01f4\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\u01cf"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u01f5\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\314\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01f6"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u01f7\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u01f8\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\4\5\1\177"+ + "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\5\1\372\12\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u01f9\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\1\u012f\13\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\u01fa\13\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ + "\1\u01fb\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\10\5\1\u01ad\12\5\1\4"+ + "\6\5\2\0\1\103\2\5\1\u01fc\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\u01fd\2\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\343\5\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\u01fe"+ + "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01ff\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\126"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\5\1\u012f\1\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0200"+ + "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\u0201\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\22\5\1\u0202"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\u0203\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\u0204\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\u0205\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5"+ + "\1\u0206\2\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\4\5\1\u01bc\7\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\5\1\u012f\12\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\4\5\1\u0207\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\1\u0208\2\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\3\5\1\u0209"+ + "\17\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\u020a\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\4\5\1\u020b\7\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u020c\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\2\5\1\u020d\20\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u020e\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\4\5\1\u020f\1\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\5\5\1\u01f0\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\5\5"+ + "\1\u012f\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\5\1\u01f0\12\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u01b0\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u0210\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u0200"+ + "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01f3\11\5\1\0\23\5"; + + private static int [] zzUnpackTrans() { + int [] result = new int[38731]; + 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; + } + + + /* 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; + + /* 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 = + "\3\0\6\1\1\11\4\1\1\11\17\1\2\11\3\1"+ + "\1\11\24\1\1\11\5\1\1\11\15\1\1\11\14\1"+ + "\1\11\1\1\1\11\35\1\1\0\43\1\1\11\10\0"+ + "\2\1\1\0\22\1\1\11\2\1\1\0\105\1\10\0"+ + "\2\1\1\11\14\1\1\11\5\1\1\0\61\1\2\0"+ + "\1\1\2\0\22\1\1\0\43\1\4\0\17\1\1\0"+ + "\40\1\1\0\26\1\1\11\66\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[528]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ActionScriptTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 190) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 5: + { addNullToken(); return firstToken; + } + case 30: break; + case 16: + { addToken(Token.LITERAL_CHAR); + } + case 31: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 32: break; + case 25: + { addToken(Token.COMMENT_MULTILINE); + } + case 33: break; + case 20: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 34: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 35: break; + case 15: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 36: break; + case 22: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 37: break; + case 14: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 38: break; + case 17: + { addToken(Token.RESERVED_WORD); + } + case 39: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 40: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 41: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 42: break; + case 19: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 43: break; + case 27: + { addToken(Token.FUNCTION); + } + case 44: break; + case 4: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 45: break; + case 6: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 46: break; + case 23: + { addToken(Token.DATA_TYPE); + } + case 47: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 48: break; + case 24: + { addToken(Token.ERROR_CHAR); + } + case 49: break; + case 26: + { addToken(Token.LITERAL_BOOLEAN); + } + case 50: break; + case 18: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 51: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 52: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 53: break; + case 13: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 54: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 55: break; + case 8: + { addToken(Token.OPERATOR); + } + case 56: break; + case 10: + { + } + case 57: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 58: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 529: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 530: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 531: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex new file mode 100644 index 0000000..cb28dd0 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex @@ -0,0 +1,1032 @@ +/* + * 12/06/2004 + * + * AssemblerX86TokenMaker.java - An object that can take a chunk of text and + * return a linked list of tokens representing X86 assembler. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class takes plain text and returns tokens representing x86 + * assembler.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated AssemblerX86TokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.2 + * + */ +%% + +%public +%class AssemblerX86TokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. We must have this here as JFLex does not generate a + * no parameter constructor. + */ + public AssemblerX86TokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = ([A-Za-z_]) +Digit = ([0-9]) +Number = ({Digit}+) + +Identifier = (({Letter}|{Digit})[^ \t\f\n\,\.\+\-\*\/\%\[\]]+) + +UnclosedStringLiteral = ([\"][^\"]*) +StringLiteral = ({UnclosedStringLiteral}[\"]) +UnclosedCharLiteral = ([\'][^\']*) +CharLiteral = ({UnclosedCharLiteral}[\']) + +CommentBegin = ([;]) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +Label = (({Letter}|{Digit})+[\:]) + +Operator = ("+"|"-"|"*"|"/"|"%"|"^"|"|"|"&"|"~"|"!"|"="|"<"|">") + +%% + + { + + /* Keywords */ + ".186" | + ".286" | + ".286P" | + ".287" | + ".386" | + ".386P" | + ".387" | + ".486" | + ".486P" | + ".586" | + ".586P" | + ".686" | + ".686P" | + ".8086" | + ".8087" | + ".ALPHA" | + ".BREAK" | + ".BSS" | + ".CODE" | + ".CONST" | + ".CONTINUE" | + ".CREF" | + ".DATA" | + ".DATA?" | + ".DOSSEG" | + ".ELSE" | + ".ELSEIF" | + ".ENDIF" | + ".ENDW" | + ".ERR" | + ".ERR1" | + ".ERR2" | + ".ERRB" | + ".ERRDEF" | + ".ERRDIF" | + ".ERRDIFI" | + ".ERRE" | + ".ERRIDN" | + ".ERRIDNI" | + ".ERRNB" | + ".ERRNDEF" | + ".ERRNZ" | + ".EXIT" | + ".FARDATA" | + ".FARDATA?" | + ".IF" | + ".K3D" | + ".LALL" | + ".LFCOND" | + ".LIST" | + ".LISTALL" | + ".LISTIF" | + ".LISTMACRO" | + ".LISTMACROALL" | + ".MMX" | + ".MODEL" | + ".MSFLOAT" | + ".NO87" | + ".NOCREF" | + ".NOLIST" | + ".NOLISTIF" | + ".NOLISTMACRO" | + ".RADIX" | + ".REPEAT" | + ".SALL" | + ".SEQ" | + ".SFCOND" | + ".STACK" | + ".STARTUP" | + ".TEXT" | + ".TFCOND" | + ".UNTIL" | + ".UNTILCXZ" | + ".WHILE" | + ".XALL" | + ".XCREF" | + ".XLIST" | + ".XMM" | + "__FILE__" | + "__LINE__" | + "A16" | + "A32" | + "ADDR" | + "ALIGN" | + "ALIGNB" | + "ASSUME" | + "BITS" | + "CARRY?" | + "CATSTR" | + "CODESEG" | + "COMM" | + "COMMENT" | + "COMMON" | + "DATASEG" | + "DOSSEG" | + "ECHO" | + "ELSE" | + "ELSEIF" | + "ELSEIF1" | + "ELSEIF2" | + "ELSEIFB" | + "ELSEIFDEF" | + "ELSEIFE" | + "ELSEIFIDN" | + "ELSEIFNB" | + "ELSEIFNDEF" | + "END" | + "ENDIF" | + "ENDM" | + "ENDP" | + "ENDS" | + "ENDSTRUC" | + "EVEN" | + "EXITM" | + "EXPORT" | + "EXTERN" | + "EXTERNDEF" | + "EXTRN" | + "FAR" | + "FOR" | + "FORC" | + "GLOBAL" | + "GOTO" | + "GROUP" | + "HIGH" | + "HIGHWORD" | + "IEND" | + "IF" | + "IF1" | + "IF2" | + "IFB" | + "IFDEF" | + "IFDIF" | + "IFDIFI" | + "IFE" | + "IFIDN" | + "IFIDNI" | + "IFNB" | + "IFNDEF" | + "IMPORT" | + "INCBIN" | + "INCLUDE" | + "INCLUDELIB" | + "INSTR" | + "INVOKE" | + "IRP" | + "IRPC" | + "ISTRUC" | + "LABEL" | + "LENGTH" | + "LENGTHOF" | + "LOCAL" | + "LOW" | + "LOWWORD" | + "LROFFSET" | + "MACRO" | + "NAME" | + "NEAR" | + "NOSPLIT" | + "O16" | + "O32" | + "OFFSET" | + "OPATTR" | + "OPTION" | + "ORG" | + "OVERFLOW?" | + "PAGE" | + "PARITY?" | + "POPCONTEXT" | + "PRIVATE" | + "PROC" | + "PROTO" | + "PTR" | + "PUBLIC" | + "PURGE" | + "PUSHCONTEXT" | + "RECORD" | + "REPEAT" | + "REPT" | + "SECTION" | + "SEG" | + "SEGMENT" | + "SHORT" | + "SIGN?" | + "SIZE" | + "SIZEOF" | + "SIZESTR" | + "STACK" | + "STRUC" | + "STRUCT" | + "SUBSTR" | + "SUBTITLE" | + "SUBTTL" | + "THIS" | + "TITLE" | + "TYPE" | + "TYPEDEF" | + "UNION" | + "USE16" | + "USE32" | + "USES" | + "WHILE" | + "WRT" | + "ZERO?" { addToken(Token.PREPROCESSOR); } + + "DB" | + "DW" | + "DD" | + "DF" | + "DQ" | + "DT" | + "RESB" | + "RESW" | + "RESD" | + "RESQ" | + "REST" | + "EQU" | + "TEXTEQU" | + "TIMES" | + "DUP" { addToken(Token.FUNCTION); } + + "BYTE" | + "WORD" | + "DWORD" | + "FWORD" | + "QWORD" | + "TBYTE" | + "SBYTE" | + "TWORD" | + "SWORD" | + "SDWORD" | + "REAL4" | + "REAL8" | + "REAL10" { addToken(Token.DATA_TYPE); } + + /* Registers */ + "AL" | + "BL" | + "CL" | + "DL" | + "AH" | + "BH" | + "CH" | + "DH" | + "AX" | + "BX" | + "CX" | + "DX" | + "SI" | + "DI" | + "SP" | + "BP" | + "EAX" | + "EBX" | + "ECX" | + "EDX" | + "ESI" | + "EDI" | + "ESP" | + "EBP" | + "CS" | + "DS" | + "SS" | + "ES" | + "FS" | + "GS" | + "ST" | + "ST0" | + "ST1" | + "ST2" | + "ST3" | + "ST4" | + "ST5" | + "ST6" | + "ST7" | + "MM0" | + "MM1" | + "MM2" | + "MM3" | + "MM4" | + "MM5" | + "MM6" | + "MM7" | + "XMM0" | + "XMM1" | + "XMM2" | + "XMM3" | + "XMM4" | + "XMM5" | + "XMM6" | + "XMM7" | + "CR0" | + "CR2" | + "CR3" | + "CR4" | + "DR0" | + "DR1" | + "DR2" | + "DR3" | + "DR4" | + "DR5" | + "DR6" | + "DR7" | + "TR3" | + "TR4" | + "TR5" | + "TR6" | + "TR7" { addToken(Token.VARIABLE); } + + /* Pentium III Instructions. */ + "AAA" | + "AAD" | + "AAM" | + "AAS" | + "ADC" | + "ADD" | + "ADDPS" | + "ADDSS" | + "AND" | + "ANDNPS" | + "ANDPS" | + "ARPL" | + "BOUND" | + "BSF" | + "BSR" | + "BSWAP" | + "BT" | + "BTC" | + "BTR" | + "BTS" | + "CALL" | + "CBW" | + "CDQ" | + "CLC" | + "CLD" | + "CLI" | + "CLTS" | + "CMC" | + "CMOVA" | + "CMOVAE" | + "CMOVB" | + "CMOVBE" | + "CMOVC" | + "CMOVE" | + "CMOVG" | + "CMOVGE" | + "CMOVL" | + "CMOVLE" | + "CMOVNA" | + "CMOVNAE" | + "CMOVNB" | + "CMOVNBE" | + "CMOVNC" | + "CMOVNE" | + "CMOVNG" | + "CMOVNGE" | + "CMOVNL" | + "CMOVNLE" | + "CMOVNO" | + "CMOVNP" | + "CMOVNS" | + "CMOVNZ" | + "CMOVO" | + "CMOVP" | + "CMOVPE" | + "CMOVPO" | + "CMOVS" | + "CMOVZ" | + "CMP" | + "CMPPS" | + "CMPS" | + "CMPSB" | + "CMPSD" | + "CMPSS" | + "CMPSW" | + "CMPXCHG" | + "CMPXCHGB" | + "COMISS" | + "CPUID" | + "CWD" | + "CWDE" | + "CVTPI2PS" | + "CVTPS2PI" | + "CVTSI2SS" | + "CVTSS2SI" | + "CVTTPS2PI" | + "CVTTSS2SI" | + "DAA" | + "DAS" | + "DEC" | + "DIV" | + "DIVPS" | + "DIVSS" | + "EMMS" | + "ENTER" | + "F2XM1" | + "FABS" | + "FADD" | + "FADDP" | + "FBLD" | + "FBSTP" | + "FCHS" | + "FCLEX" | + "FCMOVB" | + "FCMOVBE" | + "FCMOVE" | + "FCMOVNB" | + "FCMOVNBE" | + "FCMOVNE" | + "FCMOVNU" | + "FCMOVU" | + "FCOM" | + "FCOMI" | + "FCOMIP" | + "FCOMP" | + "FCOMPP" | + "FCOS" | + "FDECSTP" | + "FDIV" | + "FDIVP" | + "FDIVR" | + "FDIVRP" | + "FFREE" | + "FIADD" | + "FICOM" | + "FICOMP" | + "FIDIV" | + "FIDIVR" | + "FILD" | + "FIMUL" | + "FINCSTP" | + "FINIT" | + "FIST" | + "FISTP" | + "FISUB" | + "FISUBR" | + "FLD1" | + "FLDCW" | + "FLDENV" | + "FLDL2E" | + "FLDL2T" | + "FLDLG2" | + "FLDLN2" | + "FLDPI" | + "FLDZ" | + "FMUL" | + "FMULP" | + "FNCLEX" | + "FNINIT" | + "FNOP" | + "FNSAVE" | + "FNSTCW" | + "FNSTENV" | + "FNSTSW" | + "FPATAN" | + "FPREM" | + "FPREMI" | + "FPTAN" | + "FRNDINT" | + "FRSTOR" | + "FSAVE" | + "FSCALE" | + "FSIN" | + "FSINCOS" | + "FSQRT" | + "FST" | + "FSTCW" | + "FSTENV" | + "FSTP" | + "FSTSW" | + "FSUB" | + "FSUBP" | + "FSUBR" | + "FSUBRP" | + "FTST" | + "FUCOM" | + "FUCOMI" | + "FUCOMIP" | + "FUCOMP" | + "FUCOMPP" | + "FWAIT" | + "FXAM" | + "FXCH" | + "FXRSTOR" | + "FXSAVE" | + "FXTRACT" | + "FYL2X" | + "FYL2XP1" | + "HLT" | + "IDIV" | + "IMUL" | + "IN" | + "INC" | + "INS" | + "INSB" | + "INSD" | + "INSW" | + "INT" | + "INTO" | + "INVD" | + "INVLPG" | + "IRET" | + "JA" | + "JAE" | + "JB" | + "JBE" | + "JC" | + "JCXZ" | + "JE" | + "JECXZ" | + "JG" | + "JGE" | + "JL" | + "JLE" | + "JMP" | + "JNA" | + "JNAE" | + "JNB" | + "JNBE" | + "JNC" | + "JNE" | + "JNG" | + "JNGE" | + "JNL" | + "JNLE" | + "JNO" | + "JNP" | + "JNS" | + "JNZ" | + "JO" | + "JP" | + "JPE" | + "JPO" | + "JS" | + "JZ" | + "LAHF" | + "LAR" | + "LDMXCSR" | + "LDS" | + "LEA" | + "LEAVE" | + "LES" | + "LFS" | + "LGDT" | + "LGS" | + "LIDT" | + "LLDT" | + "LMSW" | + "LOCK" | + "LODS" | + "LODSB" | + "LODSD" | + "LODSW" | + "LOOP" | + "LOOPE" | + "LOOPNE" | + "LOOPNZ" | + "LOOPZ" | + "LSL" | + "LSS" | + "LTR" | + "MASKMOVQ" | + "MAXPS" | + "MAXSS" | + "MINPS" | + "MINSS" | + "MOV" | + "MOVAPS" | + "MOVD" | + "MOVHLPS" | + "MOVHPS" | + "MOVLHPS" | + "MOVLPS" | + "MOVMSKPS" | + "MOVNTPS" | + "MOVNTQ" | + "MOVQ" | + "MOVS" | + "MOVSB" | + "MOVSD" | + "MOVSS" | + "MOVSW" | + "MOVSX" | + "MOVUPS" | + "MOVZX" | + "MUL" | + "MULPS" | + "MULSS" | + "NEG" | + "NOP" | + "NOT" | + "OR" | + "ORPS" | + "OUT" | + "OUTS" | + "OUTSB" | + "OUTSD" | + "OUTSW" | + "PACKSSDW" | + "PACKSSWB" | + "PACKUSWB" | + "PADDB" | + "PADDD" | + "PADDSB" | + "PADDSW" | + "PADDUSB" | + "PADDUSW" | + "PADDW" | + "PAND" | + "PANDN" | + "PAVGB" | + "PAVGW" | + "PCMPEQB" | + "PCMPEQD" | + "PCMPEQW" | + "PCMPGTB" | + "PCMPGTD" | + "PCMPGTW" | + "PEXTRW" | + "PINSRW" | + "PMADDWD" | + "PMAXSW" | + "PMAXUB" | + "PMINSW" | + "PMINUB" | + "PMOVMSKB" | + "PMULHUW" | + "PMULHW" | + "PMULLW" | + "POP" | + "POPA" | + "POPAD" | + "POPAW" | + "POPF" | + "POPFD" | + "POPFW" | + "POR" | + "PREFETCH" | + "PSADBW" | + "PSHUFW" | + "PSLLD" | + "PSLLQ" | + "PSLLW" | + "PSRAD" | + "PSRAW" | + "PSRLD" | + "PSRLQ" | + "PSRLW" | + "PSUBB" | + "PSUBD" | + "PSUBSB" | + "PSUBSW" | + "PSUBUSB" | + "PSUBUSW" | + "PSUBW" | + "PUNPCKHBW" | + "PUNPCKHDQ" | + "PUNPCKHWD" | + "PUNPCKLBW" | + "PUNPCKLDQ" | + "PUNPCKLWD" | + "PUSH" | + "PUSHA" | + "PUSHAD" | + "PUSHAW" | + "PUSHF" | + "PUSHFD" | + "PUSHFW" | + "PXOR" | + "RCL" | + "RCR" | + "RDMSR" | + "RDPMC" | + "RDTSC" | + "REP" | + "REPE" | + "REPNE" | + "REPNZ" | + "REPZ" | + "RET" | + "RETF" | + "RETN" | + "ROL" | + "ROR" | + "RSM" | + "SAHF" | + "SAL" | + "SAR" | + "SBB" | + "SCAS" | + "SCASB" | + "SCASD" | + "SCASW" | + "SETA" | + "SETAE" | + "SETB" | + "SETBE" | + "SETC" | + "SETE" | + "SETG" | + "SETGE" | + "SETL" | + "SETLE" | + "SETNA" | + "SETNAE" | + "SETNB" | + "SETNBE" | + "SETNC" | + "SETNE" | + "SETNG" | + "SETNGE" | + "SETNL" | + "SETNLE" | + "SETNO" | + "SETNP" | + "SETNS" | + "SETNZ" | + "SETO" | + "SETP" | + "SETPE" | + "SETPO" | + "SETS" | + "SETZ" | + "SFENCE" | + "SGDT" | + "SHL" | + "SHLD" | + "SHR" | + "SHRD" | + "SHUFPS" | + "SIDT" | + "SLDT" | + "SMSW" | + "SQRTPS" | + "SQRTSS" | + "STC" | + "STD" | + "STI" | + "STMXCSR" | + "STOS" | + "STOSB" | + "STOSD" | + "STOSW" | + "STR" | + "SUB" | + "SUBPS" | + "SUBSS" | + "SYSENTER" | + "SYSEXIT" | + "TEST" | + "UB2" | + "UCOMISS" | + "UNPCKHPS" | + "UNPCKLPS" | + "WAIT" | + "WBINVD" | + "VERR" | + "VERW" | + "WRMSR" | + "XADD" | + "XCHG" | + "XLAT" | + "XLATB" | + "XOR" | + "XORPS" { addToken(Token.RESERVED_WORD); } + +} + + { + + {LineTerminator} { addNullToken(); return firstToken; } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character Literals. */ + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + + /* Labels. */ + {Label} { addToken(Token.PREPROCESSOR); } + + ^%({Letter}|{Digit})* { addToken(Token.FUNCTION); } + + /* Comment Literals. */ + {CommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + {Identifier} { addToken(Token.IDENTIFIER); } + . { addToken(Token.IDENTIFIER); } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java new file mode 100644 index 0000000..dc4e562 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java @@ -0,0 +1,1866 @@ +/* The following code was generated by JFlex 1.4.1 on 2/1/08 1:33 PM */ + +/* + * 12/06/2004 + * + * AssemblerX86TokenMaker.java - An object that can take a chunk of text and + * return a linked list of tokens representing X86 assembler. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class takes plain text and returns tokens representing x86 + * assembler.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated AssemblerX86TokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.2 + * + */ + +public class AssemblerX86TokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * 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, 1 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\10\1\7\1\0\1\10\23\0\1\10\1\14\1\4\2\0"+ + "\1\13\1\14\1\5\2\0\1\12\1\12\1\3\1\12\1\15\1\12"+ + "\1\27\1\16\1\21\1\24\1\25\1\26\1\20\1\23\1\17\1\2"+ + "\1\11\1\6\1\14\1\14\1\14\1\50\1\0\1\30\1\33\1\40"+ + "\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36\1\31\1\55"+ + "\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46\1\61\1\52"+ + "\1\54\1\60\1\53\1\3\1\0\1\3\1\14\1\57\1\0\1\30"+ + "\1\33\1\40\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36"+ + "\1\31\1\55\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46"+ + "\1\61\1\52\1\54\1\60\1\53\1\0\1\14\1\0\1\14\uff81\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 = + "\2\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\10\32\1\1\11\1\1\1\12\5\13\2\1\1\14"+ + "\1\15\25\0\16\1\2\16\23\1\1\13\11\1\1\16"+ + "\14\1\2\16\7\1\1\16\10\1\1\13\4\1\1\11"+ + "\3\1\1\16\1\1\1\11\15\1\1\13\1\12\13\1"+ + "\1\16\42\1\31\0\1\12\11\0\20\1\1\13\1\12"+ + "\14\1\2\13\3\1\1\13\4\1\1\12\6\1\1\13"+ + "\3\1\1\13\5\1\1\12\5\1\1\13\4\1\1\12"+ + "\1\1\1\13\2\1\1\13\10\1\1\13\4\1\1\13"+ + "\4\1\1\13\5\1\1\12\3\1\3\13\24\1\1\13"+ + "\37\1\1\13\3\1\1\13\3\1\1\0\1\12\10\0"+ + "\1\12\17\0\3\1\1\13\11\1\1\13\14\1\2\13"+ + "\1\1\1\17\1\13\3\1\2\12\10\1\1\12\7\1"+ + "\1\12\1\13\12\1\1\12\15\1\1\13\5\1\2\13"+ + "\1\1\1\13\14\1\1\13\3\1\1\13\4\1\1\0"+ + "\1\12\3\0\1\12\5\0\1\12\5\0\16\1\1\12"+ + "\5\1\1\12\16\1\1\12\1\1\1\13\4\1\1\13"+ + "\1\1\1\13\4\1\7\0\1\12\7\1\2\12\10\1"+ + "\1\0\1\12\2\0\1\12\1\0\4\1\1\12\1\1"+ + "\3\0\2\1\2\0\1\1\1\12\2\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[668]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\u015e"+ + "\0\144\0\u0190\0\144\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a"+ + "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a"+ + "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa"+ + "\0\u05dc\0\u060e\0\u0640\0\u0672\0\u06a4\0\u06d6\0\u0708\0\u0708"+ + "\0\u073a\0\u076c\0\u079e\0\u0352\0\u07d0\0\u0802\0\u0834\0\144"+ + "\0\144\0\u0866\0\u0898\0\u08ca\0\u08fc\0\u092e\0\u0960\0\u0992"+ + "\0\u09c4\0\u09f6\0\u0a28\0\u0a5a\0\u0a8c\0\u0abe\0\u0af0\0\u0b22"+ + "\0\u0b54\0\u0b86\0\u0bb8\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2"+ + "\0\u0ce4\0\u0d16\0\u0d48\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42"+ + "\0\u0e74\0\u0ea6\0\u0ed8\0\u0f0a\0\u0f3c\0\u0352\0\u0f6e\0\u0fa0"+ + "\0\u0fd2\0\u1004\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130"+ + "\0\u1162\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u12c0"+ + "\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e\0\u1450"+ + "\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c\0\u15ae\0\u15e0"+ + "\0\u1612\0\u1644\0\u1676\0\u16a8\0\u16da\0\u170c\0\u173e\0\u1770"+ + "\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a\0\u189c\0\u18ce\0\u1900"+ + "\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa\0\u1a2c\0\u1a5e\0\u1a90"+ + "\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a\0\u1bbc\0\u1bee\0\u0352"+ + "\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u186a\0\u1d1a\0\u1d4c"+ + "\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa\0\u1edc"+ + "\0\u1f0e\0\u1f40\0\u1f72\0\u1fa4\0\u1fd6\0\u2008\0\u203a\0\u206c"+ + "\0\u209e\0\u20d0\0\u2102\0\u2134\0\u2166\0\u2198\0\u21ca\0\u21fc"+ + "\0\u222e\0\u2260\0\u2292\0\u22c4\0\u22f6\0\u2328\0\u235a\0\u238c"+ + "\0\u23be\0\u23f0\0\u2422\0\u2454\0\u2486\0\u24b8\0\u24ea\0\u251c"+ + "\0\u254e\0\u2580\0\u25b2\0\u25e4\0\u2616\0\u2648\0\u267a\0\u26ac"+ + "\0\u26de\0\u2710\0\u2742\0\u2774\0\u27a6\0\u27d8\0\u280a\0\u283c"+ + "\0\u286e\0\u07d0\0\u28a0\0\u28d2\0\u2904\0\u2936\0\u2968\0\u299a"+ + "\0\u29cc\0\u29fe\0\u2a30\0\u2a62\0\u2a94\0\u2ac6\0\u2af8\0\u2b2a"+ + "\0\u2b5c\0\u2b8e\0\u2bc0\0\u2bf2\0\u2c24\0\u2c56\0\u2c88\0\u2cba"+ + "\0\u2cec\0\u2d1e\0\u2d50\0\u2d82\0\144\0\u2db4\0\u2de6\0\u2e18"+ + "\0\u2e4a\0\u2e7c\0\u2eae\0\u2ee0\0\u2f12\0\u2f44\0\u2f76\0\u2fa8"+ + "\0\u2fda\0\u300c\0\u303e\0\u3070\0\u30a2\0\u30d4\0\u3106\0\u3138"+ + "\0\u316a\0\u319c\0\u31ce\0\u3200\0\u3232\0\u3264\0\u3296\0\u0352"+ + "\0\u32c8\0\u32fa\0\u332c\0\u335e\0\u3390\0\u33c2\0\u33f4\0\u3426"+ + "\0\u3458\0\u348a\0\u34bc\0\u34ee\0\u3520\0\u3552\0\u3584\0\u35b6"+ + "\0\u35e8\0\u361a\0\u364c\0\u367e\0\u36b0\0\u36e2\0\u3714\0\u3746"+ + "\0\u3778\0\u37aa\0\u37dc\0\u380e\0\u3840\0\u3872\0\u38a4\0\u38d6"+ + "\0\u3908\0\u393a\0\u396c\0\u399e\0\u39d0\0\u3a02\0\u3a34\0\u3a66"+ + "\0\u3a98\0\u3aca\0\u3afc\0\u3b2e\0\u3b60\0\u3b92\0\u3bc4\0\u3bf6"+ + "\0\u3c28\0\u3c5a\0\u3c8c\0\u3cbe\0\u3cf0\0\u3d22\0\u3d54\0\u3d86"+ + "\0\u3db8\0\u3dea\0\u3e1c\0\u3e4e\0\u3e80\0\u3eb2\0\u3ee4\0\u3f16"+ + "\0\u3f48\0\u3f7a\0\u3fac\0\u3fde\0\u4010\0\u36e2\0\u4042\0\u4074"+ + "\0\u40a6\0\u40d8\0\u410a\0\u413c\0\u416e\0\u41a0\0\u41d2\0\u4204"+ + "\0\u4236\0\u4268\0\u429a\0\u42cc\0\u42fe\0\u4330\0\u4362\0\u4394"+ + "\0\u43c6\0\u43f8\0\u442a\0\u445c\0\u448e\0\u44c0\0\u44f2\0\u4524"+ + "\0\u4556\0\u4588\0\u45ba\0\u45ec\0\u461e\0\u3b92\0\u4650\0\u4682"+ + "\0\u46b4\0\u361a\0\u46e6\0\u4718\0\u474a\0\u477c\0\u47ae\0\u47e0"+ + "\0\u4812\0\u4844\0\u4876\0\u48a8\0\u48da\0\u490c\0\u493e\0\u4970"+ + "\0\u49a2\0\u49d4\0\u4a06\0\u4a38\0\u4a6a\0\u4a9c\0\u4ace\0\u4b00"+ + "\0\u4b32\0\u4b64\0\u4b96\0\u4bc8\0\u4bfa\0\u4c2c\0\u4c5e\0\u4c90"+ + "\0\u4cc2\0\u4cf4\0\u4d26\0\u4d58\0\u4d8a\0\u4dbc\0\u410a\0\u4dee"+ + "\0\u4e20\0\u4e52\0\u4e84\0\u4eb6\0\u4ee8\0\u4f1a\0\u4f4c\0\u4f7e"+ + "\0\u4fb0\0\u4fe2\0\u5014\0\u5046\0\u5078\0\u50aa\0\u50dc\0\u510e"+ + "\0\u5140\0\u5172\0\u51a4\0\u51d6\0\u5208\0\u523a\0\u526c\0\u529e"+ + "\0\u52d0\0\u5302\0\u5334\0\u5366\0\u5398\0\u53ca\0\u53fc\0\u542e"+ + "\0\u5460\0\u5492\0\u54c4\0\u54f6\0\u5528\0\u555a\0\u558c\0\u55be"+ + "\0\u55f0\0\u5622\0\u55f0\0\u5654\0\u5686\0\u56b8\0\u56ea\0\u571c"+ + "\0\u574e\0\u5780\0\u57b2\0\u4d58\0\u57e4\0\u076c\0\u5816\0\u5848"+ + "\0\u587a\0\u58ac\0\u0352\0\u58de\0\u5910\0\u5942\0\u5974\0\u59a6"+ + "\0\u1f40\0\u59d8\0\u5a0a\0\u5a3c\0\u5a6e\0\u5aa0\0\u5ad2\0\u5b04"+ + "\0\u5b36\0\u5b68\0\u5b9a\0\u5bcc\0\u5bfe\0\u5c30\0\u5c62\0\u5c94"+ + "\0\u5cc6\0\u5cf8\0\u5d2a\0\u5d5c\0\u5d8e\0\u5dc0\0\u5df2\0\u5e24"+ + "\0\u5e56\0\u5e88\0\u5eba\0\u5eec\0\u5f1e\0\u5f50\0\u5f82\0\u5fb4"+ + "\0\u5fe6\0\u6018\0\u604a\0\u607c\0\u60ae\0\u60e0\0\u6112\0\u6144"+ + "\0\u6176\0\u61a8\0\u5460\0\u0834\0\u61da\0\u620c\0\u623e\0\u6270"+ + "\0\u62a2\0\u62d4\0\u6306\0\u6338\0\u636a\0\u639c\0\u63ce\0\u6400"+ + "\0\u6432\0\u6464\0\u6496\0\u64c8\0\u64fa\0\u652c\0\u655e\0\u6590"+ + "\0\u65c2\0\u65f4\0\u6626\0\u6658\0\u668a\0\u66bc\0\u66ee\0\u6720"+ + "\0\u6752\0\u6784\0\u67b6\0\u67e8\0\u681a\0\u684c\0\u687e\0\u68b0"+ + "\0\u68e2\0\u6914\0\u6946\0\u6978\0\u69aa\0\u69dc\0\u6a0e\0\u6a40"+ + "\0\u6a72\0\u6aa4\0\u6ad6\0\u6b08\0\u6b3a\0\u6b6c\0\u6b9e\0\u6bd0"+ + "\0\u6c02\0\u6c34\0\u6c66\0\u4236\0\u6c98\0\u6cca\0\u65f4\0\u6cfc"+ + "\0\u6d2e\0\u6d60\0\u6d92\0\u6dc4\0\u6df6\0\u6e28\0\u6e5a\0\u5a6e"+ + "\0\u6e8c\0\u6ebe\0\u6ef0\0\u6f22\0\u6f54\0\u6f86\0\u6fb8\0\u6fea"+ + "\0\u701c\0\u704e\0\u7080\0\u70b2\0\u70e4\0\u7116\0\u7148\0\u717a"+ + "\0\u61da\0\u71ac\0\u71de\0\u7210\0\u7242\0\u1194\0\u7274\0\u72a6"+ + "\0\u72d8\0\u730a\0\u733c\0\u736e\0\u73a0\0\u73d2\0\u7404\0\u7436"+ + "\0\u7468\0\u749a\0\u74cc\0\u74fe\0\u7530\0\u7562\0\u7594\0\u587a"+ + "\0\u75c6\0\u75f8\0\u762a\0\u765c\0\u768e\0\u76c0\0\u76f2\0\u7724"+ + "\0\u7756\0\u7788\0\u77ba\0\u77ec\0\u781e\0\u7850\0\u7882\0\u4ee8"+ + "\0\u78b4\0\u78e6\0\u7918\0\u794a\0\u797c\0\u79ae\0\u79e0\0\u7a12"+ + "\0\u7a44\0\u7a76\0\u7aa8\0\u7ada\0\u7b0c\0\u7b3e\0\u7b70\0\u7ba2"+ + "\0\u6d60\0\u7bd4\0\u7c06\0\u7c38"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[668]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11"+ + "\1\12\1\3\3\13\1\14\4\5\1\15\5\5\1\16"+ + "\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+ + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\3"+ + "\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\24"+ + "\1\45\1\3\1\4\1\5\1\3\1\6\1\7\1\10"+ + "\1\11\1\12\1\3\1\13\1\46\1\13\1\14\4\5"+ + "\1\15\5\5\1\16\1\17\1\20\1\21\1\22\1\23"+ + "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\35\1\3\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\24\1\45\62\0\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\51"+ + "\5\24\2\52\1\24\1\52\1\24\1\53\1\24\1\54"+ + "\1\55\1\54\1\24\1\56\4\24\1\47\1\52\1\24"+ + "\1\54\1\24\1\57\4\24\1\47\1\24\1\5\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\5\1\24"+ + "\5\5\20\24\1\47\11\24\4\6\1\60\55\6\5\7"+ + "\1\61\54\7\7\10\1\0\52\10\10\0\1\12\67\0"+ + "\1\62\1\63\1\64\1\65\2\0\1\65\2\64\1\0"+ + "\1\66\1\67\1\0\1\70\1\71\1\72\1\73\1\74"+ + "\1\75\1\0\1\76\1\77\1\100\1\101\1\102\1\103"+ + "\2\0\1\104\1\0\1\105\1\106\4\0\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\107\3\24\1\110\1\111\1\24\1\112\1\113\1\114"+ + "\2\24\1\115\1\116\1\117\1\24\1\47\3\24\1\120"+ + "\1\121\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\1\122\5\24\1\123\3\24\1\124"+ + "\1\125\1\126\1\24\1\127\2\24\1\130\2\24\1\131"+ + "\1\132\4\24\1\47\3\24\1\126\5\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\133\1\134\2\24\1\135\1\136\1\24\1\137\1\24"+ + "\1\140\1\141\1\24\1\142\1\134\1\24\1\143\1\47"+ + "\1\144\3\24\1\145\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\146\13\24"+ + "\1\147\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\126\6\24"+ + "\2\126\4\24\1\150\1\24\1\151\2\24\1\152\1\153"+ + "\2\24\1\47\3\24\1\126\3\24\1\154\1\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\155\1\24\1\156\2\157\1\160\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\161\1\162\1\24\1\163\3\24"+ + "\1\164\1\165\1\24\1\166\1\167\4\24\1\47\3\24"+ + "\1\170\1\171\1\172\2\24\1\173\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\126\5\24\1\174\1\134\1\175"+ + "\1\176\1\24\1\177\1\24\1\126\1\200\1\24\1\43"+ + "\1\24\1\201\1\202\1\203\1\204\1\47\1\134\1\205"+ + "\2\24\1\145\1\206\1\24\1\207\1\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\210\5\24\1\211\1\212\1\126\1\213\1\214\2\24"+ + "\1\126\1\24\1\215\1\216\5\24\1\47\1\24\1\217"+ + "\1\24\1\126\1\220\3\24\1\221\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\1\122\3\24"+ + "\1\222\1\24\1\123\7\24\1\223\11\24\1\224\1\225"+ + "\1\47\10\24\1\226\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\12\24\1\227\2\126\1\230"+ + "\1\231\1\232\1\24\1\126\1\24\1\233\1\230\1\24"+ + "\1\230\1\234\1\235\1\230\1\47\1\24\1\236\1\24"+ + "\1\126\1\24\1\230\3\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\237\4\24"+ + "\1\240\3\24\1\241\6\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24"+ + "\1\242\1\243\1\244\1\245\7\24\1\246\2\24\1\47"+ + "\1\24\1\205\5\24\1\247\1\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\250"+ + "\1\251\1\24\1\252\2\24\1\253\1\254\3\24\1\255"+ + "\1\47\4\24\1\256\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\15\24\1\257\3\24"+ + "\1\260\1\261\2\24\1\262\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\3\24\1\263\1\264\5\24\1\265\1\266\1\24\1\267"+ + "\1\270\2\24\1\271\1\272\1\273\1\274\1\275\1\276"+ + "\1\277\1\300\1\301\1\47\1\24\1\302\1\24\1\303"+ + "\1\304\2\24\1\305\1\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\306\2\24"+ + "\1\307\2\24\1\126\1\24\1\310\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\12\24\1\311\1\24\1\312\1\313\1\314\4\24"+ + "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\316\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\317\1\320\6\24\1\321"+ + "\1\322\6\24\1\47\4\24\1\323\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\324\10\24\1\325\3\24\1\326\1\327\1\24\1\47"+ + "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\1\24\1\205"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\6\24\1\330\2\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\331\12\24\1\47\11\24\1\0\2\46\13\0"+ + "\32\46\1\0\11\46\3\47\1\0\3\47\2\0\1\47"+ + "\2\0\1\47\1\0\45\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\54\3\24\1\54"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\54\12\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\332\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\3\24\1\333\5\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54"+ + "\5\24\2\52\1\24\1\52\1\24\1\54\1\24\3\54"+ + "\6\24\1\47\1\52\1\24\1\54\6\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\54\25\24\1\47\11\24\17\0\1\334\71\0\1\335"+ + "\51\0\1\336\61\0\1\337\73\0\1\340\60\0\1\341"+ + "\14\0\1\342\1\0\1\343\46\0\1\344\2\0\1\345"+ + "\52\0\1\346\4\0\1\347\55\0\1\350\2\0\1\351"+ + "\6\0\1\352\10\0\1\353\31\0\1\354\65\0\1\341"+ + "\4\0\1\355\6\0\1\356\2\0\1\343\46\0\1\357"+ + "\4\0\1\360\50\0\1\361\10\0\1\362\61\0\1\363"+ + "\55\0\1\364\11\0\1\343\61\0\1\365\55\0\1\366"+ + "\46\0\1\367\63\0\1\370\57\0\1\341\1\371\6\0"+ + "\1\372\14\0\1\373\43\0\1\374\1\0\1\375\13\0"+ + "\1\376\4\0\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\16\24\1\377\3\24\1\u0100\1\24"+ + "\1\u0101\1\u0102\4\24\1\47\1\u0103\7\24\1\u0104\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0105\3\24\1\u0106\3\24\1\u0107\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\3\24\1\u0108\5\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\12\24\1\u0109\1\u010a\1\u010b\1\24\1\u010c\11\24\1\u010d"+ + "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u010e"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\u010f\11\24\1\54\13\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u0110\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u0111\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\u0112"+ + "\1\u0113\2\24\1\u0114\3\24\1\u0115\4\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\23\24\1\142\6\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\u0116\10\24\1\u0117\3\24\1\u0118\1\u0119\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\2\24\1\u0110\27\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\3\24\1\u0110\26\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\54"+ + "\6\24\1\54\2\24\1\54\5\24\1\47\4\24\1\54"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\27\24\1\u011a\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u011b\25\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u011c"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\22\24\1\54\1\24\1\u011d"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\24\24\1\u011e\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\14\24\1\u011f\1\u0120\1\54\13\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\24\24\1\146\5\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\23\24\1\u0121\6\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0122"+ + "\6\24\1\54\3\24\1\u0123\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\54\5\24\1\54\10\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\22\24\1\u0124\1\u0125\1\u0126\5\24\1\47\1\24\1\u0127"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\21\24\1\54\10\24\1\47\4\24\1\u0128"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\54\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\54\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\54"+ + "\2\24\1\146\5\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\213"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\54\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\1\u0129\10\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\54\12\24\1\54\1\47\1\24\1\u012a\7\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\30\24\1\u012b\1\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\54"+ + "\2\24\2\54\7\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u012c"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u012d\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\u012e\5\24\1\u012f\6\24\1\u0130"+ + "\1\u0131\3\24\1\u0132\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\4\24\1\54\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\54\2\24"+ + "\1\54\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\u0133\21\24"+ + "\1\u0134\3\24\1\47\4\24\1\u0135\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\3\24\1\126\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\u0136\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\126\25\24\1\47\3\24"+ + "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\126\22\24\1\126\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\14\24\1\u0137\15\24\1\47\3\24"+ + "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\27\24\1\126\2\24\1\47\3\24"+ + "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\24\24\1\u0138\1\24\1\u0139\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\u013a\21\24\1\u013b\1\u013c"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\143"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\230\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u013d\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\54"+ + "\1\u011f\1\24\1\54\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ + "\1\u013e\2\24\1\u013e\4\24\1\u013f\4\24\1\u0140\1\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\7\24"+ + "\1\154\1\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0141\3\24\1\u0142\3\24"+ + "\1\47\1\u0143\10\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\12\24\1\u0126\17\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\1\126\1\24\2\126\1\24\5\126\1\u0144"+ + "\3\24\1\u0145\3\24\1\54\1\u0126\1\54\2\24\1\54"+ + "\2\24\1\47\4\24\1\u0128\4\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\146"+ + "\5\24\1\47\1\u0146\1\24\1\u0147\6\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ + "\1\u0148\14\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0149\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\315\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\u014a\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u014b\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\30\24\1\u014c\1\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\13\24\1\u011b\2\24\1\u014d\7\24"+ + "\1\u014e\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\22\24\1\54\1\24"+ + "\1\54\1\24\1\143\1\54\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\126"+ + "\2\24\2\126\1\24\1\126\20\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\u014f\5\24\1\47\4\24\1\u0150\4\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\5\24\1\54\3\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\52"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u0151\15\24\1\54"+ + "\1\u0152\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0153\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\u0154\13\24\1\u0155\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\143\25\24\1\47\1\u0110"+ + "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0156\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\31\24\1\u0157\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0158\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\54\6\24\1\54\4\24"+ + "\1\u0159\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\1\126\1\24\2\126"+ + "\1\24\5\126\20\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\54"+ + "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u015a\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\10\24\1\u015b\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\230\25\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ + "\1\u0103\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\115\17\24\1\47\1\54"+ + "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\54\14\24\1\u015c\4\24\1\54"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u012c\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\7\24\1\154\1\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\2\24\1\126\2\24\4\126\21\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\146\10\24\1\47\3\24\1\u015d\5\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\26\24\1\u015e\3\24\1\47\4\24\1\u015f\4\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u0160\25\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u0161"+ + "\12\24\1\146\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0162"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u0163\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\27\24\1\u0164\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0165\1\u0166\3\24\1\u0167\3\24\1\47\10\24"+ + "\1\u0168\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24"+ + "\1\u0110\4\24\1\u0169\1\u016a\1\24\1\u016b\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\u013a\23\24\1\u011b\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\3\24\1\54\26\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u016c\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u016d"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u016e\22\24\1\u016f"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0170"+ + "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\u0171\3\24\1\u0172\7\24\1\u0173"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\15\24\1\143\1\u0110\5\24"+ + "\1\u0174\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0175\5\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\13\24\1\u0176\5\24\1\u0177\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\21\24\1\u0178\3\24\1\u0179\4\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\u017a\7\24\1\u017b\3\24"+ + "\1\u017c\1\u017d\1\u017e\1\24\1\47\5\24\1\u017f\3\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\u0180\1\143\6\24\1\u0181\6\24\1\47"+ + "\4\24\1\u0182\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\16\24\1\u0161\13\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u0183\7\24\1\u0184\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\21\24\1\u0185\1\u0186\1\57\3\24\1\u0187"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\146\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\317\1\u0176\5\24\1\u0188\1\u0189"+ + "\1\24\1\u018a\1\u018b\4\24\1\47\4\24\1\u018c\4\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\22\24\1\u018d\7\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\u018e\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\311\10\24"+ + "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\156\3\24"+ + "\1\u018f\2\24\1\u0190\1\u0191\3\24\1\u0192\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\u0193\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\u0194\16\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u0195"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\u0196\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0137\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\27\24\1\u015e"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u0197\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0110\3\24\1\47\4\24\1\u0135"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u0198\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\16\24\1\u0199\13\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u0176"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\12\24\1\u019a\17\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\14\24\1\u019b\15\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\16\24\1\u019c\13\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u019d\1\u019e\7\24"+ + "\1\47\3\24\1\u019f\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ + "\1\u01a0\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\25\24\1\u019f\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\u015b\16\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01a1"+ + "\15\24\1\u01a2\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\16\24\1\u01a3\13\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\2\24\1\54\6\24"+ + "\20\0\1\365\60\0\1\u01a4\62\0\1\u01a5\61\0\1\u01a5"+ + "\2\0\1\365\60\0\1\u01a6\70\0\1\u01a7\67\0\1\u01a8"+ + "\62\0\1\u01a9\56\0\1\u01aa\63\0\1\365\64\0\1\u01ab"+ + "\41\0\1\u01ac\76\0\1\u01ad\56\0\1\u01ae\67\0\1\u01af"+ + "\64\0\1\u01b0\56\0\1\365\75\0\1\365\33\0\1\u01b1"+ + "\66\0\1\101\66\0\1\u01b2\1\u01b3\62\0\1\u01b4\54\0"+ + "\1\u01b5\41\0\1\u01b6\11\0\1\u01b7\6\0\1\372\75\0"+ + "\1\u01b0\51\0\1\u01b8\51\0\1\u01b9\72\0\1\u01ba\61\0"+ + "\1\u01bb\50\0\1\357\102\0\1\365\53\0\1\u01bc\54\0"+ + "\1\u01bd\73\0\1\365\5\0\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u01be\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\20\24\1\u01bf\11\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\u01c0\5\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24"+ + "\1\u01c1\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0110\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\1\u01c2\10\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\31\24\1\u01c3\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0110\3\24"+ + "\1\u0137\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ + "\1\u01c4\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u01c5\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\u01c6\5\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01c7"+ + "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\30\24\1\u01c8\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\u01c9\1\u01c7\16\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\15\24\1\u01c0\14\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\u01ca\25\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\u01cb\7\24"+ + "\1\u01cc\6\24\1\u01cb\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c5"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\13\24\1\u01cd\16\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\1\u0103\10\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24"+ + "\1\u010f\15\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01ce\25\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\24\24\1\u01cf\5\24\1\47\3\24"+ + "\1\u01d0\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\10\24\1\u01d1\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u01d0\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01d2"+ + "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d3\10\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\54\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24"+ + "\1\237\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\11\24"+ + "\1\u0110\2\24\1\143\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\143\20\24\1\u01d4\4\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24"+ + "\1\54\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\u01d5\12\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\31\24\1\225\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\10\24\1\u01d6\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d7\10\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\12\24\1\u01d5\5\24\1\54\11\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\4\24\1\u01d8\25\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u01d9\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24"+ + "\1\u0131\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\3\24\1\u01da\5\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\14\24\1\u0127\15\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\57\17\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0176\4\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\21\24\1\u0110\10\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\17\24\1\u01db\12\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u01dc\5\24\1\u01dd\1\u0110\3\24\1\47\2\24\1\54"+ + "\6\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\13\24\1\u01de\16\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\15\24\1\230\6\24\1\230\1\24\1\230\3\24\1\47"+ + "\1\24\1\230\3\24\1\230\3\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u01df"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\54\3\24\1\54"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\4\24\1\232\4\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\21\24\1\232\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\142\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e0\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\u0110\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\4\24\1\u0110\14\24\1\u01e1\5\24\1\u01e2\2\24"+ + "\1\47\4\24\1\u0110\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\142\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\u013f\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\u013d\1\u01e3\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\26\24\1\u01e4\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0110"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\24\24\1\54\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u01e5\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\31\24\1\u01d4\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0155\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\51\5\24\2\52\1\24"+ + "\1\52\1\24\1\54\1\24\3\54\1\24\1\56\4\24"+ + "\1\47\1\52\1\24\1\54\6\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\4\24\1\u01e6\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\22\24\1\u01e7\7\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\u01e8\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u01e9\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u01ea"+ + "\12\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\143\14\24\1\u01eb"+ + "\4\24\1\u01ec\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u01ed"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u019f\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u01ee\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u0176\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u01ef"+ + "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u01f0\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u015a\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u01f1\2\24\1\47\4\24\1\u01f2\4\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\143\14\24\1\u01f3\10\24\1\47\3\24\1\u01f4"+ + "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\10\24\1\u0142\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\u01f5\14\24\1\u01f6\4\24\1\u01f7\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\26\24\1\u01f0\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24"+ + "\1\u016f\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\u01f8\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\16\24\1\u01f9\13\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\12\24\1\u015a\17\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u01fa\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\14\24"+ + "\1\143\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01fb\25\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\26\24\1\u01fc\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\u0103\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u01fd\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01fe\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0110\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\u0110\5\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\u01ff\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ + "\1\54\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\15\24\1\54\6\24\1\54\1\24\1\115"+ + "\3\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0200"+ + "\1\24\1\u0201\14\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\54"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\13\24\1\u0202\7\24\1\u0203"+ + "\1\54\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e2\7\24"+ + "\1\u0204\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\15\24\1\u0110\6\24"+ + "\1\u0205\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0206\5\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\1\122\5\24\1\123\12\24\1\u0110"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u0207"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\u0208\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\23\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\4\24\1\u0209\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u0173\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u020a\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\12\24\1\u020b\17\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u020c"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\1\54\3\24\1\u020d\6\24"+ + "\1\u020e\3\24\1\u020f\2\24\1\213\7\24\1\47\2\24"+ + "\1\54\6\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\26\24\1\57\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\26\24\1\120\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24"+ + "\1\u0210\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\u0211\17\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\54\12\24\1\u020f\1\24"+ + "\2\213\7\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0212\4\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\u0213\14\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\146\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u0214\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\54\10\24"+ + "\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\23\24\1\u0216\6\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0217\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\10\24\1\u0213\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a"+ + "\13\24\1\u0218\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0180"+ + "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\311\4\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u020c\1\24\1\u0219\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\23\24\1\u021a\6\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u021b\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u0217"+ + "\4\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\30\24\1\u011b"+ + "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\u021c\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u01d6\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0178\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a"+ + "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\14\24\1\54\15\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u021d\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\u020c\16\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\u021e"+ + "\26\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\15\24\1\u021f\14\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\u0220\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u0221\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u01db"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\u01e9\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0222\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\1\54\10\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\25\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\20\24\1\u0223\11\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\u0137\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\u01d4\1\u0224\1\u0225\4\24\1\u0226\2\24\1\54\1\u0227"+ + "\2\24\1\u01d4\1\24\1\47\2\24\1\u0214\1\24\1\u0228"+ + "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\27\24\1\u0229\2\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\27\24\1\u022a\2\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\54\13\24\1\47\1\24\1\54\7\24\20\0\1\365"+ + "\2\0\1\365\60\0\1\365\71\0\1\u022b\60\0\1\365"+ + "\74\0\1\u022c\56\0\1\u022d\50\0\1\u022e\76\0\1\376"+ + "\51\0\1\u022f\61\0\1\u0230\42\0\1\365\2\0\1\365"+ + "\11\0\1\365\1\0\1\365\4\0\1\u0231\1\u0232\1\0"+ + "\1\u0233\61\0\1\101\4\0\1\365\53\0\1\365\51\0"+ + "\1\u0234\3\0\1\u022e\56\0\1\365\63\0\1\u01b0\4\0"+ + "\1\u0235\45\0\1\u0236\70\0\1\u0237\45\0\1\365\103\0"+ + "\1\u0238\61\0\1\u0239\56\0\1\u023a\50\0\1\u01b2\67\0"+ + "\1\u01b0\53\0\1\u023b\65\0\1\u01a7\24\0\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ + "\1\u01ef\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\u023c\6\24"+ + "\1\u023d\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\15\24\1\54\3\24"+ + "\1\u01c2\2\24\1\54\3\24\1\u023e\1\24\1\47\1\24"+ + "\1\54\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\25\24\1\54\4\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\15\24\1\54\14\24\1\47\1\24\1\54\7\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\17\24\1\u023f\12\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\u0240\17\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\16\24\1\213\13\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\213\14\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\54\5\24\1\47\1\24\1\54\3\24"+ + "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\31\24\1\213\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\54\5\24\1\47\1\24\1\54\7\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0241\12\24\1\47\1\u0242\10\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\23\24"+ + "\1\u0243\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0244\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0245\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\u0246\5\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\213\6\24\1\u0247\1\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\4\24\1\u0248\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\213\1\u0249"+ + "\15\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\u024a\4\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\13\24\1\u0110\16\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\26\24\1\u024b\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ + "\5\24\1\u01dd\4\24\1\47\2\24\1\54\6\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\15\24\1\54\6\24\1\54\5\24\1\47\1\24\1\54"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\u0135\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\12\24\1\u01e5\17\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ + "\12\24\1\47\2\24\1\54\6\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\1\u024c\1\u01db"+ + "\5\24\1\u01db\22\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u0162"+ + "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u024d\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\31\24\1\u0110\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\u024e\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ + "\1\u0110\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\26\24\1\u0110\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\17\24\1\u024f\12\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\20\24"+ + "\1\u0110\11\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0250\7\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\50\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u01f0\1\24\1\u01e2\6\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\54\4\24\1\115\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ + "\1\u01d5\1\u0251\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u01d6"+ + "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\u0252\4\24\1\47"+ + "\3\24\1\311\5\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\7\24\1\u01e9"+ + "\1\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\115\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\143\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u024f"+ + "\3\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\54"+ + "\3\24\1\54\2\24\1\54\5\24\1\47\1\24\1\54"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\u0253\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0254\5\24\1\u0255\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0256\5\24\1\u0257\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u0258\14\24\1\u0259\10\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u01e5\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u025a"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\17\24\1\u025b\12\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\u025c\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u025d\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\230\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\24\24\1\u0205\5\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\30\24\1\u0244\1\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24"+ + "\1\u025e\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u013d\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\u019b\25\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\20\24\1\u0103\11\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24"+ + "\1\u025f\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\u01e2\12\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\25\24\1\u025f\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u01f1\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\20\24\1\u0260"+ + "\11\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\1\54\31\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\4\24\1\u0261\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24"+ + "\1\54\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0262\21\24"+ + "\1\257\4\24\1\47\1\257\10\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0164"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u0263\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\13\24\1\u01d6\16\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\22\24\1\u0264\7\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54"+ + "\11\24\1\u020c\13\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\3\24\1\54\5\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u020c\22\24\1\u020c"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\10\24\1\u0265"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\21\24\1\u0177\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u020f\1\24\2\213\7\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ + "\1\u0266\14\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ + "\1\u020c\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\10\24\1\u0266\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0267"+ + "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0268"+ + "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\u01d5\17\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u0110\25\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\10\24\1\u0176\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\4\24\1\u0269\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\143\7\24\1\u01d4\15\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\143\6\24\1\u01d4\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ + "\1\54\3\24\1\54\2\24\1\54\5\24\1\47\1\24"+ + "\1\54\1\24\1\54\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u026a\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\21\24\1\u026b\10\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\25\24\1\u026c\4\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ + "\1\u026c\16\24\1\47\11\24\30\0\1\365\61\0\1\341"+ + "\14\0\1\101\7\0\1\u026d\47\0\1\354\54\0\1\365"+ + "\53\0\1\u01b0\76\0\1\101\51\0\1\101\7\0\1\u026e"+ + "\47\0\1\365\6\0\1\357\10\0\1\365\50\0\1\u026f"+ + "\63\0\1\u0270\62\0\1\u0271\64\0\1\365\46\0\1\u0272"+ + "\63\0\1\u0273\53\0\1\u0274\60\0\1\361\72\0\1\u022f"+ + "\20\0\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\21\24\1\u0275\10\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0276\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c2"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u0277\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0103\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\5\24\1\u0278\3\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u0278"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\u0279\4\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\20\24\1\u027a\11\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\1\24\1\u0176\7\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u027b"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\30\24\1\213\1\24\1\47"+ + "\1\24\1\54\7\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\15\24\1\u0110\14\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\14\24\1\u027c\15\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\11\24\1\u01db\20\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u027d"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\25\24\1\u01fe\4\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\25\24\1\u01e5\4\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ + "\1\u015e\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0139\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\14\24\1\u027e\15\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\3\24\1\u027f\26\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\3\24"+ + "\1\u01d4\26\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0280\26\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\3\24\1\u01f1\26\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\21\24\1\u0254\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u0256\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\u0281\16\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\1\u0110\10\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u01e5\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\5\24\1\172\3\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\24\24\1\u0282\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\27\24\1\u0110\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\2\u01d4\15\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ + "\6\24\1\54\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\146"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\143\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\15\24\1\52\1\24\1\54\5\24\1\u0283"+ + "\2\24\1\54\1\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\146"+ + "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u0209\25\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\23\24\1\u0284\6\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\143\25\24\1\47\5\24\1\54\3\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\20\24\1\u01d4\11\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u0285"+ + "\12\24\1\47\11\24\30\0\1\u0286\100\0\1\u0287\55\0"+ + "\1\u0287\64\0\1\u0288\56\0\1\u0289\67\0\1\365\54\0"+ + "\1\u028a\55\0\1\u028b\21\0\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\24\24\1\213\5\24"+ + "\1\47\1\24\1\u0247\7\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24"+ + "\1\u0247\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0191\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\26\24\1\u028c\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ + "\2\u028d\15\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\20\24\1\u0247\11\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\u01e2\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24\1\u0110"+ + "\4\24\1\u0205\1\u016a\1\24\1\u028e\2\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\1\u0222\10\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u020d"+ + "\25\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u020d\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\23\24\1\u028f\6\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0290\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\52"+ + "\1\24\1\54\10\24\1\54\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\10\24\1\216\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\6\24"+ + "\1\u0291\2\24\40\0\1\u0292\66\0\1\365\62\0\1\u01b2"+ + "\60\0\1\101\7\0\1\u0293\60\0\1\u0294\5\0\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0295\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\213"+ + "\6\24\1\216\5\24\1\47\1\24\1\u0176\7\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\u013d\5\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\1\24\1\u01e9\7\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\13\24\1\u0296\16\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\6\24\1\u0110\2\24\34\0"+ + "\1\u0297\55\0\1\u0298\104\0\1\365\6\0\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\3\24\1\u01e5\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0299\2\24"+ + "\1\47\11\24\41\0\1\u029a\60\0\1\u029b\51\0\1\341"+ + "\65\0\1\u029c\66\0\1\365\20\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[31850]; + 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; + } + + + /* 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; + + /* 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 = + "\2\0\1\11\5\1\1\11\1\1\1\11\44\1\2\11"+ + "\25\0\225\1\31\0\1\11\11\0\245\1\1\0\1\1"+ + "\10\0\1\1\17\0\155\1\1\0\1\1\3\0\1\1"+ + "\5\0\1\1\5\0\61\1\7\0\22\1\1\0\1\1"+ + "\2\0\1\1\1\0\6\1\3\0\2\1\2\0\2\1"+ + "\2\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[668]; + 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 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[]; + + /** 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; + + /** + * 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; + + /* user code: */ + + + /** + * Constructor. We must have this here as JFLex does not generate a + * no parameter constructor. + */ + public AssemblerX86TokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public AssemblerX86TokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public AssemblerX86TokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 200) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + if (zzMarkedPosL > zzStartRead) { + switch (zzBufferL[zzMarkedPosL-1]) { + case '\n': + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + zzAtBOL = true; + break; + case '\r': + if (zzMarkedPosL < zzEndReadL) + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + else if (zzAtEOF) + zzAtBOL = false; + else { + boolean eof = zzRefill(); + zzMarkedPosL = zzMarkedPos; + zzEndReadL = zzEndRead; + zzBufferL = zzBuffer; + if (eof) + zzAtBOL = false; + else + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + } + break; + default: + zzAtBOL = false; + } + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + if (zzAtBOL) + zzState = ZZ_LEXSTATE[zzLexicalState+1]; + else + zzState = ZZ_LEXSTATE[zzLexicalState]; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 11: + { addToken(Token.RESERVED_WORD); + } + case 16: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 17: break; + case 12: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 18: break; + case 9: + { addToken(Token.FUNCTION); + } + case 19: break; + case 5: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 20: break; + case 14: + { addToken(Token.VARIABLE); + } + case 21: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 22: break; + case 10: + { addToken(Token.PREPROCESSOR); + } + case 23: break; + case 15: + { addToken(Token.DATA_TYPE); + } + case 24: break; + case 4: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 25: break; + case 8: + { addToken(Token.OPERATOR); + } + case 26: break; + case 2: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 27: break; + case 13: + { addToken(Token.LITERAL_CHAR); + } + case 28: break; + case 3: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 29: break; + case 6: + { addNullToken(); return firstToken; + } + case 30: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 669: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex new file mode 100644 index 0000000..eb8ea08 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex @@ -0,0 +1,273 @@ +/* + * 11/18/2009 + * + * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for BBCode. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated BBCodeTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.7 + * + */ +%% + +%public +%class BBCodeTokenMaker +%extends AbstractMarkupTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specific to BBCodeTokenMaker; this signals that the user has + * ended a line with an unclosed tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -1; + + /** + * Whether closing markup tags are automatically completed for BBCode. + */ + private static boolean completeCloseTags = true; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public BBCodeTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Sets whether markup close tags should be completed. The default value + * for BBCode is true. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + /** + * Returns null since BBCode has no comments. + * + * @return null always. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case INTERNAL_INTAG: + state = INTAG; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) +Identifier = ([^ \t\f\n\[]+) +InTagIdentifier = ([^ \t\f\n\[\]\/\=]+) +Tag = ("b"|"i"|"u"|"s"|"size"|"color"|"center"|"quote"|"url"|"img"|"ul"|"li"|"ol"|"youtube"|"gvideo") + +%state INTAG + +%% + + { + {Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + "[" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } + "[/" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } + {LineTerminator} { addNullToken(); return firstToken; } + <> { addNullToken(); return firstToken; } +} + + { + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } + {Tag} { addToken(Token.MARKUP_TAG_NAME); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "/]" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + "]" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + . { addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java new file mode 100644 index 0000000..0e39985 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java @@ -0,0 +1,730 @@ +/* The following code was generated by JFlex 1.4.1 on 11/18/09 4:41 PM */ + +/* + * 11/18/2009 + * + * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for BBCode. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated BBCodeTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.7 + * + */ + +public class BBCodeTokenMaker extends AbstractMarkupTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INTAG = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\16\0\1\27\15\0"+ + "\1\30\35\0\1\3\1\0\1\4\4\0\1\5\1\13\1\26\1\12"+ + "\1\0\1\23\1\0\1\6\2\0\1\15\1\22\1\17\1\14\1\0"+ + "\1\21\1\16\1\10\1\20\1\7\1\25\2\0\1\24\1\11\uff85\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 = + "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\4\10\6\5\1\11\1\12\1\4\23\5"; + + private static int [] zzUnpackAction() { + int [] result = new int[41]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\31\0\62\0\113\0\144\0\175\0\226\0\144"+ + "\0\144\0\226\0\257\0\310\0\341\0\372\0\u0113\0\u012c"+ + "\0\u0145\0\u015e\0\u0177\0\u0190\0\144\0\144\0\u01a9\0\u01c2"+ + "\0\u01db\0\u01f4\0\u020d\0\u0226\0\u023f\0\u0258\0\u0271\0\u028a"+ + "\0\u02a3\0\u02bc\0\u02d5\0\u02ee\0\u0307\0\u0320\0\u0339\0\u0352"+ + "\0\u036b"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[41]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\25\3\1\7\1\4\1\0"+ + "\1\10\1\11\1\12\1\13\1\14\1\15\2\7\1\16"+ + "\1\17\1\20\3\7\1\21\1\7\1\22\1\23\2\7"+ + "\1\24\1\25\1\3\3\0\25\3\1\0\1\4\107\0"+ + "\1\26\1\0\1\7\4\0\22\7\2\0\1\7\4\0"+ + "\15\7\1\27\4\7\2\0\1\7\4\0\10\7\1\12"+ + "\1\17\10\7\2\0\1\7\4\0\1\7\1\30\20\7"+ + "\2\0\1\7\4\0\5\7\1\31\1\7\1\32\12\7"+ + "\2\0\1\7\4\0\10\7\1\12\11\7\2\0\1\7"+ + "\4\0\1\7\1\12\20\7\2\0\1\7\4\0\2\7"+ + "\1\33\17\7\2\0\1\7\4\0\20\7\1\34\1\7"+ + "\2\0\1\7\4\0\7\7\1\35\12\7\6\0\1\11"+ + "\24\0\1\7\4\0\16\7\1\12\3\7\2\0\1\7"+ + "\4\0\4\7\1\36\15\7\2\0\1\7\4\0\12\7"+ + "\1\37\7\7\2\0\1\7\4\0\10\7\1\40\11\7"+ + "\2\0\1\7\4\0\7\7\1\41\12\7\2\0\1\7"+ + "\4\0\1\7\1\42\20\7\2\0\1\7\4\0\2\7"+ + "\1\43\17\7\2\0\1\7\4\0\5\7\1\12\14\7"+ + "\2\0\1\7\4\0\13\7\1\44\6\7\2\0\1\7"+ + "\4\0\7\7\1\45\12\7\2\0\1\7\4\0\13\7"+ + "\1\36\6\7\2\0\1\7\4\0\21\7\1\46\2\0"+ + "\1\7\4\0\13\7\1\47\6\7\2\0\1\7\4\0"+ + "\5\7\1\45\14\7\2\0\1\7\4\0\11\7\1\12"+ + "\10\7\2\0\1\7\4\0\5\7\1\50\14\7\2\0"+ + "\1\7\4\0\2\7\1\51\17\7\2\0\1\7\4\0"+ + "\7\7\1\12\12\7\2\0\1\7\4\0\1\36\21\7"+ + "\2\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[900]; + 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; + } + + + /* 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; + + /* 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 = + "\2\0\2\1\1\11\2\1\2\11\13\1\2\11\23\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[41]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to BBCodeTokenMaker; this signals that the user has + * ended a line with an unclosed tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -1; + + /** + * Whether closing markup tags are automatically completed for BBCode. + */ + private static boolean completeCloseTags = true; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public BBCodeTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Sets whether markup close tags should be completed. The default value + * for BBCode is true. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + /** + * Returns null since BBCode has no comments. + * + * @return null always. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case INTERNAL_INTAG: + state = INTAG; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public BBCodeTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public BBCodeTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 80) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { addToken(Token.IDENTIFIER); + } + case 11: break; + case 9: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 12: break; + case 2: + { addToken(Token.WHITESPACE); + } + case 13: break; + case 10: + { addToken(Token.OPERATOR); + } + case 14: break; + case 8: + { addToken(Token.MARKUP_TAG_NAME); + } + case 15: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 16: break; + case 6: + { addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ + } + case 17: break; + case 5: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 18: break; + case 3: + { addNullToken(); return firstToken; + } + case 19: break; + case 7: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 20: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 42: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 43: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex new file mode 100644 index 0000000..12b0711 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex @@ -0,0 +1,685 @@ +/* + * 11/19/2004 + * + * CPlusPlusTokenMaker.java - An object that can take a chunk of text and + * return a linked list of tokens representing it in C++. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * A parser for the C++ programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CPlusPlusTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.6 + * + */ +%% + +%public +%class CPlusPlusTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CPlusPlusTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.COMMENT_EOL: + state = EOL_COMMENT; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = YYINITIAL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +LetterOrUnderscore = ({Letter}|"_") +Digit = [0-9] +HexDigit = {Digit}|[A-Fa-f] +OctalDigit = [0-7] +Exponent = [eE][+-]?{Digit}+ + +PreprocessorWord = define|elif|else|endif|error|if|ifdef|ifndef|include|line|pragma|undef + +Trigraph = ("??="|"??("|"??)"|"??/"|"??'"|"??<"|"??>"|"??!"|"??-") + +OctEscape1 = ([\\]{OctalDigit}) +OctEscape2 = ([\\]{OctalDigit}{OctalDigit}) +OctEscape3 = ([\\][0-3]{OctalDigit}{OctalDigit}) +OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) +HexEscape = ([\\][xX]{HexDigit}{HexDigit}) + +AnyChrChr = ([^\'\n\\]) +Escape = ([\\]([abfnrtv\'\"\?\\0e])) +UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) +CharLiteral = ({UnclosedCharLiteral}[\']) +ErrorUnclosedCharLiteral = ([\'][^\'\n]*) +ErrorCharLiteral = (([\'][\'])|{ErrorUnclosedCharLiteral}[\']) +AnyStrChr = ([^\"\n\\]) +FalseTrigraph = (("?"(("?")*)[^\=\(\)\/\'\<\>\!\-\\\?\"\n])|("?"[\=\(\)\/\'\<\>\!\-])) +StringLiteral = ([\"]((((("?")*)({Escape}|{OctEscape}|{HexEscape}|{Trigraph}))|{FalseTrigraph}|{AnyStrChr})*)(("?")*)[\"]) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + + +LineTerminator = \n +WhiteSpace = [ \t\f] + +MLCBegin = "/*" +MLCEnd = "*/" +LineCommentBegin = "//" + +NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) +IntegerLiteral = ({Digit}+{Exponent}?{NonFloatSuffix}?) +HexLiteral = ("0"[xX]{HexDigit}+{NonFloatSuffix}?) +FloatLiteral = ((({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*)){Exponent}?[fFlL]?) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) + +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") +Identifier = ({LetterOrUnderscore}({LetterOrUnderscore}|{Digit}|[$])*) +ErrorIdentifier = ({NonSeparator}+) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state MLC +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "auto" | + "break" | + "case" | + "catch" | + "class" | + "const" | + "const_cast" | + "continue" | + "default" | + "delete" | + "do" | + "dynamic_cast" | + "else" | + "enum" | + "explicit" | + "extern" | + "for" | + "friend" | + "goto" | + "if" | + "inline" | + "mutable" | + "namespace" | + "new" | + "operator" | + "private" | + "protected" | + "public" | + "register" | + "reinterpret_cast" | + "sizeof" | + "static" | + "static_cast" | + "struct" | + "switch" | + "template" | + "this" | + "throw" | + "try" | + "typedef" | + "typeid" | + "typename" | + "union" | + "using" | + "virtual" | + "volatile" | + "while" { addToken(Token.RESERVED_WORD); } + + "return" { addToken(Token.RESERVED_WORD_2); } + + /* Boolean literals. */ + "true" | + "false" | + + /* Data types. */ + "char" | + "div_t" | + "double" | + "float" | + "int" | + "ldiv_t" | + "long" | + "short" | + "signed" | + "size_t" | + "unsigned" | + "void" | + "wchar_t" { addToken(Token.DATA_TYPE); } + + /* Standard functions */ + "abort" | + "abs" | + "acos" | + "asctime" | + "asin" | + "assert" | + "atan2" | + "atan" | + "atexit" | + "atof" | + "atoi" | + "atol" | + "bsearch" | + "btowc" | + "calloc" | + "ceil" | + "clearerr" | + "clock" | + "cosh" | + "cos" | + "ctime" | + "difftime" | + "div" | + "errno" | + "exit" | + "exp" | + "fabs" | + "fclose" | + "feof" | + "ferror" | + "fflush" | + "fgetc" | + "fgetpos" | + "fgetwc" | + "fgets" | + "fgetws" | + "floor" | + "fmod" | + "fopen" | + "fprintf" | + "fputc" | + "fputs" | + "fputwc" | + "fputws" | + "fread" | + "free" | + "freopen" | + "frexp" | + "fscanf" | + "fseek" | + "fsetpos" | + "ftell" | + "fwprintf" | + "fwrite" | + "fwscanf" | + "getchar" | + "getc" | + "getenv" | + "gets" | + "getwc" | + "getwchar" | + "gmtime" | + "isalnum" | + "isalpha" | + "iscntrl" | + "isdigit" | + "isgraph" | + "islower" | + "isprint" | + "ispunct" | + "isspace" | + "isupper" | + "isxdigit" | + "labs" | + "ldexp" | + "ldiv" | + "localeconv" | + "localtime" | + "log10" | + "log" | + "longjmp" | + "malloc" | + "mblen" | + "mbrlen" | + "mbrtowc" | + "mbsinit" | + "mbsrtowcs" | + "mbstowcs" | + "mbtowc" | + "memchr" | + "memcmp" | + "memcpy" | + "memmove" | + "memset" | + "mktime" | + "modf" | + "offsetof" | + "perror" | + "pow" | + "printf" | + "putchar" | + "putc" | + "puts" | + "putwc" | + "putwchar" | + "qsort" | + "raise" | + "rand" | + "realloc" | + "remove" | + "rename" | + "rewind" | + "scanf" | + "setbuf" | + "setjmp" | + "setlocale" | + "setvbuf" | + "setvbuf" | + "signal" | + "sinh" | + "sin" | + "sprintf" | + "sqrt" | + "srand" | + "sscanf" | + "strcat" | + "strchr" | + "strcmp" | + "strcmp" | + "strcoll" | + "strcpy" | + "strcspn" | + "strerror" | + "strftime" | + "strlen" | + "strncat" | + "strncmp" | + "strncpy" | + "strpbrk" | + "strrchr" | + "strspn" | + "strstr" | + "strtod" | + "strtok" | + "strtol" | + "strtoul" | + "strxfrm" | + "swprintf" | + "swscanf" | + "system" | + "tanh" | + "tan" | + "time" | + "tmpfile" | + "tmpnam" | + "tolower" | + "toupper" | + "ungetc" | + "ungetwc" | + "va_arg" | + "va_end" | + "va_start" | + "vfprintf" | + "vfwprintf" | + "vprintf" | + "vsprintf" | + "vswprintf" | + "vwprintf" | + "wcrtomb" | + "wcscat" | + "wcschr" | + "wcscmp" | + "wcscoll" | + "wcscpy" | + "wcscspn" | + "wcsftime" | + "wcslen" | + "wcsncat" | + "wcsncmp" | + "wcsncpy" | + "wcspbrk" | + "wcsrchr" | + "wcsrtombs" | + "wcsspn" | + "wcsstr" | + "wcstod" | + "wcstok" | + "wcstol" | + "wcstombs" | + "wcstoul" | + "wcsxfrm" | + "wctob" | + "wctomb" | + "wmemchr" | + "wmemcmp" | + "wmemcpy" | + "wmemmove" | + "wmemset" | + "wprintf" | + "wscanf" { addToken(Token.FUNCTION); } + + /* Standard-defined macros. */ + "__DATE__" | + "__TIME__" | + "__FILE__" | + "__LINE__" | + "__STDC__" { addToken(Token.PREPROCESSOR); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* Preprocessor directives */ + "#"{WhiteSpace}*{PreprocessorWord} { addToken(Token.PREPROCESSOR); } + + /* String/Character Literals. */ + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } + {ErrorUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + + /* Comment Literals. */ + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + /* Separators. */ + "(" | + ")" | + "[" | + "]" | + "{" | + "}" { addToken(Token.SEPARATOR); } + + /* Operators. */ + {Trigraph} | + "=" | + "+" | + "-" | + "*" | + "/" | + "%" | + "~" | + "<" | + ">" | + "<<" | + ">>" | + "==" | + "+=" | + "-=" | + "*=" | + "/=" | + "%=" | + "&=" | + "|=" | + "^=" | + ">=" | + "<=" | + "!=" | + ">>=" | + "<<=" | + "^" | + "&" | + "&&" | + "|" | + "||" | + "?" | + ":" | + "," | + "!" | + "++" | + "--" | + "." | + "," { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + /* Some lines will end in '\' to wrap an expression. */ + "\\" { addToken(Token.IDENTIFIER); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Other punctuation, we'll highlight it as "identifiers." */ + ";" { addToken(Token.IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + { + [^hwf\\\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.COMMENT_EOL); + return firstToken; + } + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java new file mode 100644 index 0000000..84646d0 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java @@ -0,0 +1,2350 @@ +/* The following code was generated by JFlex 1.4.1 on 1/24/17 10:44 PM */ + +/* + * 11/19/2004 + * + * CPlusPlusTokenMaker.java - An object that can take a chunk of text and + * return a linked list of tokens representing it in C++. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexCTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * A parser for the C++ programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CPlusPlusTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.6 + * + */ + +public class CPlusPlusTokenMaker extends AbstractJFlexCTokenMaker { + + /** 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; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44"+ + "\1\57\1\60\1\65\1\113\1\33\1\31\1\31\1\51\1\7\1\64"+ + "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70"+ + "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102"+ + "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110"+ + "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\115\1\2"+ + "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13"+ + "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16"+ + "\1\67\1\22\1\45\1\71\1\74\1\73\1\75\1\112\1\114\1\112"+ + "\1\64\uff81\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 = + "\3\0\1\1\2\2\1\3\1\4\17\2\2\4\1\5"+ + "\1\4\1\6\3\4\1\2\1\7\1\10\2\2\1\3"+ + "\1\11\1\4\2\1\1\2\1\4\3\2\2\4\2\12"+ + "\1\13\5\12\1\14\1\15\2\12\1\2\2\16\2\3"+ + "\1\17\2\2\1\20\22\2\1\20\56\2\1\0\1\21"+ + "\1\22\2\23\1\24\1\6\2\10\1\25\10\2\1\16"+ + "\6\1\1\0\14\2\2\0\1\26\4\0\1\27\2\0"+ + "\5\2\1\3\1\0\1\3\1\16\1\17\3\2\1\30"+ + "\6\2\1\30\23\2\1\31\16\2\1\30\1\2\1\30"+ + "\40\2\1\30\15\2\1\6\1\32\1\6\3\23\1\6"+ + "\2\10\1\33\7\2\1\34\4\1\1\35\4\1\6\0"+ + "\14\2\10\0\5\2\1\17\1\0\37\2\1\31\45\2"+ + "\1\30\2\2\1\30\7\2\1\6\1\10\7\2\2\34"+ + "\7\1\4\0\1\35\4\0\11\2\2\0\1\36\2\0"+ + "\1\37\44\2\1\20\14\2\1\34\1\35\3\1\7\0"+ + "\10\2\4\0\11\2\1\40\11\2\2\1\1\35\3\0"+ + "\12\2\2\0\1\35\4\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[583]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ + "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ + "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ + "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\u0924\0\352"+ + "\0\u079e\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0af8\0\u079e"+ + "\0\u0b46\0\u079e\0\u079e\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc"+ + "\0\u0d1a\0\u0d68\0\u079e\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee"+ + "\0\u0f3c\0\u079e\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110"+ + "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380"+ + "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ + "\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4\0\u1812\0\u0138"+ + "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82"+ + "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2"+ + "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62"+ + "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2"+ + "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u23f4\0\u2442"+ + "\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616\0\u2664\0\u079e"+ + "\0\u079e\0\u26b2\0\u2700\0\u079e\0\u274e\0\u279c\0\u27ea\0\u079e"+ + "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ + "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca"+ + "\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a"+ + "\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u079e\0\u315c"+ + "\0\u31aa\0\u31f8\0\u3246\0\u079e\0\u3294\0\u32e2\0\u3330\0\u337e"+ + "\0\u33cc\0\u341a\0\u3468\0\u34b6\0\u3504\0\u1074\0\u3552\0\u1074"+ + "\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2"+ + "\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32"+ + "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2"+ + "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u0138\0\u3ec4"+ + "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ + "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ + "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884"+ + "\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6\0\u4af4"+ + "\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8\0\u4d16\0\u4d64"+ + "\0\u0138\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38\0\u4f86"+ + "\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u51a8\0\u079e"+ + "\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u53ca\0\u079e"+ + "\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a"+ + "\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa"+ + "\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a"+ + "\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a"+ + "\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa"+ + "\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a"+ + "\0\u62b8\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da"+ + "\0\u6528\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a"+ + "\0\u6798\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba"+ + "\0\u6a08\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a"+ + "\0\u6c78\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a"+ + "\0\u6ee8\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a"+ + "\0\u7158\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a"+ + "\0\u73c8\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea"+ + "\0\u7638\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a"+ + "\0\u78a8\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca"+ + "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ + "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ + "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ + "\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a"+ + "\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac\0\u86fa"+ + "\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c\0\u896a"+ + "\0\u89b8\0\u43a4\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c"+ + "\0\u8bda\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc"+ + "\0\u8e4a\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c"+ + "\0\u90ba\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc"+ + "\0\u932a\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c"+ + "\0\u959a\0\u95e8\0\u9636\0\u9684\0\u96d2\0\u1074\0\352\0\u9720"+ + "\0\u976e\0\u97bc\0\u980a\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990"+ + "\0\u99de\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u9bb2\0\u368a"+ + "\0\u9c00\0\u9c4e\0\u8748\0\u9c9c\0\u8832\0\u9cea\0\u9d38\0\u9d86"+ + "\0\u9dd4\0\u9e22\0\u9e70\0\u9ebe\0\u9f0c\0\u9f5a\0\u0138\0\u9fa8"+ + "\0\u9ff6\0\ua044\0\ua092\0\ua0e0\0\ua12e\0\ua17c\0\ua1ca\0\ua218"+ + "\0\ua266\0\ua2b4\0\u079e\0\ua302\0\ua350\0\ua39e\0\ua3ec\0\ua43a"+ + "\0\ua488\0\u932a\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e\0\ua65c"+ + "\0\ua6aa\0\ua6f8\0\u0138\0\ua746\0\ua794\0\ua7e2\0\ua830"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[583]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\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\24\1\25\1\26\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\35\1\36\1\31\1\37"+ + "\1\40\1\7\1\5\1\41\1\42\1\43\1\44\1\45"+ + "\1\46\1\31\2\5\1\47\1\5\1\50\1\51\2\4"+ + "\1\32\1\52\1\53\1\31\1\5\1\54\1\53\1\55"+ + "\4\5\2\7\1\5\1\56\10\5\1\32\1\57\1\60"+ + "\1\31\12\61\1\62\30\61\1\63\5\61\1\64\14\61"+ + "\1\65\2\61\1\66\24\61\12\67\1\70\25\67\1\71"+ + "\2\67\1\72\22\67\1\73\2\67\1\74\24\67\7\4"+ + "\1\0\17\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\1\5\1\75\4\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\3\76"+ + "\1\7\1\76\1\7\1\77\1\0\1\76\1\77\3\76"+ + "\1\100\4\76\1\101\4\76\11\0\1\76\1\7\1\76"+ + "\2\0\2\76\1\7\2\0\1\101\1\100\1\102\1\76"+ + "\1\0\3\76\4\0\2\76\1\0\5\76\2\7\12\76"+ + "\13\0\1\53\20\0\1\53\65\0\1\4\6\5\1\0"+ + "\1\5\1\103\1\5\1\104\4\5\1\105\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\2\5"+ + "\1\106\16\5\4\0\1\4\6\5\1\0\4\5\1\107"+ + "\1\110\1\5\1\111\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\3\5\1\112\15\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\113\1\114\2\5\1\115"+ + "\1\116\1\117\1\120\1\121\1\5\1\122\1\123\1\124"+ + "\1\125\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\126\1\0\1\127\20\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\130\1\5\1\131\1\5\1\132\10\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\133\12\5\1\134"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\135\7\5"+ + "\1\136\3\5\1\137\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\140\1\5\1\141\2\5\1\142\1\143"+ + "\1\5\1\144\1\5\1\145\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\146\1\147\1\0\1\150\1\5"+ + "\1\151\5\5\1\152\10\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\153\12\5\1\154\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\2\5\1\155\10\5\1\156\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\157\3\5\1\160"+ + "\2\5\1\161\3\5\1\162\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\163\1\164\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\165\1\5\1\166\10\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\167\5\5"+ + "\1\170\1\171\1\5\1\172\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\173\2\5\1\174\1\175\4\5"+ + "\11\0\1\4\2\5\2\0\1\5\1\176\1\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\177\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\200\6\5\1\175\5\5\1\201\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\202\6\5\1\203\1\5"+ + "\1\204\1\5\1\205\2\5\11\0\1\4\2\5\2\0"+ + "\1\5\1\206\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\5\1\201"+ + "\17\5\33\0\1\207\116\0\1\53\233\0\1\53\1\0"+ + "\1\210\16\0\1\211\44\0\27\212\1\213\3\212\1\214"+ + "\4\212\1\215\2\212\1\0\52\212\30\0\1\53\3\0"+ + "\1\31\111\0\1\53\4\0\1\31\110\0\1\53\6\0"+ + "\1\53\56\0\40\42\1\216\2\42\1\217\1\220\51\42"+ + "\1\4\6\5\1\0\2\5\1\221\1\222\2\5\1\221"+ + "\1\5\1\223\2\5\1\145\1\224\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\225\20\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\226\1\227\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\230"+ + "\1\0\21\5\4\0\3\76\1\7\1\76\1\7\1\77"+ + "\1\0\1\76\1\77\3\76\1\100\4\76\1\101\4\76"+ + "\11\0\1\76\1\7\1\231\2\0\2\76\1\7\2\0"+ + "\1\101\1\100\1\102\1\76\1\0\3\76\4\0\2\76"+ + "\1\0\3\76\1\231\1\76\2\7\12\76\54\0\1\46"+ + "\50\0\1\102\1\0\1\102\33\0\1\102\5\0\1\102"+ + "\26\0\2\102\16\0\7\4\1\0\1\232\1\233\1\4"+ + "\1\234\1\4\1\235\4\4\1\236\1\237\3\4\11\0"+ + "\3\4\2\0\3\4\1\240\1\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4"+ + "\6\5\1\0\1\5\1\241\1\5\1\242\3\5\1\243"+ + "\1\244\3\5\1\245\1\5\1\246\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\247\1\5\1\0\2\5\1\250"+ + "\16\5\4\0\1\4\6\5\1\0\6\5\1\142\2\5"+ + "\1\251\1\5\1\145\2\5\1\252\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\253\1\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\254\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\34\0"+ + "\1\53\62\0\1\53\32\0\1\53\63\0\1\53\1\0"+ + "\12\61\1\0\30\61\1\0\5\61\1\0\14\61\1\0"+ + "\2\61\1\0\24\61\13\0\1\255\53\0\1\256\60\0"+ + "\1\257\152\0\1\260\117\0\1\261\24\0\12\67\1\0"+ + "\25\67\1\0\2\67\1\0\22\67\1\0\2\67\1\0"+ + "\24\67\13\0\1\262\53\0\1\263\26\0\43\264\1\0"+ + "\52\264\67\0\1\265\117\0\1\266\24\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\1\5\1\267\1\0\1\270\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\11\5\1\271\1\5\1\272\3\5"+ + "\1\273\1\5\4\0\7\76\1\0\17\76\11\0\3\76"+ + "\2\0\3\76\2\0\2\76\1\0\1\76\1\0\3\76"+ + "\4\0\2\76\1\0\21\76\4\0\3\76\1\274\1\76"+ + "\1\274\1\76\1\275\17\76\10\0\1\275\1\76\1\274"+ + "\1\76\2\0\2\76\1\274\2\0\2\76\1\0\1\76"+ + "\1\0\3\76\4\0\2\76\1\0\5\76\2\274\12\76"+ + "\4\0\7\76\1\0\12\76\1\276\4\76\11\0\3\76"+ + "\2\0\3\76\2\0\1\276\1\76\1\0\1\76\1\0"+ + "\3\76\4\0\2\76\1\0\21\76\4\0\7\76\1\0"+ + "\5\76\1\276\11\76\11\0\3\76\2\0\3\76\2\0"+ + "\1\76\1\276\1\0\1\76\1\0\3\76\4\0\2\76"+ + "\1\0\21\76\4\0\3\76\1\102\1\76\1\102\1\277"+ + "\1\0\1\76\1\277\1\300\2\76\1\300\11\76\11\0"+ + "\1\76\1\102\1\76\2\0\2\76\1\102\2\0\1\76"+ + "\1\300\1\0\1\300\1\0\3\76\4\0\2\76\1\0"+ + "\5\76\2\102\12\76\4\0\1\4\6\5\1\0\2\5"+ + "\1\301\2\5\1\302\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\2\5\1\303\14\5\11\0\1\4\2\5\2\0"+ + "\1\304\2\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\12\5\1\305\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\306\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\12\5\1\307\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\310\10\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\311\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\312\7\5\1\313\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\314\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\315\1\316"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\317"+ + "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\320"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\321"+ + "\7\5\1\144\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\322\1\5\1\323\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\130\3\5\1\324\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\325\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\326\2\5\1\327"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\330"+ + "\11\5\11\0\1\4\2\5\2\0\1\5\1\331\1\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\332\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\333\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\334\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\6\5\1\142\1\335\3\5\1\145\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\336\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\337\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\340\4\5\1\341\1\342"+ + "\2\5\1\343\1\344\1\345\1\346\1\347\1\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\3\5"+ + "\1\350\15\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\130"+ + "\20\5\4\0\1\4\6\5\1\0\16\5\1\351\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\352\1\5\1\353"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\354"+ + "\4\5\1\355\3\5\1\356\1\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ + "\1\331\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\357\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\360\10\5\1\361\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\4\5\1\362"+ + "\14\5\4\0\1\4\6\5\1\0\11\5\1\144\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\363\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\364\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\326\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\365\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\366\4\5"+ + "\1\367\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\370\2\5\1\142\4\5\1\145\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\371\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\312\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\372\1\373\7\5\1\205"+ + "\1\374\1\375\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\376\1\0\1\377\20\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u0100\1\333\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\2\5\1\u0101\14\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0102\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u0103\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0104\6\5\1\u0105\3\5\1\u0106"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u0107"+ + "\1\5\1\360\10\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\u0108\1\310\10\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u0109\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u010a\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\242\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u010b\2\5\1\u010c\6\5\1\u010d"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010e"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\315"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010f"+ + "\4\5\1\u0110\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\u0111\20\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\1\5\1\u0112\1\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0113\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u0114\2\5\1\u0115\2\5\1\201\5\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\331\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0116\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\u0111\1\5\1\152\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0117\6\5"+ + "\1\u0118\3\5\1\u0119\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u011a\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\164\1\0\21\5\4\0\1\4\6\5\1\0\16\5"+ + "\1\u011b\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\316\16\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u011c\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\u0108\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\324\1\u011d\1\u011e"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\230\1\0\21\5\34\0\10\53\56\0\33\u011f\1\u0120"+ + "\7\u011f\1\0\101\u011f\1\u0121\3\u011f\1\u0120\7\u011f\1\0"+ + "\57\u011f\1\u0122\3\u011f\2\212\1\u011f\1\212\2\u011f\1\212"+ + "\4\u011f\1\212\2\u011f\1\212\3\u011f\1\u0123\4\u011f\1\212"+ + "\1\u0124\1\u0125\1\0\3\212\1\u0124\17\u011f\1\212\4\u011f"+ + "\1\u0125\1\u011f\2\u0124\16\u011f\5\217\1\42\3\217\2\42"+ + "\1\217\1\42\2\217\1\42\4\217\1\42\2\217\1\42"+ + "\3\217\1\42\4\217\2\42\1\u0126\1\0\4\42\17\217"+ + "\1\42\4\217\1\u0126\1\217\2\42\56\217\1\u0127\3\217"+ + "\1\u0128\51\217\1\4\6\5\1\0\13\5\1\145\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\225\20\5\4\0\1\4\6\5\1\0\7\5\1\u0129"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u012a"+ + "\1\5\1\u012b\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\u012c"+ + "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\13\5\1\145\3\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u012d\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u012e\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u012f\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\3\76\4\u0130\1\0"+ + "\3\u0130\6\76\1\u0130\2\76\1\u0130\2\76\11\0\1\76"+ + "\1\u0130\1\76\2\0\1\76\2\u0130\2\0\2\76\1\0"+ + "\1\u0130\1\0\3\76\4\0\2\76\1\0\5\76\2\u0130"+ + "\2\76\2\u0130\5\76\1\u0130\4\0\7\4\1\0\1\4"+ + "\1\u0131\15\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\4\4\1\u0132\1\u0133\1\4\1\u0134"+ + "\7\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\2\4\1\u0135\1\4\1\u0136\12\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\3\4\1\u0137\13\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\4\4\1\u0138\12\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\7\4\1\u0139\7\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\14\0\1\u013a\1\u013b\1\0\1\u013c\1\0\1\u013d"+ + "\4\0\1\u013e\1\u013f\24\0\1\240\45\0\1\4\6\5"+ + "\1\0\16\5\1\u0140\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\u0141\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5"+ + "\1\u0142\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\2\5\1\130\16\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\341\4\5\1\344\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\360\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\13\5\1\u0143\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\u0144\3\5\1\u0145\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0146\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\6\5\1\u0147\1\u0148"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0149"+ + "\1\u014a\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\202\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u014b\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\152\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\21\0\1\u014c\123\0\1\u014d\161\0"+ + "\1\u014e\117\0\1\u014f\41\0\1\u0150\123\0\1\u0151\161\0"+ + "\1\u0152\117\0\1\u0153\24\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\14\5\1\u0154\4\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\14\5\1\u0155\4\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\12\5\1\u0156\6\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\14\5\1\u0157\4\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\13\5\1\u0158\5\5\4\0\3\76\1\274\1\76\1\274"+ + "\1\76\1\0\5\76\1\100\4\76\1\101\4\76\11\0"+ + "\1\76\1\274\1\76\2\0\2\76\1\274\2\0\1\101"+ + "\1\100\1\0\1\76\1\0\3\76\4\0\2\76\1\0"+ + "\5\76\2\274\12\76\7\0\1\274\1\0\1\274\33\0"+ + "\1\274\5\0\1\274\26\0\2\274\16\0\3\76\1\u0159"+ + "\1\76\1\u0159\1\76\1\u015a\17\76\10\0\1\u015a\1\76"+ + "\1\u0159\1\76\2\0\2\76\1\u0159\2\0\2\76\1\0"+ + "\1\76\1\0\3\76\4\0\2\76\1\0\5\76\2\u0159"+ + "\12\76\4\0\1\4\6\5\1\0\14\5\1\u015b\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u015c\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\2\5\1\201\14\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\1\5\1\u015d\4\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\u015e\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u015f\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\16\5\1\130\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\130\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u0160\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0111\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\u0161\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\u0162\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\u0163\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\2\5\1\u0111\14\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\12\5\1\u0164\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\u0165\3\5\1\u015d\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0166\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0167"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0111"+ + "\6\5\1\u0168\3\5\1\333\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\3\5\1\u0169\15\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u016a\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u0114\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u0100\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\u016b\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u016c\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\u0142\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\u0111\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u016d\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\u0111\16\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\u0103\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u016e\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u016f\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u0170\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\10\5\1\u0171\6\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u0172\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u0173\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u0174\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u0175\2\5\1\u0176\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\u0177\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\u0178\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\340\16\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0179\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\3\5\1\u0169\15\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\304"+ + "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\15\5\1\u017a\1\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\u017b\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\6\5\1\u017c\12\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\u017d\11\5\11\0\1\4\2\5\2\0"+ + "\1\u017e\1\u017f\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\7\5\1\u0180"+ + "\11\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\u0111\1\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u0181\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u0182\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\333\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\316\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u015d\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\167\1\201\1\5"+ + "\1\u0183\1\324\1\u0184\1\u0185\1\5\1\u0186\1\u0187\1\u0188"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0189\1\0\3\5\1\u018a\15\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u018b\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0109\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u018c"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u018d"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\242"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u018e"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u018f"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u0190"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\363"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0141"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0191"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0192"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\u0111"+ + "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0193"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0166"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0144"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0194"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0195\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\u0196\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u0197\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\337\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0198\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u0199\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\u019a\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u019b\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u019c\12\5\11\0\1\4\2\5\2\0\1\u019d\2\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u019e\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\u019f\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0111\2\5\1\u01a0\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01a1\20\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\u0111\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\152\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\130\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\3\5\1\u01a2\15\5\4\0\1\4"+ + "\6\5\1\0\2\5\2\u0111\1\5\1\u0111\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u01a3\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u01a4\4\5\1\u0111"+ + "\2\5\1\u01a0\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\1\u01a1\20\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\u01a5\2\5\1\u01a6\4\5\1\375\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\14\5\1\u01a7\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\u01a8\3\5\1\u01a9"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u01aa\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\324\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\230\1\0\21\5\4\0\33\u011f\1\214\7\u011f"+ + "\1\0\102\u011f\3\212\1\u0123\4\212\3\u011f\1\0\57\u011f"+ + "\1\212\25\u011f\1\u0120\5\u011f\1\212\1\u011f\1\0\3\u011f"+ + "\1\212\26\u011f\2\212\16\u011f\33\0\1\u0120\62\0\5\u011f"+ + "\1\u0122\25\u011f\1\u0120\5\u011f\1\u0122\1\u011f\1\0\3\u011f"+ + "\1\u0122\26\u011f\2\u0122\21\u011f\4\u01ab\1\u011f\3\u01ab\6\u011f"+ + "\1\u01ab\2\u011f\1\u01ab\6\u011f\1\214\5\u011f\1\u01ab\1\u011f"+ + "\1\0\2\u011f\2\u01ab\5\u011f\1\u01ab\20\u011f\2\u01ab\2\u011f"+ + "\2\u01ab\5\u011f\1\u01ab\4\u011f\3\217\4\u01ac\1\217\3\u01ac"+ + "\6\217\1\u01ac\2\217\1\u01ac\13\217\1\u0127\1\u01ac\2\217"+ + "\1\u0128\1\217\2\u01ac\5\217\1\u01ac\20\217\2\u01ac\2\217"+ + "\2\u01ac\5\217\1\u01ac\47\217\1\0\52\217\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u01ad\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\337\16\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\u01ae\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\363\4\5\1\u01af\5\5\1\u01b0\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u01b1\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u01b2\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01b3\20\5\4\0\3\76"+ + "\4\u0130\1\0\3\u0130\2\76\1\u01b4\3\76\1\u0130\1\u01b5"+ + "\1\76\1\u0130\2\76\11\0\1\76\1\u0130\1\76\2\0"+ + "\1\76\2\u0130\2\0\1\u01b5\1\u01b4\1\0\1\u0130\1\0"+ + "\3\76\4\0\2\76\1\0\5\76\2\u0130\2\76\2\u0130"+ + "\5\76\1\u0130\4\0\7\4\1\0\2\4\1\235\14\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\1\u01b6\16\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\3\4\1\u01b7\2\4\1\u01b8"+ + "\10\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\7\4\1\u01b9\7\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\1\u01ba\3\4"+ + "\1\u0138\12\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\11\4\1\u01bb\5\4\11\0\3\4"+ + "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ + "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4"+ + "\1\u01b8\12\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\1\u01ba\16\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\14\4\1\u01bc"+ + "\2\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\15\0"+ + "\1\u01bd\120\0\1\u01be\1\u01bf\1\0\1\u01c0\110\0\1\u01c1"+ + "\1\0\1\u01c2\114\0\1\u01c3\116\0\1\u01c4\120\0\1\u01c5"+ + "\76\0\1\4\6\5\1\0\13\5\1\u01c6\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u0111\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\337\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\u01c7\1\5\1\u01c8"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\130"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\133"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01c9"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\201"+ + "\1\5\1\u0183\1\324\1\u0184\1\u01ca\1\5\1\u0186\1\5"+ + "\1\u0188\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u01cb\1\0\3\5\1\u018a\15\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u01cc\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\u01cd\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\10\5\1\u01ce\6\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\310\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\15\0\1\u014d\174\0"+ + "\1\u01cf\50\0\1\u01d0\146\0\1\u01d1\52\0\1\u0151\174\0"+ + "\1\u01d2\50\0\1\u01d3\146\0\1\u01d4\41\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\16\5\1\u01d5\2\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\1\5\1\u01d5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\13\5\1\u01d5\5\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\15\5\1\u01d5\3\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\11\5\1\u01d6\7\5\4\0\3\76\1\u0159\1\76"+ + "\1\u0159\1\76\1\0\2\76\1\300\2\76\1\300\11\76"+ + "\11\0\1\76\1\u0159\1\76\2\0\2\76\1\u0159\2\0"+ + "\1\76\1\300\1\0\1\300\1\0\3\76\4\0\2\76"+ + "\1\0\5\76\2\u0159\12\76\7\0\1\u0159\1\0\1\u0159"+ + "\33\0\1\u0159\5\0\1\u0159\26\0\2\u0159\16\0\1\4"+ + "\6\5\1\0\12\5\1\u01d7\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\310\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\337\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\u0142\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\u01d8\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0111\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u01d9\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\u0198\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0165\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u01da\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\u0111\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\5\1\u0111\17\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\174\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\324\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\u0111\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u01db\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u019c\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0111\2\5\1\u0111\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01dc\20\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\u0111\2\5\1\u0111\1\5\1\174"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\u01dc\20\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0141"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\310"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u01a2"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\u01dd"+ + "\20\5\4\0\1\4\6\5\1\0\14\5\1\u01de\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u01df\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\u01dd\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\u01e0\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u01e1\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u01e2\6\5\1\u01e3"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01e4"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01e5"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5"+ + "\1\u0180\11\5\4\0\1\4\6\5\1\0\5\5\1\u01e6"+ + "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\2\5\1\u0111\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01e7\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\u017f\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\12\5\1\316\4\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\16\5\1\u0169\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u012a\12\5\1\u0103"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\1\5\1\u015d\4\5\1\0"+ + "\10\5\1\u01e8\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u01e9\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\13\5\1\u0114\3\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0165\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\u01ea\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\u01eb\1\5\1\334\2\5\1\u01ec\1\312"+ + "\1\5\1\u0169\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\u0165\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u01ed\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\1\5\1\u01ee\1\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u01ef\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\u01f0\14\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u01f1\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u01f2\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u01f3\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u01f4\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\1\u0141\2\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u01f5"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f6"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01f7"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u01f8"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01f9\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u01fa\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01b3\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\130\1\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\130\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\15\5\1\u01fb\1\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u01fc\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\15\5\1\130\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\316\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u015c\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u01fd\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u01fe\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\u01ff\1\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\u01a0\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\312\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\5\5\1\u0111\13\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u0200\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\312\15\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u01ec\2\5\1\u0169\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\u0165\1\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\1\5\1\u014b\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\u01a2\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u01aa\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u0201\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\3\u011f"+ + "\4\212\1\u011f\3\212\6\u011f\1\212\2\u011f\1\212\6\u011f"+ + "\1\214\5\u011f\1\212\1\u011f\1\0\2\u011f\2\212\5\u011f"+ + "\1\212\20\u011f\2\212\2\u011f\2\212\5\u011f\1\212\4\u011f"+ + "\3\217\4\42\1\217\3\42\6\217\1\42\2\217\1\42"+ + "\13\217\1\u0127\1\42\2\217\1\u0128\1\217\2\42\5\217"+ + "\1\42\20\217\2\42\2\217\2\42\5\217\1\42\4\217"+ + "\1\4\6\5\1\0\12\5\1\u0202\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\253\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0203\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u0204\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u0205\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\5\1\130\17\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\u0111\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\7\76\1\0"+ + "\12\76\1\u0206\4\76\11\0\3\76\2\0\3\76\2\0"+ + "\1\u0206\1\76\1\0\1\76\1\0\3\76\4\0\2\76"+ + "\1\0\21\76\4\0\7\76\1\0\5\76\1\u0206\11\76"+ + "\11\0\3\76\2\0\3\76\2\0\1\76\1\u0206\1\0"+ + "\1\76\1\0\3\76\4\0\2\76\1\0\21\76\4\0"+ + "\7\4\1\0\3\4\1\u01b7\13\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\2\4\1\u0207"+ + "\14\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\1\4\1\u0207\15\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\10\4\1\u0208"+ + "\6\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\1\4\1\u01b7\15\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\5\4\1\u0209"+ + "\11\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\15\4\1\u020a\1\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\16\0\1\u013d\113\0\1\u020b\120\0"+ + "\1\u020c\2\0\1\u020d\116\0\1\u020e\106\0\1\u020f\3\0"+ + "\1\u01c4\122\0\1\u0210\110\0\1\u020d\111\0\1\u020f\131\0"+ + "\1\u0211\71\0\1\4\6\5\1\0\5\5\1\u019d\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u0212\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u01f2\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\u0213\2\5\1\u01db"+ + "\1\u0214\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u01ea\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0215\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u0216\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u0217\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u0218\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\u0219\11\0\1\4\2\5\2\0\1\5\1\u0111"+ + "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\36\0\1\u021a\101\0"+ + "\1\u014d\51\0\1\u01cf\26\0\1\u01d1\1\u021b\4\u01d1\1\u021b"+ + "\17\u01d1\3\u021b\1\u01d1\1\u021b\2\0\2\u021b\1\0\2\u01d1"+ + "\2\0\3\u01d1\1\0\1\u021b\2\u01d1\1\u021b\1\u01d1\1\0"+ + "\1\u021b\1\u01d1\5\u021b\2\u01d1\1\u021b\21\u01d1\1\0\1\u021b"+ + "\34\0\1\u021c\101\0\1\u0151\51\0\1\u01d2\26\0\1\u01d4"+ + "\1\u021d\4\u01d4\1\u021d\17\u01d4\3\u021d\1\u01d4\1\u021d\2\0"+ + "\2\u021d\1\0\2\u01d4\2\0\3\u01d4\1\0\1\u021d\2\u01d4"+ + "\1\u021d\1\u01d4\1\0\1\u021d\1\u01d4\5\u021d\2\u01d4\1\u021d"+ + "\21\u01d4\1\0\1\u021d\2\0\1\4\5\5\1\u021e\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\20\5"+ + "\1\u021e\4\0\1\4\6\5\1\0\5\5\1\u01ed\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u021f\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u0220\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\130\16\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\u0111\2\5\1\u0111"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0165"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0141"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0103"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\312"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\312"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u01f2"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\u0221\1\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\u01da\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0222\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0223\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\164"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0224"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\130"+ + "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u01ec"+ + "\1\312\1\5\1\u0169\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0165"+ + "\1\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\u0114\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\2\5\1\u0111\16\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\130"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0166"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\u0111\4\5"+ + "\1\u0111\4\5\1\u0103\4\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\5\1\u0111\17\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\u01f2\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u01f9\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\16\5\1\u0111\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0225\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0226\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u0227\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0228\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0229\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\u022a\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\1\5\1\u022b\4\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u022c\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u022d\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u0111\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\u01b3\20\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u022e\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\130\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u0165\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\1\u0111\2\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\u022f\20\5\4\0\1\4\6\5\1\0\14\5\1\u0230"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\152"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u0111"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01da"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\7\4\1\0\7\4\1\u0207\7\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\12\4\1\u0231\4\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\16\4\1\u0232\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\17\0\1\u020c\114\0"+ + "\1\u0233\114\0\1\u0233\124\0\1\u0234\106\0\1\u020c\121\0"+ + "\1\u0235\125\0\1\u0236\70\0\1\4\6\5\1\0\5\5"+ + "\1\u0141\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\u01e8\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\u0237\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0238\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\u0111"+ + "\4\5\1\u0111\4\5\1\u0103\3\5\1\137\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\5\1\u0111"+ + "\17\5\4\0\1\4\6\5\1\0\16\5\1\u0219\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\1\5\1\u0111\1\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\36\0\1\u01d1\115\0\1\u01d4\63\0\1\4\1\5\1\u0239"+ + "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u023a\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u01ed\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u0111\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u023b\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u023c\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u0212\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u023d\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u023e\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\316\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u023e\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u0165\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u023f\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\12\5\1\310\4\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u012a\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0240\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\331\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\130\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\7\4\1\0\1\u01b8\16\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\14\4\1\u0207\2\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\23\0\1\u0233\120\0\1\u0241\121\0\1\u0242"+ + "\67\0\1\4\6\5\1\0\16\5\1\310\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\16\5\1\137\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\1\5\1\u0243\4\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\11\5\1\310\5\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u01a4\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u0244\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\130\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u0245\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u01db\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\14\0\1\u020d"+ + "\131\0\1\u0233\71\0\1\4\6\5\1\0\7\5\1\u0246"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01ed"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0247"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\u023a\1\0"+ + "\21\5\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[43134]; + 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; + } + + + /* 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; + + /* 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 = + "\3\0\26\1\1\11\6\1\1\11\6\1\1\11\1\1"+ + "\2\11\7\1\1\11\6\1\1\11\114\1\1\0\2\11"+ + "\2\1\1\11\3\1\1\11\17\1\1\0\14\1\2\0"+ + "\1\11\4\0\1\11\2\0\6\1\1\0\142\1\1\11"+ + "\7\1\1\11\21\1\6\0\14\1\10\0\6\1\1\0"+ + "\142\1\4\0\1\1\4\0\11\1\2\0\1\1\2\0"+ + "\67\1\7\0\10\1\4\0\25\1\1\11\3\0\12\1"+ + "\2\0\5\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[583]; + 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 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CPlusPlusTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.COMMENT_EOL: + state = EOL_COMMENT; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = YYINITIAL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CPlusPlusTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CPlusPlusTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 184) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 29: + { addToken(Token.PREPROCESSOR); + } + case 33: break; + case 7: + { addNullToken(); return firstToken; + } + case 34: break; + case 26: + { addToken(Token.LITERAL_CHAR); + } + case 35: break; + case 22: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 36: break; + case 18: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 37: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 38: break; + case 28: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 39: break; + case 19: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 40: break; + case 27: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 41: break; + case 15: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 42: break; + case 16: + { addToken(Token.RESERVED_WORD); + } + case 43: break; + case 5: + { addToken(Token.SEPARATOR); + } + case 44: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 45: break; + case 12: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.COMMENT_EOL); + return firstToken; + } + case 46: break; + case 13: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 47: break; + case 17: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 48: break; + case 24: + { addToken(Token.FUNCTION); + } + case 49: break; + case 6: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 50: break; + case 8: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 51: break; + case 25: + { addToken(Token.DATA_TYPE); + } + case 52: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 53: break; + case 20: + { addToken(Token.ERROR_CHAR); + } + case 54: break; + case 23: + { /* Skip all escaped chars. */ + } + case 55: break; + case 21: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 56: break; + case 31: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 57: break; + case 30: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 58: break; + case 32: + { addToken(Token.RESERVED_WORD_2); + } + case 59: break; + case 14: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 60: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 61: break; + case 4: + { addToken(Token.OPERATOR); + } + case 62: break; + case 10: + { + } + case 63: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 64: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 584: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 585: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 586: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex new file mode 100644 index 0000000..33ecc99 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex @@ -0,0 +1,558 @@ +/* + * 09/03/2005 + * + * CSSTokenMaker.java - Token maker for CSS 3 files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a CSS 3 file. It's + * written with a few extra internal states so that it can easily be copy + * and pasted into HTML, PHP, and JSP TokenMakres when it is updated.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CSSTokenMaker.java file will contain 2 + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class CSSTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -1; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -2; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether we are highlighting less instead of CSS. + */ + private boolean highlightingLess; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CSSTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_CSS_STRING: + case INTERNAL_CSS_CHAR: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_CSS_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * Returns true since CSS uses curly braces. + * + * @return true always. + */ + public boolean getCurlyBracesDenoteCodeBlocks() { + return true; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.RESERVED_WORD; // Used for CSS keys + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getShouldIndentNextLineAfter(Token t) { + if (t!=null && t.length()==1) { + char ch = t.charAt(0); + return ch=='{' || ch=='('; + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + cssPrevState = YYINITIAL; // Shouldn't be necessary + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = CSS_STRING; + break; + case Token.LITERAL_CHAR: + state = CSS_CHAR_LITERAL; + break; + case Token.COMMENT_MULTILINE: + state = CSS_C_STYLE_COMMENT; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Overridden to accept letters, digits, underscores, and hyphens. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; + } + + + /** + * Toggles whether we're highlighting less instead of just CSS. + * + * @param highlightingLess Whether we're highlighting less. + */ + public void setHighlightingLess(boolean highlightingLess) { + this.highlightingLess = highlightingLess; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Digit = ([0-9]) +Letter = ([A-Za-z]) +LetterOrUnderscore = ({Letter}|[_]) +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + +CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) +CSS_AtRule = ("@"(charset|import|namespace|media|document|page|font-face|keyframes|viewport)) +CSS_Less_Var = ("@"({LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_Id = ("#"{CSS_SelectorPiece}) +CSS_Separator = ([;\(\)\[\]]) +WhiteSpace = ([ \t]+) +MlcStart = ("/*") +MlcEnd = ("*/") + +CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*(:[\w]+)?) +CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) +CSS_Value = ({CSS_ValueChar}*) +CSS_Function = ({CSS_Value}\() +CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) +CSS_Hex = ("#"[0-9a-fA-F]+) +CSS_Number = ({CSS_Digits}|{CSS_Hex}) + +// Less_Nested_Selector includes pseudo-classes for ease of highlighting, even +// though it is not as detailed as standard CSS selector highlighting. +Less_Nested_Selector_With_Pseudo = ({CSS_SelectorPiece}{CSS_PseudoClass}*) +Less_Selector_ParentRef = ("&"{CSS_SelectorPiece}) +Less_LineCommentBegin = "//" + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state CSS_PROPERTY +%state CSS_VALUE +%state CSS_STRING +%state CSS_CHAR_LITERAL +%state CSS_C_STYLE_COMMENT +%state LESS_EOL_COMMENT + +%% + + { + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtRule} { addToken(Token.REGEX); } + {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.REGEX); } + {CSS_Number} { addToken(highlightingLess ? Token.LITERAL_NUMBER_DECIMAL_INT : Token.IDENTIFIER); } + {CSS_Id} { addToken(highlightingLess ? Token.ANNOTATION : Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + "}" { addToken(highlightingLess ? Token.SEPARATOR : Token.IDENTIFIER); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {WhiteSpace} { addToken(Token.WHITESPACE); } + {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + {Less_LineCommentBegin} { + if (highlightingLess) { + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + . { /*System.out.println("yyinitial: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addNullToken(); return firstToken; } +} + + { + {CSS_Property} { addToken(Token.RESERVED_WORD); } + {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } + {Less_Nested_Selector_With_Pseudo} { addToken(highlightingLess ? Token.RESERVED_WORD : Token.IDENTIFIER); } + {Less_Selector_ParentRef} { + if (highlightingLess) { + // Unfortunately, as we're sharing the CSS and Less + // syntax highlighting, we do not color nested selectors + // properly. For uniformity, color this the same as + // CSS_Property + addToken(Token.RESERVED_WORD); + } + else { + addToken(Token.IDENTIFIER); + } + } + "{" { addToken(Token.SEPARATOR); /* helps with auto-closing curlies when editing CSS */ } + "}" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {WhiteSpace} { addToken(Token.WHITESPACE); } + {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + {Less_LineCommentBegin} { + if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {Less_LineCommentBegin} { + // This must be before {CSS_Value} since "//" is a valid CSS value + if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.PREPROCESSOR); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } + {WhiteSpace} { addToken(Token.WHITESPACE); } + {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped chars. */ } + \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + switch (cssPrevState) { + case CSS_PROPERTY: + addEndToken(INTERNAL_CSS_PROPERTY); + break; + case CSS_VALUE: + addEndToken(INTERNAL_CSS_VALUE); + break; + default: // Should be YYINITIAL + addNullToken(); + break; + } + return firstToken; + } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java new file mode 100644 index 0000000..3a58551 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java @@ -0,0 +1,1325 @@ +/* The following code was generated by JFlex 1.4.1 on 9/19/15 11:19 PM */ + +/* + * 09/03/2005 + * + * CSSTokenMaker.java - Token maker for CSS 3 files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a CSS 3 file. It's + * written with a few extra internal states so that it can easily be copy + * and pasted into HTML, PHP, and JSP TokenMakres when it is updated.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CSSTokenMaker.java file will contain 2 + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class CSSTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int CSS_C_STYLE_COMMENT = 5; + public static final int LESS_EOL_COMMENT = 6; + public static final int YYINITIAL = 0; + public static final int CSS_STRING = 3; + public static final int CSS_VALUE = 2; + public static final int CSS_PROPERTY = 1; + public static final int CSS_CHAR_LITERAL = 4; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\41\1\64\25\0\1\41\1\53\1\60\1\37\1\55\1\46"+ + "\1\50\1\61\1\44\1\65\1\5\1\54\1\57\1\4\1\6\1\42"+ + "\12\1\1\7\1\40\1\0\1\54\1\63\1\51\1\35\6\47\24\2"+ + "\1\52\1\43\1\52\1\63\1\3\1\0\1\21\1\34\1\15\1\20"+ + "\1\26\1\23\1\33\1\14\1\16\1\2\1\30\1\17\1\27\1\13"+ + "\1\11\1\25\1\2\1\10\1\22\1\12\1\32\1\31\1\36\1\45"+ + "\1\24\1\2\1\56\1\63\1\62\1\54\uff81\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 = + "\2\0\1\1\4\0\1\2\1\3\2\4\1\5\2\2"+ + "\1\6\1\7\1\2\1\10\1\11\1\1\1\12\1\13"+ + "\1\14\1\15\1\16\1\17\2\20\1\21\3\16\1\22"+ + "\1\23\1\24\1\25\1\26\2\1\2\25\1\27\1\1"+ + "\1\30\1\25\1\31\1\32\1\33\1\34\1\35\1\36"+ + "\1\33\1\37\1\40\5\33\1\41\4\33\1\42\2\0"+ + "\1\3\3\0\1\4\15\0\12\43\1\3\1\44\1\3"+ + "\1\45\1\46\2\0\1\47\1\50\1\51\2\0\1\26"+ + "\3\0\1\26\1\52\1\0\1\34\1\53\33\0\11\43"+ + "\15\0\1\17\16\0\1\17\14\0\11\43\26\0\1\54"+ + "\2\0\1\55\14\0\5\43\1\56\2\43\5\0\1\20"+ + "\31\0\6\43\21\0\3\43\14\0\2\43\7\0\1\43"+ + "\11\0\1\57\3\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[340]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\66\0\154\0\242\0\330\0\u010e\0\u0144\0\u017a"+ + "\0\u01b0\0\u01e6\0\u021c\0\u0252\0\u0288\0\u02be\0\u017a\0\u02f4"+ + "\0\u032a\0\u017a\0\u017a\0\u017a\0\u017a\0\u017a\0\u017a\0\u017a"+ + "\0\u017a\0\u0360\0\u0396\0\u03cc\0\u017a\0\u0402\0\u0438\0\u046e"+ + "\0\u017a\0\u017a\0\u017a\0\u017a\0\u04a4\0\u04da\0\u0510\0\u0402"+ + "\0\u0546\0\u017a\0\u057c\0\u017a\0\u05b2\0\u017a\0\u017a\0\u05e8"+ + "\0\u061e\0\u017a\0\u017a\0\u0654\0\u017a\0\u017a\0\u068a\0\u06c0"+ + "\0\u06f6\0\u072c\0\u0762\0\u017a\0\u0798\0\u07ce\0\u0804\0\u083a"+ + "\0\u017a\0\u0870\0\u08a6\0\u017a\0\u08dc\0\u0912\0\u0948\0\u097e"+ + "\0\u09b4\0\u09ea\0\u0a20\0\u0a56\0\u0a8c\0\u0ac2\0\u0af8\0\u0b2e"+ + "\0\u0b64\0\u0b9a\0\u0bd0\0\u0c06\0\u0c3c\0\u0c72\0\u0ca8\0\u0cde"+ + "\0\u0d14\0\u0d4a\0\u0d80\0\u0db6\0\u0dec\0\u0e22\0\u0e58\0\u0e8e"+ + "\0\u0ec4\0\u0efa\0\u017a\0\u017a\0\u0f30\0\u0f66\0\u0f9c\0\u017a"+ + "\0\u0fd2\0\u1008\0\u103e\0\u017a\0\u1074\0\u10aa\0\u10e0\0\u0546"+ + "\0\u04da\0\u1116\0\u017a\0\u017a\0\u114c\0\u1182\0\u11b8\0\u11ee"+ + "\0\u1224\0\u125a\0\u1290\0\u12c6\0\u12fc\0\u1332\0\u1368\0\u139e"+ + "\0\u13d4\0\u140a\0\u1440\0\u1476\0\u14ac\0\u14e2\0\u1518\0\u154e"+ + "\0\u1584\0\u15ba\0\u15f0\0\u1626\0\u165c\0\u1692\0\u16c8\0\u16fe"+ + "\0\u1734\0\u176a\0\u17a0\0\u17d6\0\u180c\0\u1842\0\u1878\0\u18ae"+ + "\0\u18e4\0\u191a\0\u1950\0\u1986\0\u19bc\0\u19f2\0\u1a28\0\u1a5e"+ + "\0\u1a94\0\u1aca\0\u1b00\0\u1b36\0\u1b6c\0\u1ba2\0\u1bd8\0\u1c0e"+ + "\0\u1c44\0\u1c7a\0\u1cb0\0\u1ce6\0\u1d1c\0\u1d52\0\u1d88\0\u1dbe"+ + "\0\u1df4\0\u1e2a\0\u1e60\0\u1e96\0\u017a\0\u1ecc\0\u1f02\0\u1f38"+ + "\0\u1f6e\0\u1fa4\0\u1fda\0\u2010\0\u2046\0\u207c\0\u20b2\0\u20e8"+ + "\0\u211e\0\u2154\0\u218a\0\u21c0\0\u21f6\0\u222c\0\u2262\0\u2298"+ + "\0\u22ce\0\u2304\0\u233a\0\u2370\0\u23a6\0\u23dc\0\u2412\0\u2448"+ + "\0\u247e\0\u24b4\0\u24ea\0\u2520\0\u2556\0\u258c\0\u25c2\0\u25f8"+ + "\0\u262e\0\u2664\0\u269a\0\u26d0\0\u2706\0\u273c\0\u2772\0\u27a8"+ + "\0\u27de\0\u2814\0\u284a\0\u2880\0\u28b6\0\u28ec\0\u2922\0\u2958"+ + "\0\u298e\0\u29c4\0\u29fa\0\u2a30\0\u2a66\0\u2a9c\0\u2ad2\0\u2b08"+ + "\0\u2b3e\0\u2b74\0\u2baa\0\u2be0\0\u2c16\0\u0c72\0\u2c4c\0\u2c82"+ + "\0\u2cb8\0\u2cee\0\u2d24\0\u2d5a\0\u2d90\0\u2dc6\0\u2dfc\0\u2e32"+ + "\0\u2e68\0\u2e9e\0\u2ed4\0\u2f0a\0\u2f40\0\u2f76\0\u2fac\0\u2fe2"+ + "\0\u3018\0\u304e\0\u3084\0\u30ba\0\u27de\0\u30f0\0\u2880\0\u3126"+ + "\0\u315c\0\u3192\0\u31c8\0\u31fe\0\u3234\0\u326a\0\u32a0\0\u32d6"+ + "\0\u330c\0\u3342\0\u3378\0\u33ae\0\u33e4\0\u341a\0\u3450\0\u3486"+ + "\0\u34bc\0\u34f2\0\u3528\0\u355e\0\u3594\0\u35ca\0\u3600\0\u3636"+ + "\0\u366c\0\u36a2\0\u36d8\0\u370e\0\u3744\0\u377a\0\u37b0\0\u37e6"+ + "\0\u381c\0\u3852\0\u3888\0\u38be\0\u38f4\0\u392a\0\u3960\0\u3996"+ + "\0\u39cc\0\u3a02\0\u3a38\0\u3a6e\0\u3aa4\0\u3ada\0\u3b10\0\u3b46"+ + "\0\u3b7c\0\u3bb2\0\u3be8\0\u3c1e\0\u3c54\0\u3c8a\0\u3cc0\0\u3cf6"+ + "\0\u3d2c\0\u3d62\0\u3d98\0\u3dce\0\u3e04\0\u3e3a\0\u3e70\0\u3ea6"+ + "\0\u017a\0\u3edc\0\u3f12\0\u3f48"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[340]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\10\1\11\2\12\1\13\2\12\1\14\25\12\1\15"+ + "\1\12\1\16\1\17\1\20\1\21\1\10\1\17\1\12"+ + "\1\10\1\12\2\10\1\17\1\10\2\22\1\23\1\24"+ + "\1\25\1\26\1\27\1\22\1\30\1\17\2\31\3\32"+ + "\1\33\1\34\1\35\25\32\1\36\1\32\2\31\1\20"+ + "\1\37\2\31\1\32\1\31\1\32\1\40\5\31\1\41"+ + "\3\31\1\42\1\31\1\43\1\31\1\44\1\45\2\46"+ + "\1\47\1\44\1\24\1\44\25\46\1\50\1\46\1\51"+ + "\1\52\1\20\1\53\1\46\1\54\1\46\1\44\1\46"+ + "\3\44\1\55\3\44\1\24\1\25\1\26\1\42\1\44"+ + "\1\56\1\57\43\60\1\61\14\60\1\62\3\60\1\63"+ + "\1\60\43\64\1\61\15\64\1\65\2\64\1\66\1\64"+ + "\5\67\1\70\6\67\1\71\6\67\1\72\12\67\1\73"+ + "\25\67\1\74\1\67\14\75\1\76\6\75\1\77\12\75"+ + "\1\100\25\75\1\101\1\75\67\0\1\11\4\0\1\11"+ + "\6\0\1\102\1\103\3\0\1\104\2\0\1\105\1\106"+ + "\1\107\16\0\1\104\20\0\4\12\1\0\1\12\1\0"+ + "\25\12\1\0\1\12\6\0\1\12\1\0\1\12\17\0"+ + "\1\110\3\12\1\0\1\12\1\0\25\12\1\0\1\12"+ + "\6\0\1\12\1\0\1\12\25\0\1\111\1\112\1\113"+ + "\1\114\1\115\1\116\1\117\1\0\1\120\1\121\1\122"+ + "\1\0\1\123\2\0\1\124\2\0\1\125\36\0\3\126"+ + "\3\0\3\126\1\127\1\126\1\130\1\131\1\126\1\132"+ + "\2\126\1\133\1\126\1\134\1\126\1\135\1\136\1\137"+ + "\3\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\1\140\5\141\1\0\5\141\1\142\2\141\2\142\1\141"+ + "\1\142\2\141\1\142\5\141\1\142\1\0\1\141\6\0"+ + "\1\141\1\0\1\142\57\0\1\20\31\0\1\143\34\0"+ + "\1\144\24\0\4\32\1\0\1\34\1\145\25\32\1\0"+ + "\1\32\6\0\1\32\1\0\1\32\17\0\1\34\3\32"+ + "\1\0\1\34\1\146\25\32\1\0\1\32\6\0\1\32"+ + "\1\0\1\32\17\0\4\34\1\0\1\34\1\146\25\34"+ + "\1\0\1\34\6\0\1\34\1\0\1\34\20\0\3\147"+ + "\3\0\25\147\1\0\1\147\6\0\1\147\1\0\1\147"+ + "\23\0\1\143\34\0\1\150\25\0\5\151\1\0\25\151"+ + "\1\0\1\151\6\0\1\151\1\0\1\151\17\0\1\45"+ + "\4\0\1\45\6\0\1\152\1\153\3\0\1\154\2\0"+ + "\1\155\1\156\1\157\16\0\1\154\21\0\3\46\3\0"+ + "\25\46\1\0\1\46\3\0\2\46\1\54\1\46\1\0"+ + "\1\46\17\0\1\45\3\46\3\0\25\46\1\0\1\46"+ + "\3\0\2\46\1\54\1\46\1\0\1\46\17\0\1\160"+ + "\13\0\1\160\2\0\2\160\1\0\1\160\2\0\1\160"+ + "\5\0\1\160\12\0\1\160\20\0\3\46\1\143\2\0"+ + "\25\46\1\0\1\46\3\0\1\161\1\46\1\54\1\46"+ + "\1\0\1\46\34\0\1\162\47\0\43\60\1\0\14\60"+ + "\1\0\3\60\1\0\1\60\64\163\1\0\1\163\43\64"+ + "\1\0\15\64\1\0\2\64\1\0\1\64\5\67\1\0"+ + "\6\67\1\0\6\67\1\0\12\67\1\0\25\67\1\0"+ + "\1\67\42\0\1\164\35\0\1\165\65\0\1\166\3\0"+ + "\1\167\105\0\1\170\27\0\14\75\1\0\6\75\1\0"+ + "\12\75\1\0\25\75\1\0\1\75\12\0\1\171\65\0"+ + "\1\172\3\0\1\173\105\0\1\174\56\0\1\104\51\0"+ + "\1\104\64\0\1\104\2\0\1\104\27\0\1\104\47\0"+ + "\1\104\15\0\1\104\42\0\1\104\4\0\1\104\37\0"+ + "\1\110\3\12\1\0\1\110\1\0\25\12\1\0\1\12"+ + "\6\0\1\12\1\104\1\12\37\0\1\175\1\0\1\176"+ + "\10\0\1\177\42\0\1\200\67\0\1\201\73\0\1\202"+ + "\55\0\1\203\1\204\64\0\1\205\70\0\1\206\67\0"+ + "\1\207\2\0\1\210\62\0\1\211\64\0\1\212\61\0"+ + "\1\213\4\0\1\214\62\0\1\215\13\0\1\216\54\0"+ + "\1\217\50\0\4\126\1\0\1\126\1\0\25\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\11\126\1\220\13\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\4\126\1\221\20\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\17\126\1\222"+ + "\5\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\1\126\1\223\23\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\1\126\1\224\23\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\11\126\1\225\13\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\16\126\1\226"+ + "\6\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\16\126\1\227\6\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\6\126\1\230\16\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\1\140\13\0\1\140\2\0"+ + "\2\140\1\0\1\140\2\0\1\140\5\0\1\140\12\0"+ + "\1\140\17\0\4\141\1\0\1\141\1\0\25\141\1\0"+ + "\1\141\6\0\1\141\1\0\1\141\17\0\1\142\3\141"+ + "\1\0\1\141\1\0\5\141\1\142\2\141\2\142\1\141"+ + "\1\142\2\141\1\142\5\141\1\142\1\0\1\141\6\0"+ + "\1\141\1\0\1\142\25\0\1\231\1\232\1\233\1\234"+ + "\1\235\1\236\1\237\1\0\1\240\1\241\1\242\1\0"+ + "\1\243\2\0\1\244\2\0\1\245\4\0\1\246\36\0"+ + "\1\231\1\232\1\233\1\234\1\235\1\236\1\237\1\0"+ + "\1\240\1\241\1\242\1\0\1\243\2\0\1\244\2\0"+ + "\1\245\35\0\4\147\1\0\1\147\1\0\25\147\1\0"+ + "\1\147\6\0\1\147\1\0\1\147\17\0\4\151\1\0"+ + "\1\151\1\0\25\151\1\0\1\151\6\0\1\151\1\0"+ + "\1\151\45\0\1\154\51\0\1\154\64\0\1\154\2\0"+ + "\1\154\27\0\1\154\47\0\1\154\15\0\1\154\42\0"+ + "\1\154\4\0\1\154\65\0\1\247\50\0\1\250\100\0"+ + "\1\251\57\0\1\252\104\0\1\253\41\0\1\254\100\0"+ + "\1\255\57\0\1\256\104\0\1\257\52\0\1\260\60\0"+ + "\1\261\75\0\1\262\50\0\1\203\73\0\1\263\56\0"+ + "\1\264\67\0\1\265\67\0\1\266\102\0\1\267\62\0"+ + "\1\270\52\0\1\271\65\0\1\272\6\0\1\273\65\0"+ + "\1\215\55\0\1\274\70\0\1\275\60\0\1\276\76\0"+ + "\1\277\71\0\1\300\62\0\1\301\44\0\4\126\1\0"+ + "\1\126\1\0\17\126\1\302\5\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\11\126\1\303\13\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\15\126\1\304"+ + "\7\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\5\126\1\305\17\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\3\126\1\306\21\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\23\126\1\307\1\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\10\126\1\310"+ + "\14\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\14\126\1\311\10\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\16\126\1\312\6\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\37\0\1\313\1\0\1\314\10\0"+ + "\1\315\42\0\1\316\67\0\1\317\73\0\1\320\55\0"+ + "\1\321\1\322\64\0\1\323\70\0\1\324\67\0\1\325"+ + "\2\0\1\326\62\0\1\327\64\0\1\330\61\0\1\331"+ + "\4\0\1\332\62\0\1\333\13\0\1\334\54\0\1\335"+ + "\105\0\1\246\54\0\1\336\65\0\1\337\47\0\1\340"+ + "\104\0\1\251\45\0\1\341\104\0\1\342\47\0\1\343"+ + "\104\0\1\255\45\0\1\344\71\0\1\267\63\0\1\345"+ + "\100\0\1\346\66\0\1\347\74\0\1\350\36\0\1\351"+ + "\107\0\1\352\54\0\1\353\100\0\1\265\70\0\1\265"+ + "\44\0\1\347\71\0\1\354\101\0\1\355\55\0\1\273"+ + "\77\0\1\356\43\0\1\357\71\0\1\360\50\0\4\126"+ + "\1\0\1\126\1\0\16\126\1\361\6\126\1\0\1\126"+ + "\6\0\1\126\1\0\1\126\17\0\4\126\1\0\1\126"+ + "\1\0\1\362\24\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\1\126\1\363"+ + "\23\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\22\126\1\364\2\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\2\126\1\365\22\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\16\126\1\366\6\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\6\126\1\367"+ + "\16\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\13\126\1\370\11\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\25\126\1\0\1\222\6\0\1\126\1\0"+ + "\1\126\41\0\1\371\60\0\1\372\75\0\1\373\50\0"+ + "\1\321\73\0\1\374\56\0\1\375\67\0\1\376\67\0"+ + "\1\377\102\0\1\u0100\62\0\1\u0101\52\0\1\u0102\65\0"+ + "\1\u0103\6\0\1\u0104\65\0\1\333\55\0\1\u0105\70\0"+ + "\1\u0106\60\0\1\u0107\76\0\1\u0108\71\0\1\u0109\62\0"+ + "\1\u010a\54\0\1\u010b\63\0\1\340\12\0\1\251\105\0"+ + "\1\u010c\24\0\2\341\5\u010d\25\341\1\u010d\1\341\2\u010d"+ + "\1\0\1\341\1\0\1\u010d\1\341\1\u010d\1\341\5\u010d"+ + "\1\341\1\0\1\u010d\1\0\1\u010d\3\0\1\u010d\7\0"+ + "\1\343\12\0\1\255\105\0\1\u010e\24\0\2\344\5\u010f"+ + "\25\344\1\u010f\1\344\2\u010f\1\0\1\344\1\0\1\u010f"+ + "\1\344\1\u010f\1\344\5\u010f\1\344\1\0\1\u010f\1\0"+ + "\1\u010f\3\0\1\u010f\22\0\1\u0110\54\0\1\u0111\60\0"+ + "\1\u0112\107\0\1\203\50\0\1\u0113\3\0\1\u0114\1\0"+ + "\1\u0115\56\0\1\265\105\0\1\u0116\66\0\1\u0117\56\0"+ + "\1\265\62\0\1\u0116\72\0\1\265\53\0\1\u0116\54\0"+ + "\4\126\1\0\1\126\1\0\12\126\1\u0118\12\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\12\126\1\u0119\12\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\1\u011a\24\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\17\126\1\u011b\5\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\17\0\3\126"+ + "\1\u011c\1\0\1\126\1\0\25\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\11\126\1\366\13\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\1\u011d\24\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\30\0\1\u0100"+ + "\63\0\1\u011e\100\0\1\u011f\66\0\1\u0120\74\0\1\u0121"+ + "\41\0\1\146\62\0\1\u0122\107\0\1\u0123\54\0\1\u0124"+ + "\100\0\1\376\70\0\1\376\44\0\1\u0120\71\0\1\u0125"+ + "\101\0\1\u0126\55\0\1\u0104\77\0\1\u0127\43\0\1\u0128"+ + "\71\0\1\u0129\57\0\1\u012a\117\0\1\341\65\0\1\344"+ + "\35\0\1\u012b\63\0\1\u0117\66\0\1\u0113\3\0\1\u0114"+ + "\73\0\1\u012c\56\0\1\u012d\72\0\1\276\72\0\1\u012e"+ + "\65\0\1\265\40\0\4\126\1\0\1\126\1\0\15\126"+ + "\1\u012f\7\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\16\126\1\u011a\6\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\17\0\4\126"+ + "\1\0\1\126\1\0\2\126\1\366\22\126\1\0\1\126"+ + "\6\0\1\126\1\0\1\126\17\0\4\126\1\0\1\126"+ + "\1\0\16\126\1\u0130\6\126\1\0\1\126\6\0\1\126"+ + "\1\0\1\126\17\0\4\126\1\0\1\126\1\0\13\126"+ + "\1\u012f\11\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\11\126\1\u0131\13\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\40\0\1\u0132"+ + "\54\0\1\u0133\60\0\1\u0134\107\0\1\321\50\0\1\u0135"+ + "\3\0\1\u0136\1\0\1\u0137\56\0\1\376\105\0\1\u0138"+ + "\66\0\1\u0139\56\0\1\376\62\0\1\u0138\72\0\1\376"+ + "\53\0\1\u0138\65\0\1\u013a\57\0\1\u013b\65\0\1\u013c"+ + "\77\0\1\u013d\67\0\1\265\46\0\4\126\1\0\1\126"+ + "\1\0\11\126\1\u013e\13\126\1\0\1\126\6\0\1\126"+ + "\1\0\1\126\17\0\4\126\1\0\1\126\1\0\3\126"+ + "\1\u011a\21\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\17\126\1\u013f\5\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\30\0\1\u0140"+ + "\63\0\1\u0139\66\0\1\u0135\3\0\1\u0136\73\0\1\u0141"+ + "\56\0\1\u0142\72\0\1\u0107\72\0\1\u0143\65\0\1\376"+ + "\60\0\1\u0144\63\0\1\u0145\60\0\1\u0146\72\0\1\u012e"+ + "\47\0\4\126\1\0\1\126\1\0\5\126\1\307\17\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\17\0\4\126"+ + "\1\0\1\126\1\0\16\126\1\u0147\6\126\1\0\1\126"+ + "\6\0\1\126\1\0\1\126\22\0\1\u0148\65\0\1\u0149"+ + "\77\0\1\u014a\67\0\1\376\60\0\1\u014b\70\0\1\u014c"+ + "\7\0\1\u014d\63\0\1\u014e\42\0\4\126\1\0\1\126"+ + "\1\0\12\126\1\366\12\126\1\0\1\126\6\0\1\126"+ + "\1\0\1\126\35\0\1\u014f\60\0\1\u0150\72\0\1\u0143"+ + "\60\0\1\u0151\66\0\1\u0117\64\0\1\260\100\0\1\u0117"+ + "\56\0\1\u0152\7\0\1\u0153\63\0\1\u0154\54\0\1\u0139"+ + "\64\0\1\371\100\0\1\u0139\40\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[16254]; + 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; + } + + + /* 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; + + /* 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 = + "\2\0\1\1\4\0\1\11\6\1\1\11\2\1\10\11"+ + "\3\1\1\11\3\1\4\11\5\1\1\11\1\1\1\11"+ + "\1\1\2\11\2\1\2\11\1\1\2\11\5\1\1\11"+ + "\4\1\1\11\2\0\1\11\3\0\1\1\15\0\15\1"+ + "\2\11\2\0\1\1\1\11\1\1\2\0\1\11\3\0"+ + "\2\1\1\0\2\11\33\0\11\1\15\0\1\1\16\0"+ + "\1\11\14\0\11\1\26\0\1\1\2\0\1\1\14\0"+ + "\10\1\5\0\1\1\31\0\6\1\21\0\3\1\14\0"+ + "\2\1\7\0\1\1\11\0\1\11\3\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[340]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -1; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -2; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether we are highlighting less instead of CSS. + */ + private boolean highlightingLess; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CSSTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_CSS_STRING: + case INTERNAL_CSS_CHAR: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_CSS_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * Returns true since CSS uses curly braces. + * + * @return true always. + */ + public boolean getCurlyBracesDenoteCodeBlocks() { + return true; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.RESERVED_WORD; // Used for CSS keys + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getShouldIndentNextLineAfter(Token t) { + if (t!=null && t.length()==1) { + char ch = t.charAt(0); + return ch=='{' || ch=='('; + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + cssPrevState = YYINITIAL; // Shouldn't be necessary + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = CSS_STRING; + break; + case Token.LITERAL_CHAR: + state = CSS_CHAR_LITERAL; + break; + case Token.COMMENT_MULTILINE: + state = CSS_C_STYLE_COMMENT; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Overridden to accept letters, digits, underscores, and hyphens. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; + } + + + /** + * Toggles whether we're highlighting less instead of just CSS. + * + * @param highlightingLess Whether we're highlighting less. + */ + public void setHighlightingLess(boolean highlightingLess) { + this.highlightingLess = highlightingLess; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CSSTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CSSTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 134) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { addToken(Token.IDENTIFIER); + } + case 48: break; + case 2: + { /*System.out.println("yyinitial: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 49: break; + case 25: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 50: break; + case 16: + { addToken(highlightingLess ? Token.RESERVED_WORD : Token.IDENTIFIER); + } + case 51: break; + case 9: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 52: break; + case 29: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 53: break; + case 32: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 54: break; + case 37: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 55: break; + case 31: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 56: break; + case 43: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 57: break; + case 12: + { addToken(highlightingLess ? Token.SEPARATOR : Token.IDENTIFIER); + } + case 58: break; + case 10: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 59: break; + case 17: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 60: break; + case 38: + { if (highlightingLess) { + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + case 61: break; + case 5: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 62: break; + case 23: + { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); + } + case 63: break; + case 28: + { /* Skip escaped chars. */ + } + case 64: break; + case 46: + { addToken(Token.REGEX); + } + case 65: break; + case 36: + { addToken(highlightingLess ? Token.ANNOTATION : Token.VARIABLE); + } + case 66: break; + case 3: + { addToken(highlightingLess ? Token.LITERAL_NUMBER_DECIMAL_INT : Token.IDENTIFIER); + } + case 67: break; + case 20: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 68: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 69: break; + case 19: + { addToken(Token.SEPARATOR); yybegin(YYINITIAL); + } + case 70: break; + case 47: + { addToken(Token.PREPROCESSOR); + } + case 71: break; + case 4: + { addToken(Token.DATA_TYPE); + } + case 72: break; + case 24: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 73: break; + case 35: + { addToken(highlightingLess ? Token.VARIABLE : Token.REGEX); + } + case 74: break; + case 18: + { addToken(Token.SEPARATOR); /* helps with auto-closing curlies when editing CSS */ + } + case 75: break; + case 34: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); + switch (cssPrevState) { + case CSS_PROPERTY: + addEndToken(INTERNAL_CSS_PROPERTY); + break; + case CSS_VALUE: + addEndToken(INTERNAL_CSS_VALUE); + break; + default: // Should be YYINITIAL + addNullToken(); + break; + } + return firstToken; + } + case 76: break; + case 22: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 77: break; + case 30: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 78: break; + case 33: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 79: break; + case 26: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 80: break; + case 41: + { if (highlightingLess) { + // Unfortunately, as we're sharing the CSS and Less + // syntax highlighting, we do not color nested selectors + // properly. For uniformity, color this the same as + // CSS_Property + addToken(Token.RESERVED_WORD); + } + else { + addToken(Token.IDENTIFIER); + } + } + case 81: break; + case 39: + { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); + } + case 82: break; + case 14: + { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 83: break; + case 15: + { addToken(Token.RESERVED_WORD); + } + case 84: break; + case 44: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 85: break; + case 11: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 86: break; + case 6: + { addToken(Token.SEPARATOR); + } + case 87: break; + case 13: + { addNullToken(); return firstToken; + } + case 88: break; + case 40: + { if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + case 89: break; + case 8: + { addToken(Token.OPERATOR); + } + case 90: break; + case 21: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 91: break; + case 45: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 92: break; + case 42: + { // This must be before {CSS_Value} since "//" is a valid CSS value + if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + case 93: break; + case 27: + { + } + case 94: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 341: break; + case LESS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + switch (cssPrevState) { + case CSS_PROPERTY: + addEndToken(INTERNAL_CSS_PROPERTY); + break; + case CSS_VALUE: + addEndToken(INTERNAL_CSS_VALUE); + break; + default: // Should be YYINITIAL + addNullToken(); + break; + } + return firstToken; + } + case 342: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 343: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 344: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 345: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 346: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 347: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex new file mode 100644 index 0000000..ba203c0 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex @@ -0,0 +1,514 @@ +/* + * 11/13/2004 + * + * CSharpTokenMaker.java - An object that can take a chunk of text and return + * a linked list of tokens representing it in the C# programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * A lexer for the C# programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CSharpTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class CSharpTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CSharpTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = VERBATIMSTRING; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = DELIMITEDCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +/* C1.1 - Line terminators. */ +NewlineCharacter = ([\n]) + +/* C.1.2 - Whitespace. */ +Whitespace = ([\t ]+) + +/* C.1.3 - Comments */ +InputCharacter = ([^\n]) +InputCharacters = ({InputCharacter}+) +DocumentationCommentStart = ("///") +SingleLineComment = ("//"([^/]{InputCharacters}?)?) +DelimitedCommentStart = ("/*") +DelimitedCommentEnd = ("*/") + +/* C.1.5 - Unicode character escape sequences. */ +UnicodeEscape1 = ("\\u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +UnicodeEscape2 = ("\\U"{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +UnicodeEscapeSequence = ({UnicodeEscape1}|{UnicodeEscape2}) + +/* C1.6 - Identifiers. */ +LetterCharacter = ([A-Za-z]) /* Not accurate - many more Unicode letters, Unicode escapes */ +/* +CombiningCharacter = () +*/ +DecimalDigitCharacter = ([0-9]) +ConnectingCharacter = ([_\-]) +/* +FormattingCharacter = () +*/ +/* +IdentifierPartCharacter = ({LetterCharacter}|{DecimalDigitCharacter}|{ConnectingCharacter}|{CombiningCharacter}|{FormattingCharacter}) +*/ +IdentifierPartCharacter = ({LetterCharacter}|{DecimalDigitCharacter}|{ConnectingCharacter}) +IdentifierPartCharacters = ({IdentifierPartCharacter}+) +IdentifierStartCharacter = ({LetterCharacter}|[_]) +IdentifierOrKeyword = ({IdentifierStartCharacter}{IdentifierPartCharacters}?) +Identifier = ("@"?{IdentifierOrKeyword}) +/* NOTE: The two below aren't from the C# spec, but we add them so we can */ +/* highlight errors. */ +NonSeparator = (([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\")) +ErrorIdentifier = ({NonSeparator}+) + +/* C1.8 - Literals. */ +BooleanLiteral = ("true"|"false") +DecimalDigit = ([0-9]) +DecimalDigits = ({DecimalDigit}+) +IntegerTypeSuffix = (([uU][lL]?)|([lL][uU]?)) +DecimalIntegerLiteral = ({DecimalDigits}{IntegerTypeSuffix}?) +HexDigit = ([0-9A-Fa-f]) +HexDigits = ({HexDigit}+) +HexadecimalIntegerLiteral = ("0"[xX]{HexDigits}{IntegerTypeSuffix}?) +Sign = ([+\-]) +ExponentPart = ([eE]{Sign}?{DecimalDigits}) +RealTypeSuffix = ([fFdDmM]) +RealHelper1 = ({DecimalDigits}"."{DecimalDigits}{ExponentPart}?{RealTypeSuffix}?) +RealHelper2 = ("."{DecimalDigits}{ExponentPart}?{RealTypeSuffix}?) +RealHelper3 = ({DecimalDigits}{ExponentPart}{RealTypeSuffix}?) +RealHelper4 = ({DecimalDigits}{RealTypeSuffix}) +RealLiteral = ({RealHelper1}|{RealHelper2}|{RealHelper3}|{RealHelper4}) +ErrorNumberFormat = (({DecimalIntegerLiteral}|{HexadecimalIntegerLiteral}|{RealLiteral}){NonSeparator}+) +SingleCharacter = ([^\'\\\n]) +SimpleEscapeSequence = ("\\"[\'\"\\0abfnrtv]) +HexadecimalEscapeSequence = ("\\x"{HexDigit}{HexDigit}?{HexDigit}?{HexDigit}?) +Character = ({SingleCharacter}|{SimpleEscapeSequence}|{HexadecimalEscapeSequence}|{UnicodeEscapeSequence}) +UnclosedCharacterLiteral = ("'"{Character}) +CharacterLiteral = ({UnclosedCharacterLiteral}"'") +ErrorUnclosedCharacterLiteral = ("'"[^\'\n]*) +ErrorCharacterLiteral = ("''"|{ErrorUnclosedCharacterLiteral}[\']) +QuoteEscapeSequence = ("\"\"") +SingleVerbatimStringLiteralCharacter = ([^\"]) +VerbatimStringLiteralStart = ("@\"") +SingleRegularStringLiteralCharacter = ([^\"\\\n]) +RegularStringLiteralCharacter = ({SingleRegularStringLiteralCharacter}|{SimpleEscapeSequence}|{HexadecimalEscapeSequence}|{UnicodeEscapeSequence}) +RegularStringLiteralCharacters = ({RegularStringLiteralCharacter}+) +RegularStringLiteral = ([\"]{RegularStringLiteralCharacters}?[\"]) +UnclosedRegularStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorRegularStringLiteral = ({UnclosedRegularStringLiteral}[\"]) + +/* C.1.9 - Operators and Punctuators. */ +OOPHelper1 = (":") +OOPHelper2 = ("+"|"-"|"*"|"/"|"%"|"&"|"|"|"^"|"!"|"~") +OOPHelper3 = ("="|"<"|">"|"?"|"++"|"--"|"&&"|"||"|"<<"|">>") +OOPHelper4 = ("=="|"!="|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&=") +OOPHelper5 = ("|="|"^="|"<<="|">>="|"->") +OperatorOrPunctuator = ({OOPHelper1}|{OOPHelper2}|{OOPHelper3}|{OOPHelper4}|{OOPHelper5}) +/* NOTE: We distinguish between operators and separators (punctuators), but */ +/* the C# spec doesn't, so the stuff below isn't in the spec. */ +Separator = ([\{\}\[\]\(\)]) +Separator2 = ([,;]) + +/* C.1.10 - Pre-processing Directives. */ +/* NOTE: We don't do ALL of the PP stuff here as it's unnecessary */ +/* for us to know the difference between declarations, diagnostics, */ +/* regions, etc. */ +ConditionalSymbol = ({IdentifierOrKeyword}) /* Not correct - excludes "true" and "false". */ +PPNewLine = ({Whitespace}?{SingleLineComment}?{NewlineCharacter}) +PPPrimaryExpression = ({IdentifierOrKeyword}|({Whitespace}?{PPExpression}{Whitespace}?)) +PPUnaryExpression = ({PPPrimaryExpression}|("!"{Whitespace}?{PPUnaryExpression})) +PPEqualityExpression = ({PPUnaryExpression}|({Whitespace}?"=="{Whitespace}?{PPUnaryExpression})|({Whitespace}?"!="{Whitespace}?{PPUnaryExpression})) +PPAndExpression = ({PPEqualityExpression}|({Whitespace}?"&&"{Whitespace}?{PPEqualityExpression})) +PPOrExpression = ({PPAndExpression}|({Whitespace}?"||"{Whitespace}?{PPAndExpression})) +PPExpression = ({Whitespace}?{PPOrExpression}{Whitespace}?) +PPWord = ("define"|"undef"|"if"|"elif"|"else"|"endif"|"line"|"error"|"warning"|"region"|"endregion") +PPDirective = ({Whitespace}?"#"{Whitespace}?{PPWord}{InputCharacter}*) + +/* URL matching, for comments (not in C# spec) */ +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z_]|{DecimalDigitCharacter}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|[A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state DELIMITEDCOMMENT +%state DOCUMENTCOMMENT +%state VERBATIMSTRING + +%% + + { + + /* Keywords */ + "abstract" | + "as" | + "base" | + "break" | + "case" | + "catch" | + "checked" | + "class" | + "const" | + "continue" | + "decimal" | + "default" | + "delegate" | + "do" | + "else" | + "enum" | + "event" | + "explicit" | + "extern" | + "finally" | + "fixed" | + "for" | + "foreach" | + "goto" | + "if" | + "implicit" | + "in" | + "interface" | + "internal" | + "is" | + "lock" | + "namespace" | + "new" | + "null" | + "object" | + "operator" | + "out" | + "override" | + "params" | + "private" | + "protected" | + "public" | + "readonly" | + "ref" | + "return" | + "sealed" | + "sizeof" | + "stackalloc" | + "static" | + "string" | + "struct" | + "switch" | + "this" | + "throw" | + "try" | + "typeof" | + "unchecked" | + "unsafe" | + "using" | + "virtual" | + "void" | + "volatile" | + "while" { addToken(Token.RESERVED_WORD); } + + /* Data types. */ + "bool" | + "byte" | + "char" | + "double" | + "float" | + "int" | + "long" | + "object" | + "sbyte" | + "short" | + "string" | + "uint" | + "ulong" | + "ushort" { addToken(Token.DATA_TYPE); } + + + {NewlineCharacter} { addNullToken(); return firstToken; } + + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character Literals. */ + {CharacterLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharacterLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } + {ErrorUnclosedCharacterLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {ErrorCharacterLiteral} { addToken(Token.ERROR_CHAR); } + {VerbatimStringLiteralStart} { start = zzMarkedPos-2; yybegin(VERBATIMSTRING); } + {RegularStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedRegularStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {ErrorRegularStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + + /* Comments. */ + {DelimitedCommentStart} { start = zzMarkedPos-2; yybegin(DELIMITEDCOMMENT); } + {DocumentationCommentStart} { start = zzMarkedPos-3; yybegin(DOCUMENTCOMMENT); } + {SingleLineComment} { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {OperatorOrPunctuator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {DecimalIntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexadecimalIntegerLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {RealLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + /* Preprocessor directives. */ + {PPDirective} { addToken(Token.PREPROCESSOR); } + + /* Pretty-much anything else. */ + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {DelimitedCommentEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + + { + + [^hwf\<\n]* {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } + "<"[^\>]*">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } + "<" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzEndRead, Token.PREPROCESSOR); addNullToken(); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } + +} + + + { + + [^\"\n]* {} + {QuoteEscapeSequence} {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java new file mode 100644 index 0000000..8b0d5cb --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java @@ -0,0 +1,1600 @@ +/* The following code was generated by JFlex 1.4.1 on 1/21/09 4:27 PM */ + +/* + * 11/13/2004 + * + * CSharpTokenMaker.java - An object that can take a chunk of text and return + * a linked list of tokens representing it in the C# programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * A lexer for the C# programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CSharpTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class CSharpTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int VERBATIMSTRING = 3; + public static final int DOCUMENTCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int DELIMITEDCOMMENT = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\1\1\0\2\15\22\0\1\2\1\45\1\41\1\16"+ + "\1\66\1\45\1\46\1\37\2\65\1\4\1\32\1\56\1\12\1\36"+ + "\1\3\1\30\11\11\1\44\1\56\1\53\1\52\1\54\1\51\1\14"+ + "\3\27\1\35\1\33\1\35\5\10\1\26\1\34\7\10\1\7\2\10"+ + "\1\31\2\10\1\65\1\5\1\65\1\50\1\13\1\0\1\23\1\42"+ + "\1\71\1\57\1\21\1\22\1\64\1\67\1\60\1\75\1\72\1\24"+ + "\1\73\1\61\1\62\1\70\1\10\1\20\1\25\1\17\1\6\1\40"+ + "\1\63\1\43\1\74\1\76\1\55\1\47\1\55\1\51\uff81\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 = + "\2\0\2\1\1\2\1\3\1\4\2\5\2\6\1\7"+ + "\1\5\3\2\7\6\1\7\1\5\1\2\1\10\1\6"+ + "\1\11\1\6\5\5\1\12\11\6\1\1\1\13\5\1"+ + "\1\14\1\1\1\15\3\1\1\16\1\17\1\0\1\20"+ + "\1\21\5\6\1\22\1\7\1\22\1\23\1\7\1\0"+ + "\1\24\7\2\14\6\1\25\10\6\1\22\1\23\1\26"+ + "\1\10\1\27\2\6\2\11\1\30\4\6\2\25\21\6"+ + "\1\31\7\0\1\32\2\0\1\1\7\0\1\20\1\33"+ + "\5\6\1\7\1\23\1\0\7\2\1\34\1\2\17\6"+ + "\1\25\10\6\1\35\1\10\1\36\2\10\1\26\1\10"+ + "\3\6\1\11\1\37\3\11\7\6\1\40\20\6\20\0"+ + "\1\6\1\40\2\6\6\2\1\41\12\6\2\35\2\10"+ + "\1\26\2\6\2\11\16\6\1\0\1\42\2\0\1\43"+ + "\7\0\3\2\10\6\1\35\2\10\1\26\1\6\2\11"+ + "\10\6\7\0\2\2\3\6\2\10\1\26\1\11\5\6"+ + "\2\0\1\2\3\6\1\0\1\6"; + + private static int [] zzUnpackAction() { + int [] result = new int[364]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9"+ + "\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u013b\0\u0372"+ + "\0\u03b1\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a"+ + "\0\u05a9\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u013b\0\u0723"+ + "\0\u0762\0\u07a1\0\u07e0\0\u013b\0\u013b\0\u081f\0\u085e\0\u089d"+ + "\0\u08dc\0\u091b\0\u095a\0\u0999\0\u09d8\0\u0a17\0\u013b\0\u0a56"+ + "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u013b\0\u0b91\0\u0bd0\0\u0c0f"+ + "\0\u0c4e\0\u0c8d\0\u013b\0\u0ccc\0\u0d0b\0\u0d4a\0\u013b\0\u0d89"+ + "\0\u0dc8\0\u0e07\0\u0e46\0\u0e85\0\u0ec4\0\u0f03\0\u0f42\0\u0ec4"+ + "\0\u0f81\0\u05e8\0\u013b\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc"+ + "\0\u10fb\0\u113a\0\u1179\0\u11b8\0\u11f7\0\u1236\0\u1275\0\u12b4"+ + "\0\u12f3\0\u1332\0\u1371\0\u13b0\0\u13ef\0\u142e\0\u0276\0\u146d"+ + "\0\u14ac\0\u14eb\0\u152a\0\u1569\0\u15a8\0\u15e7\0\u1626\0\u1665"+ + "\0\u16a4\0\u16e3\0\u1722\0\u013b\0\u1761\0\u17a0\0\u17df\0\u181e"+ + "\0\u013b\0\u185d\0\u189c\0\u18db\0\u191a\0\u1959\0\u1998\0\u19d7"+ + "\0\u1a16\0\u1a55\0\u1a94\0\u1ad3\0\u1b12\0\u1b51\0\u1b90\0\u1bcf"+ + "\0\u1c0e\0\u1c4d\0\u1c8c\0\u1ccb\0\u1d0a\0\u1d49\0\u1d88\0\u1dc7"+ + "\0\u013b\0\u1e06\0\u1e45\0\u1e84\0\u1ec3\0\u1f02\0\u1f41\0\u0bd0"+ + "\0\u013b\0\u1f80\0\u1fbf\0\u013b\0\u1ffe\0\u203d\0\u207c\0\u20bb"+ + "\0\u20fa\0\u2139\0\u2178\0\u21b7\0\u013b\0\u21f6\0\u2235\0\u2274"+ + "\0\u22b3\0\u22f2\0\u0ec4\0\u2331\0\u2370\0\u23af\0\u23ee\0\u242d"+ + "\0\u246c\0\u24ab\0\u24ea\0\u2529\0\u2568\0\u25a7\0\u25e6\0\u2625"+ + "\0\u2664\0\u26a3\0\u26e2\0\u2721\0\u2760\0\u279f\0\u27de\0\u281d"+ + "\0\u285c\0\u289b\0\u28da\0\u2919\0\u2958\0\u2997\0\u29d6\0\u2a15"+ + "\0\u2a54\0\u2a93\0\u2ad2\0\u2b11\0\u2b50\0\u2b8f\0\u2bce\0\u2c0d"+ + "\0\u013b\0\u2c4c\0\u2c8b\0\u2cca\0\u2d09\0\u2d48\0\u2d87\0\u2dc6"+ + "\0\u2e05\0\u013b\0\u2e44\0\u2e83\0\u2ec2\0\u2f01\0\u2f40\0\u2f7f"+ + "\0\u2fbe\0\u2ffd\0\u303c\0\u307b\0\u30ba\0\u30f9\0\u3138\0\u3177"+ + "\0\u31b6\0\u31f5\0\u3234\0\u3273\0\u32b2\0\u32f1\0\u3330\0\u336f"+ + "\0\u33ae\0\u33ed\0\u342c\0\u346b\0\u34aa\0\u34e9\0\u3528\0\u3567"+ + "\0\u35a6\0\u35e5\0\u3624\0\u3663\0\u36a2\0\u36e1\0\u3720\0\u375f"+ + "\0\u379e\0\u37dd\0\u381c\0\u385b\0\u389a\0\u38d9\0\u0276\0\u3918"+ + "\0\u3957\0\u3996\0\u39d5\0\u3a14\0\u3a53\0\u3a92\0\u3ad1\0\u0276"+ + "\0\u3b10\0\u3b4f\0\u3b8e\0\u3bcd\0\u3c0c\0\u3c4b\0\u3c8a\0\u3cc9"+ + "\0\u3d08\0\u3d47\0\u3d86\0\u3dc5\0\u3e04\0\u3e43\0\u3e82\0\u3ec1"+ + "\0\u3f00\0\u3f3f\0\u3f7e\0\u3fbd\0\u3ffc\0\u403b\0\u407a\0\u40b9"+ + "\0\u40f8\0\u4137\0\u4176\0\u41b5\0\u41f4\0\u4233\0\u4272\0\u42b1"+ + "\0\u42f0\0\u432f\0\u436e\0\u43ad\0\u43ec\0\u442b\0\u446a\0\u44a9"+ + "\0\u44e8\0\u4527\0\u4566\0\u45a5\0\u45e4\0\u4623\0\u4662\0\u46a1"+ + "\0\u46e0\0\u471f\0\u475e\0\u479d\0\u47dc\0\u481b\0\u485a\0\u4899"+ + "\0\u0ec4\0\u48d8\0\u4917\0\u4956\0\u4995\0\u49d4\0\u4a13\0\u4a52"+ + "\0\u4a91\0\u4ad0\0\u4b0f\0\u4b4e\0\u4b8d\0\u4bcc\0\u4c0b\0\u4c4a"+ + "\0\u436e\0\u4c89\0\u442b\0\u4cc8\0\u4d07\0\u4d46\0\u4d85\0\u4dc4"+ + "\0\u4e03\0\u4e42\0\u4e81\0\u4ec0\0\u4eff\0\u4f3e\0\u4f7d\0\u4fbc"+ + "\0\u4ffb\0\u503a\0\u5079\0\u50b8\0\u50f7\0\u5136\0\u5175\0\u51b4"+ + "\0\u51f3\0\u5232\0\u5271\0\u52b0"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[364]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\2\13"+ + "\1\14\1\15\1\13\1\16\1\17\1\20\1\21\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\2\13\1\30\1\13"+ + "\1\31\3\13\1\32\1\33\1\34\1\35\1\36\1\13"+ + "\1\37\1\11\1\40\1\41\1\11\1\37\1\11\1\42"+ + "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ + "\1\53\1\44\1\5\1\13\1\54\1\55\5\13\1\56"+ + "\1\57\2\56\1\60\15\56\1\61\40\56\1\62\3\56"+ + "\1\63\7\56\1\64\1\65\20\64\1\66\30\64\1\67"+ + "\7\64\1\70\3\64\1\71\7\64\1\72\1\73\37\72"+ + "\1\74\35\72\1\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\6\5\1\0\11\5\101\0\1\7\13\0\1\75\63\0"+ + "\1\76\1\77\45\0\1\37\76\0\1\37\24\0\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\5\13\1\101\1\102\4\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\1\13\1\103\1\104\3\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\105"+ + "\4\0\1\105\2\106\1\105\1\14\1\0\2\105\1\0"+ + "\3\105\1\107\1\110\1\105\1\111\1\105\1\111\1\105"+ + "\1\14\1\105\1\0\1\107\2\110\1\112\1\0\1\105"+ + "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110"+ + "\3\105\12\0\1\37\37\0\1\37\1\0\1\37\22\0"+ + "\1\5\4\0\1\5\3\13\1\5\1\0\1\13\1\5"+ + "\1\0\1\5\11\13\1\5\1\13\1\0\3\13\2\0"+ + "\1\13\1\113\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\1\0\1\75\2\0\1\5\1\114\3\5\1\0"+ + "\2\5\1\0\2\5\1\115\1\116\2\5\1\117\5\5"+ + "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\1\120"+ + "\1\121\2\5\1\122\1\5\1\0\12\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\123"+ + "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\1\124\4\13\1\125\2\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\126\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ + "\1\127\5\13\1\0\3\13\2\0\1\130\1\0\1\13"+ + "\1\131\13\0\2\13\1\132\3\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\4\13\1\133\1\134\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\13\1\135\1\13\1\136"+ + "\2\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\6\13\1\137\4\13"+ + "\1\0\3\13\2\0\1\13\1\0\1\140\1\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\141\2\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\142\1\13\1\143\10\13"+ + "\1\0\3\13\2\0\1\13\1\0\1\144\1\13\13\0"+ + "\1\13\1\145\2\13\1\146\1\13\1\0\1\5\1\147"+ + "\7\13\1\105\4\0\1\105\2\106\1\105\1\14\1\0"+ + "\2\105\1\0\3\105\1\107\1\110\1\105\1\111\1\105"+ + "\1\111\1\105\1\14\1\150\1\0\1\107\2\110\1\112"+ + "\1\0\1\105\1\0\1\105\1\150\13\0\1\110\5\105"+ + "\1\0\5\105\1\110\3\105\32\0\1\37\17\0\1\37"+ + "\35\0\1\151\16\0\1\151\46\0\1\152\1\0\3\152"+ + "\1\153\31\152\1\154\37\152\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\1\13\1\155\1\13"+ + "\1\156\2\13\1\0\1\5\10\13\1\35\1\157\3\35"+ + "\1\160\33\35\1\161\35\35\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\13\1\162\2\13"+ + "\1\127\6\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\163\2\13\1\0\1\5\5\13\1\164"+ + "\2\13\46\0\1\37\3\0\1\37\73\0\1\37\2\0"+ + "\1\37\76\0\1\37\1\11\75\0\1\37\1\0\1\11"+ + "\22\0\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\165\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\3\13\1\166\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\3\13\1\137\2\13\1\137\4\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ + "\1\167\3\13\1\0\1\5\4\13\1\170\3\13\1\5"+ + "\4\0\1\5\1\171\3\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\172\1\13\1\173\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\1\174\3\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\175"+ + "\1\0\1\176\1\13\13\0\6\13\1\0\1\5\1\13"+ + "\1\177\6\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\1\200\7\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\201\2\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\1\202\3\13\1\100\1\13\1\5\1\0"+ + "\1\5\1\13\1\203\2\13\1\204\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\205\1\206\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\207\2\13"+ + "\1\0\1\5\1\210\7\13\1\56\1\0\2\56\1\0"+ + "\15\56\1\0\40\56\1\0\3\56\1\0\7\56\3\0"+ + "\1\211\112\0\1\212\40\0\1\213\101\0\1\214\32\0"+ + "\1\215\57\0\1\64\1\0\20\64\1\0\30\64\1\0"+ + "\7\64\1\0\3\64\1\0\7\64\17\0\1\216\40\0"+ + "\1\217\16\0\54\220\1\221\22\220\63\0\1\222\32\0"+ + "\1\223\57\0\1\72\1\0\37\72\1\0\35\72\41\0"+ + "\1\224\37\0\1\75\3\0\1\225\11\0\1\226\1\227"+ + "\2\0\1\230\32\0\1\231\1\232\2\0\1\233\13\0"+ + "\3\234\1\235\73\234\6\0\6\100\3\0\13\100\1\0"+ + "\3\100\2\0\1\100\1\0\2\100\13\0\6\100\2\0"+ + "\10\100\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\3\13\1\236\2\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\1\13\1\237\4\13\1\0\1\5\1\147\7\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\2\13\1\240\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\6\13\1\241\4\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\2\13\1\242\5\13"+ + "\1\105\4\0\5\105\1\0\2\105\1\0\14\105\1\0"+ + "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0"+ + "\12\105\4\0\5\105\1\0\2\105\1\0\6\105\1\243"+ + "\1\105\1\243\3\105\1\0\3\105\2\0\1\105\1\0"+ + "\2\105\13\0\6\105\1\0\12\105\4\0\4\105\1\244"+ + "\1\245\2\105\1\0\12\105\1\244\1\105\1\245\3\105"+ + "\2\0\1\105\1\0\2\105\13\0\6\105\1\0\12\105"+ + "\4\0\1\105\2\243\2\105\1\0\2\105\1\0\14\105"+ + "\1\0\3\105\2\0\1\105\1\0\2\105\13\0\6\105"+ + "\1\0\11\105\1\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\2\5\1\246\3\5\1\0\12\5\4\0\5\5\1\0"+ + "\2\5\1\0\3\5\1\247\10\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\2\5\1\250\3\5\1\251"+ + "\5\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\2\5\1\252\3\5\1\0\12\5\4\0\5\5\1\0"+ + "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\1\5\1\253\4\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\3\5\1\254\10\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0"+ + "\12\5\4\0\5\5\1\0\2\5\1\0\4\5\1\255"+ + "\7\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\5\5\1\256\6\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\6\5\1\0\12\5\4\0\1\5\1\257"+ + "\3\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\5\13\1\137\2\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\13\1\260\11\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13"+ + "\1\261\4\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\1\13\1\262\6\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\263\2\13\1\137"+ + "\1\264\6\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\6\13\1\265"+ + "\4\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\2\13\1\266\10\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\267\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\1\13\1\270\6\13\1\5\4\0\1\5\1\271\3\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\5\13\1\272\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\273\2\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\1\13\1\274"+ + "\13\0\2\13\1\275\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\13\1\276\11\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\6\13"+ + "\1\277\4\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\300"+ + "\3\13\1\0\1\5\2\13\1\301\5\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ + "\1\302\2\13\1\303\6\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\304\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\5\13\1\164\2\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\7\13\1\262\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\13\1\305\4\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\3\13\1\306\2\13\1\0\1\5"+ + "\10\13\1\105\4\0\4\105\1\307\1\0\2\105\1\0"+ + "\3\105\3\307\3\105\2\307\1\105\1\0\1\307\1\105"+ + "\1\307\2\0\1\105\1\0\1\307\1\105\13\0\1\307"+ + "\5\105\1\0\3\105\1\307\6\105\4\0\4\105\1\151"+ + "\1\0\2\105\1\0\3\105\1\107\1\110\5\105\1\151"+ + "\1\105\1\0\1\107\2\110\2\0\1\105\1\0\2\105"+ + "\13\0\1\110\5\105\1\0\5\105\1\110\3\105\1\310"+ + "\1\0\35\310\1\311\40\310\1\0\3\310\1\152\1\312"+ + "\1\313\7\310\2\152\1\310\2\152\4\310\1\152\6\310"+ + "\1\314\3\152\1\315\15\310\1\152\15\310\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ + "\1\316\11\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\317"+ + "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\1\13\1\320\4\13\1\0\1\5\10\13\5\157\1\321"+ + "\33\157\1\322\36\157\1\0\3\157\1\35\1\323\1\324"+ + "\7\157\2\35\1\157\2\35\4\157\1\35\6\157\4\35"+ + "\1\325\15\157\1\35\15\157\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\2\13\1\326\10\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\3\13\1\327\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\1\330\12\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\3\13\1\331\1\13\1\332\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\333\5\13\1\5\4\0\1\5\1\334\3\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\335\12\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\1\13\1\270\6\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ + "\1\336\5\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\4\13\1\137"+ + "\1\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\4\13\1\337\3\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\137\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\340\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\6\13\1\341\1\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\342\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13"+ + "\1\343\4\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\1\344\12\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\1\345\1\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\346\1\13\1\347\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\1\13\1\350\11\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\351\5\13\1\265\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\352\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\2\13\1\353\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\354\1\13\1\355\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\70\0\1\356\32\0\1\357\135\0\1\360\32\0\1\361"+ + "\147\0\1\362\32\0\1\363\135\0\1\364\32\0\1\365"+ + "\140\0\1\366\36\0\1\367\75\0\1\370\3\0\1\371"+ + "\34\0\1\372\75\0\1\373\37\0\1\374\77\0\1\255"+ + "\77\0\1\375\53\0\1\234\1\0\75\234\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ + "\1\300\3\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\376"+ + "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\377\12\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\4\13\1\u0100\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\1\u0101\7\13\1\105"+ + "\4\0\4\105\1\244\1\0\2\105\1\0\4\105\1\110"+ + "\5\105\1\244\1\105\1\0\1\105\2\110\2\0\1\105"+ + "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110"+ + "\3\105\11\0\1\244\16\0\1\244\46\0\1\5\4\0"+ + "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\1\u0102\5\5\1\0\12\5"+ + "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ + "\2\0\1\5\1\0\2\5\13\0\5\5\1\u0103\1\0"+ + "\12\5\4\0\5\5\1\0\2\5\1\0\2\5\1\u0104"+ + "\11\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\7\5\1\u0105\4\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\1\5\1\121\4\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\1\u0106\5\5\1\0\12\5"+ + "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ + "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0105\3\5"+ + "\1\0\12\5\4\0\5\5\1\0\2\5\1\0\4\5"+ + "\1\117\7\5\1\0\3\5\2\0\1\5\1\0\2\5"+ + "\13\0\6\5\1\0\11\5\1\255\1\0\75\255\1\5"+ + "\4\0\5\5\1\0\2\5\1\0\2\5\1\u0107\11\5"+ + "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\6\5"+ + "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\u0108\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\172\2\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\6\13\1\137\4\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u0109\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\1\u010a\3\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\u010b\5\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\137\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\2\13\1\174\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\u010a\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ + "\1\u010c\5\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\4\13\1\137\3\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\6\13\1\257\4\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\4\13\1\240\6\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\2\13\1\320\10\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\u010d\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\u010e\10\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\u010f\12\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\5\13\1\377"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13"+ + "\1\137\4\13\1\5\4\0\1\5\1\u0110\3\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\13\1\237\4\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\1\u0111\12\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13"+ + "\1\u0112\5\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\5\13\1\274\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\351\12\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\13\1\240\11\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\105\4\0"+ + "\1\105\2\u0113\1\105\1\307\1\0\2\105\1\0\3\105"+ + "\3\307\1\u0114\1\105\1\u0114\2\307\1\105\1\0\1\307"+ + "\1\105\1\307\2\0\1\105\1\0\1\307\1\105\13\0"+ + "\1\307\5\105\1\0\3\105\1\307\5\105\1\310\1\0"+ + "\35\310\1\154\40\310\1\0\7\310\1\u0115\7\310\3\u0115"+ + "\3\310\2\u0115\2\310\1\u0115\1\310\1\u0115\1\310\1\154"+ + "\2\310\1\u0115\14\310\1\u0115\11\310\1\u0115\6\310\1\0"+ + "\7\310\1\u0116\7\310\3\u0116\3\310\2\u0116\2\310\1\u0116"+ + "\1\310\1\u0116\1\310\1\154\2\310\1\u0116\14\310\1\u0116"+ + "\11\310\1\u0116\5\310\37\0\1\311\37\0\1\310\1\0"+ + "\7\310\1\u0117\7\310\3\u0117\3\310\2\u0117\2\310\1\u0117"+ + "\1\310\1\u0117\1\310\1\154\2\310\1\u0117\14\310\1\u0117"+ + "\11\310\1\u0117\5\310\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\u0118\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\u0119\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\1\137\5\13\1\0\1\5\10\13\1\157\1\0"+ + "\102\157\1\321\3\157\1\u011a\7\157\3\u011a\3\157\2\u011a"+ + "\2\157\1\u011a\1\157\1\u011a\3\157\1\322\1\u011a\14\157"+ + "\1\u011a\11\157\1\u011a\12\157\1\321\3\157\1\u011b\7\157"+ + "\3\u011b\3\157\2\u011b\2\157\1\u011b\1\157\1\u011b\3\157"+ + "\1\322\1\u011b\14\157\1\u011b\11\157\1\u011b\12\157\1\321"+ + "\3\157\1\35\7\157\3\35\3\157\2\35\2\157\1\35"+ + "\1\157\1\35\3\157\1\322\1\35\14\157\1\35\11\157"+ + "\1\35\5\157\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\4\13\1\301\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\5\13\1\377\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\377\10\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\u011c\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u011d\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\1\13\1\u011e"+ + "\4\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\1\u011f\1\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\2\13\1\u0120\10\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\5\13\1\137\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\u0121\10\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\13\1\u0122\11\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u0110\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\u0123"+ + "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\5\13\1\265\5\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\3\13\1\137\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\5\13\1\u0111\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\u0124\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\u0125"+ + "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\4\13\1\u0126\6\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13"+ + "\1\u0127\5\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\6\13\1\261\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\u0128\5\13\1\174\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\2\13\1\u0129\5\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\1\13\1\377\11\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\44\0"+ + "\1\u012a\53\0\1\356\113\0\1\u012b\130\0\1\u012c\52\0"+ + "\1\u012d\53\0\1\362\113\0\1\u012e\130\0\1\u012f\65\0"+ + "\1\u0130\103\0\1\u0131\32\0\1\u0132\103\0\1\u0133\32\0"+ + "\1\232\75\0\1\u0134\100\0\1\u0133\37\0\1\230\74\0"+ + "\1\u0135\56\0\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\5\13\1\137\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\3\13\1\265\7\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\354\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\5\5\1\0\2\5\1\0\3\5\1\121\10\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0"+ + "\12\5\4\0\5\5\1\0\2\5\1\0\14\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\u0136"+ + "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\3\5\1\u0137\2\5\1\0\12\5\4\0\5\5\1\0"+ + "\2\5\1\0\3\5\1\255\10\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\2\5\1\115\11\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\121"+ + "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\2\5\1\u0138\3\5\1\0\12\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\u0139\2\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\13\1\u013a\11\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\3\13\1\u013b\2\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\u013c\4\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\5\13\1\u013d\5\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\351\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ + "\1\u013e\11\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\2\13\1\174\5\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\1\13\1\u013f\4\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13"+ + "\1\u0140\4\13\1\105\4\0\5\105\1\0\2\105\1\0"+ + "\6\105\1\u0141\1\105\1\u0141\3\105\1\0\3\105\2\0"+ + "\1\105\1\0\2\105\13\0\6\105\1\0\12\105\4\0"+ + "\1\105\2\u0141\2\105\1\0\2\105\1\0\14\105\1\0"+ + "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0"+ + "\11\105\1\310\1\0\7\310\1\u0142\7\310\3\u0142\3\310"+ + "\2\u0142\2\310\1\u0142\1\310\1\u0142\1\310\1\154\2\310"+ + "\1\u0142\14\310\1\u0142\11\310\1\u0142\6\310\1\0\7\310"+ + "\1\u0143\7\310\3\u0143\3\310\2\u0143\2\310\1\u0143\1\310"+ + "\1\u0143\1\310\1\154\2\310\1\u0143\14\310\1\u0143\11\310"+ + "\1\u0143\6\310\1\0\7\310\1\u0144\7\310\3\u0144\3\310"+ + "\2\u0144\2\310\1\u0144\1\310\1\u0144\1\310\1\311\2\310"+ + "\1\u0144\14\310\1\u0144\11\310\1\u0144\5\310\1\5\4\0"+ + "\1\5\1\u0145\3\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\200\12\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\5\157\1\321\3\157\1\u0146\7\157\3\u0146"+ + "\3\157\2\u0146\2\157\1\u0146\1\157\1\u0146\3\157\1\322"+ + "\1\u0146\14\157\1\u0146\11\157\1\u0146\12\157\1\321\3\157"+ + "\1\u0147\7\157\3\u0147\3\157\2\u0147\2\157\1\u0147\1\157"+ + "\1\u0147\3\157\1\322\1\u0147\14\157\1\u0147\11\157\1\u0147"+ + "\5\157\1\5\4\0\1\5\1\u0148\3\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\5\13\1\u0124\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\4\13\1\u0145\3\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\5\13\1\330\5\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\13\1\u0149\11\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\6\13\1\u014a\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\13\1\u014b\11\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\4\13\1\u014c\6\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\u014d\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u014e\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\4\13\1\261\3\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\1\137\7\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\1\13\1\u014f\4\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\3\13\1\274\4\13"+ + "\3\0\1\u0150\76\0\1\u012b\1\u0151\1\0\4\u012b\3\u0151"+ + "\1\0\1\u0151\13\u012b\1\u0151\3\u012b\2\u0151\1\u012b\1\0"+ + "\2\u012b\3\u0151\2\0\2\u0151\3\0\1\u0151\6\u012b\1\u0151"+ + "\11\u012b\25\0\1\356\16\0\1\u012a\35\0\1\u0152\76\0"+ + "\1\u012e\1\u0153\1\0\4\u012e\3\u0153\1\0\1\u0153\13\u012e"+ + "\1\u0153\3\u012e\2\u0153\1\u012e\1\0\2\u012e\3\u0153\2\0"+ + "\2\u0153\3\0\1\u0153\6\u012e\1\u0153\11\u012e\25\0\1\362"+ + "\16\0\1\u012d\53\0\1\232\135\0\1\u0154\100\0\1\u0155"+ + "\35\0\1\255\75\0\1\226\37\0\1\232\77\0\1\u0156"+ + "\15\0\1\5\4\0\5\5\1\0\2\5\1\0\14\5"+ + "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\3\5"+ + "\1\u0157\2\5\1\0\12\5\4\0\5\5\1\0\2\5"+ + "\1\0\2\5\1\255\11\5\1\0\3\5\2\0\1\5"+ + "\1\0\2\5\13\0\6\5\1\0\12\5\4\0\5\5"+ + "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5"+ + "\1\0\2\5\13\0\1\5\1\u0158\4\5\1\0\12\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\3\13\1\137\7\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ + "\1\137\3\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\u013d"+ + "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\u0159\5\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\5\13\1\u015a\5\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\4\13\1\u0110\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\2\13\1\137\5\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\4\13\1\u015b\6\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\310"+ + "\1\0\7\310\1\u015c\7\310\3\u015c\3\310\2\u015c\2\310"+ + "\1\u015c\1\310\1\u015c\1\310\1\154\2\310\1\u015c\14\310"+ + "\1\u015c\11\310\1\u015c\6\310\1\0\7\310\1\u015d\7\310"+ + "\3\u015d\3\310\2\u015d\2\310\1\u015d\1\310\1\u015d\1\310"+ + "\1\154\2\310\1\u015d\14\310\1\u015d\11\310\1\u015d\6\310"+ + "\1\0\7\310\1\u015e\7\310\3\u015e\3\310\2\u015e\2\310"+ + "\1\u015e\1\310\1\u015e\1\310\1\311\2\310\1\u015e\14\310"+ + "\1\u015e\11\310\1\u015e\5\310\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\4\13\1\336\6\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\5\157\1\321\3\157\1\325\7\157"+ + "\3\325\3\157\2\325\2\157\1\325\1\157\1\325\3\157"+ + "\1\322\1\325\14\157\1\325\11\157\1\325\12\157\1\321"+ + "\3\157\1\u015f\7\157\3\u015f\3\157\2\u015f\2\157\1\u015f"+ + "\1\157\1\u015f\3\157\1\322\1\u015f\14\157\1\u015f\11\157"+ + "\1\u015f\5\157\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\5\13\1\174\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\3\13\1\u0160\7\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\2\13\1\u0145\3\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\1\13\1\u0160"+ + "\6\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\u0161\4\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\1\u0162\12\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\265"+ + "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\u0163\5\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\2\13\1\u0164\3\13\1\0"+ + "\1\5\10\13\3\0\1\u012b\76\0\1\u012e\155\0\1\u0165"+ + "\34\0\1\255\136\0\1\u0166\16\0\1\5\4\0\5\5"+ + "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5"+ + "\1\0\2\5\13\0\2\5\1\255\3\5\1\0\12\5"+ + "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ + "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0167\3\5"+ + "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\174\4\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\5\13\1\137\2\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\5\13\1\u0168\5\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\310\1\0"+ + "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152"+ + "\1\310\1\152\1\310\1\154\2\310\1\152\14\310\1\152"+ + "\11\310\1\152\6\310\1\0\7\310\1\312\7\310\3\312"+ + "\3\310\2\312\2\310\1\312\1\310\1\312\1\310\1\154"+ + "\2\310\1\312\14\310\1\312\11\310\1\312\6\310\1\0"+ + "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152"+ + "\1\310\1\152\1\310\1\311\2\310\1\152\14\310\1\152"+ + "\11\310\1\152\5\310\5\157\1\321\3\157\1\323\7\157"+ + "\3\323\3\157\2\323\2\157\1\323\1\157\1\323\3\157"+ + "\1\322\1\323\14\157\1\323\11\157\1\323\5\157\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\u0169\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\265"+ + "\5\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\u016a\2\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\274\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\1\265\3\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\61\0"+ + "\1\255\76\0\1\u016b\15\0\1\5\4\0\5\5\1\0"+ + "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\5\5\1\255\1\0\12\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\u016c"+ + "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\265\5\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\13\1\137\11\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\64\0\1\255\12\0\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\3\13\1\u013f"+ + "\2\13\1\0\1\5\10\13"; + + private static int [] zzUnpackTrans() { + int [] result = new int[21231]; + 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; + } + + + /* 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; + + /* 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 = + "\2\0\3\1\1\11\10\1\1\11\17\1\1\11\4\1"+ + "\2\11\11\1\1\11\5\1\1\11\5\1\1\11\1\1"+ + "\1\0\1\1\1\11\12\1\1\0\1\11\40\1\1\11"+ + "\4\1\1\11\27\1\1\11\7\0\1\11\2\0\1\11"+ + "\7\0\1\1\1\11\7\1\1\0\43\1\1\11\10\1"+ + "\1\11\33\1\20\0\54\1\1\0\1\1\2\0\1\1"+ + "\7\0\32\1\7\0\16\1\2\0\4\1\1\0\1\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[364]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CSharpTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = VERBATIMSTRING; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = DELIMITEDCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CSharpTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CSharpTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 158) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 35: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 36: break; + case 28: + { addToken(Token.PREPROCESSOR); + } + case 37: break; + case 3: + { addNullToken(); return firstToken; + } + case 38: break; + case 30: + { addToken(Token.LITERAL_CHAR); + } + case 39: break; + case 25: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 40: break; + case 4: + { addToken(Token.WHITESPACE); + } + case 41: break; + case 29: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 42: break; + case 22: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 43: break; + case 31: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 44: break; + case 19: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 45: break; + case 21: + { addToken(Token.RESERVED_WORD); + } + case 46: break; + case 10: + { addToken(Token.SEPARATOR); + } + case 47: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 48: break; + case 6: + { addToken(Token.IDENTIFIER); + } + case 49: break; + case 13: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzEndRead, Token.PREPROCESSOR); addNullToken(); return firstToken; + } + case 50: break; + case 8: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 51: break; + case 9: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 52: break; + case 32: + { addToken(Token.DATA_TYPE); + } + case 53: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 54: break; + case 23: + { addToken(Token.ERROR_CHAR); + } + case 55: break; + case 33: + { addToken(Token.LITERAL_BOOLEAN); + } + case 56: break; + case 20: + { start = zzMarkedPos-2; yybegin(VERBATIMSTRING); + } + case 57: break; + case 24: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 58: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 59: break; + case 34: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 60: break; + case 16: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 61: break; + case 18: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 62: break; + case 27: + { start = zzMarkedPos-3; yybegin(DOCUMENTCOMMENT); + } + case 63: break; + case 17: + { start = zzMarkedPos-2; yybegin(DELIMITEDCOMMENT); + } + case 64: break; + case 7: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 65: break; + case 5: + { addToken(Token.OPERATOR); + } + case 66: break; + case 26: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; + } + case 67: break; + case 15: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 68: break; + case 1: + { + } + case 69: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 70: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case VERBATIMSTRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 365: break; + case DOCUMENTCOMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 366: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 367: break; + case DELIMITEDCOMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 368: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex new file mode 100644 index 0000000..5a4ba1e --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex @@ -0,0 +1,647 @@ +/* + * 11/13/2004 + * + * CTokenMaker.java - An object that can take a chunk of text and + * return a linked list of tokens representing it in the C programming + * language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the C programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.6 + * + */ +%% + +%public +%class CTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +LetterOrUnderscore = ({Letter}|[_]) +Digit = [0-9] +HexDigit = {Digit}|[A-Fa-f] +OctalDigit = [0-7] +Exponent = [eE][+-]?{Digit}+ + +PreprocessorWord = define|elif|else|endif|error|if|ifdef|ifndef|include|line|pragma|undef + +Trigraph = ("??="|"??("|"??)"|"??/"|"??'"|"??<"|"??>"|"??!"|"??-") + +OctEscape1 = ([\\]{OctalDigit}) +OctEscape2 = ([\\]{OctalDigit}{OctalDigit}) +OctEscape3 = ([\\][0-3]{OctalDigit}{OctalDigit}) +OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) +HexEscape = ([\\][xX]{HexDigit}{HexDigit}) + +AnyChrChr = ([^\'\n\\]) +Escape = ([\\]([abfnrtv\'\"\?\\0e])) +UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) +CharLiteral = ({UnclosedCharLiteral}[\']) +ErrorUnclosedCharLiteral = ([\'][^\'\n]*) +ErrorCharLiteral = (([\'][\'])|{ErrorUnclosedCharLiteral}[\']) +AnyStrChr = ([^\"\n\\]) +FalseTrigraph = (("?"(("?")*)[^\=\(\)\/\'\<\>\!\-\\\?\"\n])|("?"[\=\(\)\/\'\<\>\!\-])) +StringLiteral = ([\"]((((("?")*)({Escape}|{OctEscape}|{HexEscape}|{Trigraph}))|{FalseTrigraph}|{AnyStrChr})*)(("?")*)[\"]) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + + +LineTerminator = \n +WhiteSpace = [ \t\f] + +MLCBegin = "/*" +MLCEnd = "*/" +LineCommentBegin = "//" + +NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) +IntegerLiteral = ({Digit}+{Exponent}?{NonFloatSuffix}?) +HexLiteral = ("0"[xX]{HexDigit}+{NonFloatSuffix}?) +FloatLiteral = ((({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*)){Exponent}?[fFlL]?) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) + +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") +Identifier = ({LetterOrUnderscore}({LetterOrUnderscore}|{Digit}|[$])*) +ErrorIdentifier = ({NonSeparator}+) + + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state MLC +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "auto" | + "break" | + "case" | + "const" | + "continue" | + "default" | + "do" | + "else" | + "enum" | + "extern" | + "for" | + "goto" | + "if" | + "register" | + "sizeof" | + "static" | + "struct" | + "switch" | + "typedef" | + "union" | + "volatile" | + "while" { addToken(Token.RESERVED_WORD); } + + "return" { addToken(Token.RESERVED_WORD_2); } + + /* Data types. */ + "char" | + "div_t" | + "double" | + "float" | + "int" | + "ldiv_t" | + "long" | + "short" | + "signed" | + "size_t" | + "unsigned" | + "void" | + "wchar_t" { addToken(Token.DATA_TYPE); } + + /* Standard functions */ + "abort" | + "abs" | + "acos" | + "asctime" | + "asin" | + "assert" | + "atan2" | + "atan" | + "atexit" | + "atof" | + "atoi" | + "atol" | + "bsearch" | + "btowc" | + "calloc" | + "ceil" | + "clearerr" | + "clock" | + "cosh" | + "cos" | + "ctime" | + "difftime" | + "div" | + "errno" | + "exit" | + "exp" | + "fabs" | + "fclose" | + "feof" | + "ferror" | + "fflush" | + "fgetc" | + "fgetpos" | + "fgetwc" | + "fgets" | + "fgetws" | + "floor" | + "fmod" | + "fopen" | + "fprintf" | + "fputc" | + "fputs" | + "fputwc" | + "fputws" | + "fread" | + "free" | + "freopen" | + "frexp" | + "fscanf" | + "fseek" | + "fsetpos" | + "ftell" | + "fwprintf" | + "fwrite" | + "fwscanf" | + "getchar" | + "getc" | + "getenv" | + "gets" | + "getwc" | + "getwchar" | + "gmtime" | + "isalnum" | + "isalpha" | + "iscntrl" | + "isdigit" | + "isgraph" | + "islower" | + "isprint" | + "ispunct" | + "isspace" | + "isupper" | + "isxdigit" | + "labs" | + "ldexp" | + "ldiv" | + "localeconv" | + "localtime" | + "log10" | + "log" | + "longjmp" | + "malloc" | + "mblen" | + "mbrlen" | + "mbrtowc" | + "mbsinit" | + "mbsrtowcs" | + "mbstowcs" | + "mbtowc" | + "memchr" | + "memcmp" | + "memcpy" | + "memmove" | + "memset" | + "mktime" | + "modf" | + "offsetof" | + "perror" | + "pow" | + "printf" | + "putchar" | + "putc" | + "puts" | + "putwc" | + "putwchar" | + "qsort" | + "raise" | + "rand" | + "realloc" | + "remove" | + "rename" | + "rewind" | + "scanf" | + "setbuf" | + "setjmp" | + "setlocale" | + "setvbuf" | + "setvbuf" | + "signal" | + "sinh" | + "sin" | + "sprintf" | + "sqrt" | + "srand" | + "sscanf" | + "strcat" | + "strchr" | + "strcmp" | + "strcmp" | + "strcoll" | + "strcpy" | + "strcspn" | + "strerror" | + "strftime" | + "strlen" | + "strncat" | + "strncmp" | + "strncpy" | + "strpbrk" | + "strrchr" | + "strspn" | + "strstr" | + "strtod" | + "strtok" | + "strtol" | + "strtoul" | + "strxfrm" | + "swprintf" | + "swscanf" | + "system" | + "tanh" | + "tan" | + "time" | + "tmpfile" | + "tmpnam" | + "tolower" | + "toupper" | + "ungetc" | + "ungetwc" | + "va_arg" | + "va_end" | + "va_start" | + "vfprintf" | + "vfwprintf" | + "vprintf" | + "vsprintf" | + "vswprintf" | + "vwprintf" | + "wcrtomb" | + "wcscat" | + "wcschr" | + "wcscmp" | + "wcscoll" | + "wcscpy" | + "wcscspn" | + "wcsftime" | + "wcslen" | + "wcsncat" | + "wcsncmp" | + "wcsncpy" | + "wcspbrk" | + "wcsrchr" | + "wcsrtombs" | + "wcsspn" | + "wcsstr" | + "wcstod" | + "wcstok" | + "wcstol" | + "wcstombs" | + "wcstoul" | + "wcsxfrm" | + "wctob" | + "wctomb" | + "wmemchr" | + "wmemcmp" | + "wmemcpy" | + "wmemmove" | + "wmemset" | + "wprintf" | + "wscanf" { addToken(Token.FUNCTION); } + + /* Standard-defined macros. */ + "__DATE__" | + "__TIME__" | + "__FILE__" | + "__LINE__" | + "__STDC__" { addToken(Token.PREPROCESSOR); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* Preprocessor directives */ + "#"{WhiteSpace}*{PreprocessorWord} { addToken(Token.PREPROCESSOR); } + + /* String/Character Literals. */ + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } + {ErrorUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + + /* Comment Literals. */ + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + /* Separators. */ + "(" | + ")" | + "[" | + "]" | + "{" | + "}" { addToken(Token.SEPARATOR); } + + /* Operators. */ + {Trigraph} | + "=" | + "+" | + "-" | + "*" | + "/" | + "%" | + "~" | + "<" | + ">" | + "<<" | + ">>" | + "==" | + "+=" | + "-=" | + "*=" | + "/=" | + "%=" | + "&=" | + "|=" | + "^=" | + ">=" | + "<=" | + "!=" | + ">>=" | + "<<=" | + "^" | + "&" | + "&&" | + "|" | + "||" | + "?" | + ":" | + "," | + "!" | + "++" | + "--" | + "." | + "," { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + /* Some lines will end in '\' to wrap an expression. */ + "\\" { addToken(Token.IDENTIFIER); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Other punctuation, we'll highlight it as "identifiers." */ + ";" { addToken(Token.IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java new file mode 100644 index 0000000..e213b2e --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java @@ -0,0 +1,2083 @@ +/* The following code was generated by JFlex 1.4.1 on 3/22/15 4:43 PM */ + +/* + * 11/13/2004 + * + * CTokenMaker.java - An object that can take a chunk of text and + * return a linked list of tokens representing it in the C programming + * language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the C programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated CTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.6 + * + */ + +public class CTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44"+ + "\1\57\1\60\1\65\1\113\1\33\1\31\1\31\1\51\1\7\1\64"+ + "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70"+ + "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102"+ + "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110"+ + "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\115\1\2"+ + "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13"+ + "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16"+ + "\1\67\1\22\1\45\1\71\1\73\1\75\1\74\1\112\1\114\1\112"+ + "\1\64\uff81\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 = + "\3\0\1\1\2\2\1\3\1\4\16\2\2\4\1\5"+ + "\1\4\1\6\3\4\1\2\1\7\1\10\2\2\1\3"+ + "\1\11\1\4\2\1\1\2\1\4\3\2\2\4\2\12"+ + "\1\13\5\12\1\14\2\12\1\2\2\15\2\3\1\16"+ + "\2\2\1\17\21\2\1\17\50\2\1\0\1\20\1\21"+ + "\2\22\1\23\1\6\2\10\1\24\7\2\1\15\6\1"+ + "\1\0\11\2\2\0\1\25\6\0\5\2\1\3\1\0"+ + "\1\3\1\15\1\16\2\2\1\26\5\2\1\26\17\2"+ + "\1\27\15\2\1\26\1\2\1\26\45\2\1\6\1\30"+ + "\1\6\3\22\1\6\2\10\1\31\6\2\1\32\4\1"+ + "\1\33\4\1\6\0\10\2\10\0\5\2\1\16\1\0"+ + "\27\2\1\27\37\2\1\26\2\2\1\26\6\2\1\6"+ + "\1\10\6\2\2\32\7\1\4\0\1\33\4\0\10\2"+ + "\2\0\1\34\2\0\1\35\50\2\1\32\1\33\3\1"+ + "\7\0\7\2\4\0\5\2\1\36\5\2\2\1\1\33"+ + "\3\0\4\2\2\0\1\33"; + + private static int [] zzUnpackAction() { + int [] result = new int[503]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ + "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ + "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ + "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\352\0\u0750"+ + "\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0750\0\u0af8"+ + "\0\u0750\0\u0750\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc"+ + "\0\u0d1a\0\u0750\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0750"+ + "\0\u0eee\0\u0f3c\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110"+ + "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380"+ + "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ + "\0\u163e\0\u168c\0\u16da\0\u1728\0\u0138\0\u1776\0\u17c4\0\u1812"+ + "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82"+ + "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2"+ + "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62"+ + "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2"+ + "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u0750\0\u0750"+ + "\0\u23f4\0\u2442\0\u0750\0\u2490\0\u24de\0\u252c\0\u0750\0\u257a"+ + "\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea"+ + "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ + "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca"+ + "\0\u2d18\0\u0750\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec"+ + "\0\u2f3a\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u0fd8"+ + "\0\u315c\0\u0fd8\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330"+ + "\0\u337e\0\u33cc\0\u0138\0\u341a\0\u3468\0\u34b6\0\u3504\0\u3552"+ + "\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2"+ + "\0\u3810\0\u385e\0\u0138\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4"+ + "\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54"+ + "\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4"+ + "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ + "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ + "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884"+ + "\0\u48d2\0\u0750\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6"+ + "\0\u4af4\0\u0750\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8"+ + "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ + "\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u51a8"+ + "\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u53ca\0\u5418"+ + "\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a\0\u5688"+ + "\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa\0\u58f8"+ + "\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68"+ + "\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8"+ + "\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u6048"+ + "\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8"+ + "\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528"+ + "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798"+ + "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08"+ + "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78"+ + "\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8"+ + "\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158"+ + "\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8"+ + "\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638"+ + "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ + "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u3d3e\0\u7a2e\0\u7a7c\0\u7aca"+ + "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ + "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ + "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ + "\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a"+ + "\0\u0fd8\0\352\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e"+ + "\0\u86ac\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce"+ + "\0\u891c\0\u3246\0\u896a\0\u89b8\0\u77be\0\u8a06\0\u78a8\0\u8a54"+ + "\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u0138\0\u8bda\0\u8c28\0\u8c76"+ + "\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u0750\0\u8dfc\0\u8e4a\0\u8e98"+ + "\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u0138"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[503]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10"+ + "\1\11\1\12\1\13\1\14\1\5\1\15\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+ + "\1\30\1\31\1\32\1\33\1\34\1\35\1\30\1\36"+ + "\1\37\1\7\1\5\1\40\1\41\1\42\1\43\1\44"+ + "\1\45\1\30\2\5\1\46\1\5\1\47\1\50\2\4"+ + "\1\31\1\51\1\52\1\30\1\5\1\53\1\52\1\54"+ + "\4\5\2\7\1\5\1\55\10\5\1\31\1\56\1\57"+ + "\1\30\12\60\1\61\30\60\1\62\5\60\1\63\14\60"+ + "\1\64\2\60\1\65\24\60\12\66\1\67\30\66\1\70"+ + "\22\66\1\71\2\66\1\72\24\66\7\4\1\0\17\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\73"+ + "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\3\74\1\7\1\74"+ + "\1\7\1\75\1\0\1\74\1\75\3\74\1\76\4\74"+ + "\1\77\4\74\11\0\1\74\1\7\1\74\2\0\2\74"+ + "\1\7\2\0\1\77\1\76\1\100\1\74\1\0\3\74"+ + "\4\0\2\74\1\0\5\74\2\7\12\74\13\0\1\52"+ + "\20\0\1\52\65\0\1\4\6\5\1\0\1\5\1\101"+ + "\1\5\1\102\4\5\1\103\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\104\1\105\1\5\1\106\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\2\5\1\107\16\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\110\1\111\2\5\1\112\1\113\1\114\1\115\1\116"+ + "\1\5\1\117\1\120\1\121\1\122\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\123\1\0\1\124\20\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\125\1\5\1\126"+ + "\1\5\1\127\10\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\130\7\5\1\131\3\5\1\120\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\132\1\5\1\133\2\5"+ + "\1\134\1\135\1\5\1\136\1\5\1\137\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\140\1\141\1\0"+ + "\1\142\3\5\1\143\3\5\1\144\10\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\145\12\5\1\146\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\147\14\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\150\3\5\1\151"+ + "\2\5\1\152\3\5\1\153\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\154\1\155\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\156\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\157\5\5\1\160\1\161"+ + "\1\5\1\162\4\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\6\5\1\163\2\5\1\164\1\165\4\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\166\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\167"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\170"+ + "\6\5\1\165\5\5\1\171\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\172\6\5\1\173\3\5\1\174\2\5"+ + "\11\0\1\4\2\5\2\0\1\5\1\175\1\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\5\1\171\17\5\33\0\1\176\116\0"+ + "\1\52\233\0\1\52\1\0\1\177\16\0\1\200\44\0"+ + "\27\201\1\202\3\201\1\203\4\201\1\204\2\201\1\0"+ + "\52\201\30\0\1\52\3\0\1\30\111\0\1\52\4\0"+ + "\1\30\110\0\1\52\6\0\1\52\56\0\40\41\1\205"+ + "\2\41\1\206\1\207\51\41\1\4\6\5\1\0\2\5"+ + "\1\210\3\5\1\210\1\5\1\211\2\5\1\137\1\212"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\213\20\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\214\1\215\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\216\1\0\21\5\4\0\3\74\1\7"+ + "\1\74\1\7\1\75\1\0\1\74\1\75\3\74\1\76"+ + "\4\74\1\77\4\74\11\0\1\74\1\7\1\217\2\0"+ + "\2\74\1\7\2\0\1\77\1\76\1\100\1\74\1\0"+ + "\3\74\4\0\2\74\1\0\2\74\1\217\2\74\2\7"+ + "\12\74\54\0\1\45\50\0\1\100\1\0\1\100\33\0"+ + "\1\100\5\0\1\100\26\0\2\100\16\0\7\4\1\0"+ + "\1\220\1\221\1\4\1\222\1\4\1\223\4\4\1\224"+ + "\1\225\3\4\11\0\3\4\2\0\3\4\1\226\1\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\1\4\6\5\1\0\3\5\1\227\4\5"+ + "\1\230\3\5\1\231\1\5\1\232\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\4\5\1\233\14\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\134\2\5\1\234"+ + "\1\5\1\137\2\5\1\235\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\236\1\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\237\10\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\34\0\1\52"+ + "\62\0\1\52\32\0\1\52\63\0\1\52\1\0\12\60"+ + "\1\0\30\60\1\0\5\60\1\0\14\60\1\0\2\60"+ + "\1\0\24\60\13\0\1\240\53\0\1\241\60\0\1\242"+ + "\152\0\1\243\117\0\1\244\24\0\12\66\1\0\30\66"+ + "\1\0\22\66\1\0\2\66\1\0\24\66\13\0\1\245"+ + "\53\0\1\246\115\0\1\247\117\0\1\250\24\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\1\5\1\251\1\0\1\252\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\11\5\1\253\1\5\1\254"+ + "\3\5\1\255\1\5\4\0\7\74\1\0\17\74\11\0"+ + "\3\74\2\0\3\74\2\0\2\74\1\0\1\74\1\0"+ + "\3\74\4\0\2\74\1\0\21\74\4\0\3\74\1\256"+ + "\1\74\1\256\1\74\1\257\17\74\10\0\1\257\1\74"+ + "\1\256\1\74\2\0\2\74\1\256\2\0\2\74\1\0"+ + "\1\74\1\0\3\74\4\0\2\74\1\0\5\74\2\256"+ + "\12\74\4\0\7\74\1\0\12\74\1\260\4\74\11\0"+ + "\3\74\2\0\3\74\2\0\1\260\1\74\1\0\1\74"+ + "\1\0\3\74\4\0\2\74\1\0\21\74\4\0\7\74"+ + "\1\0\5\74\1\260\11\74\11\0\3\74\2\0\3\74"+ + "\2\0\1\74\1\260\1\0\1\74\1\0\3\74\4\0"+ + "\2\74\1\0\21\74\4\0\3\74\1\100\1\74\1\100"+ + "\1\261\1\0\1\74\1\261\1\262\2\74\1\262\11\74"+ + "\11\0\1\74\1\100\1\74\2\0\2\74\1\100\2\0"+ + "\1\74\1\262\1\0\1\262\1\0\3\74\4\0\2\74"+ + "\1\0\5\74\2\100\12\74\4\0\1\4\6\5\1\0"+ + "\2\5\1\263\14\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\264\14\5\11\0\1\4\2\5\2\0\1\265"+ + "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\12\5\1\266\4\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\12\5\1\267\4\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\270\10\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\271\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\272\7\5\1\273\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\274\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\275\1\276\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\5\5\1\277\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\300\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\301\7\5"+ + "\1\136\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\302\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\125\3\5\1\303\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\304\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\160\2\5\1\305\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\1\5\1\306\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\307\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\310\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\311\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\134\1\312\3\5\1\137"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\313\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\314\4\5\1\315"+ + "\1\316\2\5\1\317\1\320\1\321\1\322\1\323\1\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\2\5\1\324\16\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\325\1\5\1\326\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\327\4\5\1\330\3\5\1\331\1\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\332\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\333\10\5\1\334"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\3\5\1\335\15\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\136\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\336\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\337\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\160\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\340\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\341\4\5\1\342\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\343\2\5\1\134\4\5\1\137"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\344"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\272"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\345"+ + "\7\5\1\174\1\346\1\347\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\350\1\0\1\351\20\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\352\1\310\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\353\14\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\354\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\355\6\5\1\356"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\357"+ + "\1\5\1\333\10\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\360\1\270\10\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\361\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\227\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\362\2\5\1\363\6\5\1\364\1\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\275\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\365\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\273\20\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\366\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\367\2\5\1\370\2\5"+ + "\1\171\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\306\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\371"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\273"+ + "\1\5\1\144\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\372\6\5\1\373\3\5\1\374\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\375\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\155\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\16\5\1\376\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\276\16\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\360\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\303\1\377\1\u0100\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\216\1\0\21\5\34\0"+ + "\10\52\56\0\33\u0101\1\u0102\7\u0101\1\0\101\u0101\1\u0103"+ + "\3\u0101\1\u0102\7\u0101\1\0\57\u0101\1\u0104\3\u0101\2\201"+ + "\1\u0101\1\201\2\u0101\1\201\4\u0101\1\201\2\u0101\1\201"+ + "\3\u0101\1\u0105\4\u0101\1\201\1\u0106\1\u0107\1\0\3\201"+ + "\1\u0106\17\u0101\1\201\3\u0101\1\u0107\2\u0101\2\u0106\16\u0101"+ + "\5\206\1\41\3\206\2\41\1\206\1\41\2\206\1\41"+ + "\4\206\1\41\2\206\1\41\3\206\1\41\4\206\2\41"+ + "\1\u0108\1\0\4\41\17\206\1\41\3\206\1\u0108\2\206"+ + "\2\41\56\206\1\u0109\3\206\1\u010a\51\206\1\4\6\5"+ + "\1\0\13\5\1\137\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\213\20\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u010b\1\5\1\u010c\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\1\5\1\u010d\4\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\137\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u010e\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u010f\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u0110\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\3\74\4\u0111\1\0\3\u0111\6\74\1\u0111\2\74"+ + "\1\u0111\2\74\11\0\1\74\1\u0111\1\74\2\0\1\74"+ + "\2\u0111\2\0\2\74\1\0\1\u0111\1\0\3\74\4\0"+ + "\2\74\1\0\5\74\2\u0111\2\74\2\u0111\5\74\1\u0111"+ + "\4\0\7\4\1\0\1\4\1\u0112\15\4\11\0\3\4"+ + "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ + "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4"+ + "\1\u0113\1\u0114\1\4\1\u0115\7\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\2\4\1\u0116"+ + "\1\4\1\u0117\12\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\3\4\1\u0118\13\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\4\4\1\u0119\12\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\7\4\1\u011a\7\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\14\0\1\u011b\1\u011c"+ + "\1\0\1\u011d\1\0\1\u011e\4\0\1\u011f\1\u0120\24\0"+ + "\1\226\45\0\1\4\6\5\1\0\16\5\1\u0121\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\315\4\5\1\320"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\333"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0122"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0123"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0124"+ + "\1\u0125\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\u0126\1\u0127\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\172\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u0128\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\144\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\21\0\1\u0129\123\0\1\u012a"+ + "\161\0\1\u012b\117\0\1\u012c\41\0\1\u012d\123\0\1\u012e"+ + "\161\0\1\u012f\117\0\1\u0130\24\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\14\5\1\u0131\4\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\14\5\1\u0132\4\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\12\5\1\u0133\6\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\14\5\1\u0134\4\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\13\5\1\u0135\5\5\4\0\3\74\1\256\1\74"+ + "\1\256\1\74\1\0\5\74\1\76\4\74\1\77\4\74"+ + "\11\0\1\74\1\256\1\74\2\0\2\74\1\256\2\0"+ + "\1\77\1\76\1\0\1\74\1\0\3\74\4\0\2\74"+ + "\1\0\5\74\2\256\12\74\7\0\1\256\1\0\1\256"+ + "\33\0\1\256\5\0\1\256\26\0\2\256\16\0\3\74"+ + "\1\u0136\1\74\1\u0136\1\74\1\u0137\17\74\10\0\1\u0137"+ + "\1\74\1\u0136\1\74\2\0\2\74\1\u0136\2\0\2\74"+ + "\1\0\1\74\1\0\3\74\4\0\2\74\1\0\5\74"+ + "\2\u0136\12\74\4\0\1\4\6\5\1\0\14\5\1\u0138"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\171"+ + "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\1\5\1\126\4\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\1\5\1\u0139\1\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\16\5\1\125"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\125\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u013a\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\273\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u013b\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u013c\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\273\14\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\12\5\1\u013d\4\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u013e\3\5\1\126"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u013f"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0140\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\273\6\5\1\u0141\3\5\1\310\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\2\5\1\u0142"+ + "\16\5\4\0\1\4\6\5\1\0\1\5\1\367\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\352\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u0143\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\273\10\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0144\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\273\16\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\5\5\1\354\11\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u0145\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u0146\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u0147\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u0148\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\u0149\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u014a\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\u014b\2\5\1\u014c\4\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\u014d\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u014e\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\314\16\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\2\5\1\u0142\16\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\1\265\2\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\15\5\1\u014f\1\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u0150\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\6\5\1\u0151\12\5\4\0\1\4"+ + "\6\5\1\0\5\5\1\u0152\11\5\11\0\1\4\2\5"+ + "\2\0\1\u0153\1\u0154\1\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5"+ + "\1\u0155\11\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\273\1\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0156\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0157\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\310\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\276\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\126\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\157\1\171"+ + "\1\5\1\u0158\1\303\1\u0159\1\u015a\1\5\1\u015b\1\u015c"+ + "\1\u015d\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u015e\1\0\2\5\1\u015f\16\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0160\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0161\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0162\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\227\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u0163\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0164\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5"+ + "\1\u0165\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\336\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0121\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0166\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\273\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\u0167\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u013f\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0168\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0169\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\u016a\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\313\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u016b\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u016c\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u016d\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\4\5\1\u016e\12\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\6\5\1\273\2\5\1\u016f\5\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\1\u0170\20\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\273\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\144\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\125\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\2\5\1\u0171\16\5\4\0"+ + "\1\4\6\5\1\0\2\5\2\273\1\5\1\273\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0172\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0173\4\5"+ + "\1\273\2\5\1\u016f\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u0170\20\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\u0174\2\5\1\u0175\4\5\1\347"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u0176\3\5"+ + "\1\u0177\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0178\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\303\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\216\1\0\21\5\4\0\33\u0101\1\203"+ + "\7\u0101\1\0\102\u0101\3\201\1\u0105\4\201\3\u0101\1\0"+ + "\57\u0101\1\201\25\u0101\1\u0102\5\u0101\1\201\1\u0101\1\0"+ + "\3\u0101\1\201\26\u0101\2\201\16\u0101\33\0\1\u0102\62\0"+ + "\5\u0101\1\u0104\25\u0101\1\u0102\5\u0101\1\u0104\1\u0101\1\0"+ + "\3\u0101\1\u0104\26\u0101\2\u0104\21\u0101\4\u0179\1\u0101\3\u0179"+ + "\6\u0101\1\u0179\2\u0101\1\u0179\6\u0101\1\203\5\u0101\1\u0179"+ + "\1\u0101\1\0\2\u0101\2\u0179\5\u0101\1\u0179\20\u0101\2\u0179"+ + "\2\u0101\2\u0179\5\u0101\1\u0179\4\u0101\3\206\4\u017a\1\206"+ + "\3\u017a\6\206\1\u017a\2\206\1\u017a\13\206\1\u0109\1\u017a"+ + "\2\206\1\u010a\1\206\2\u017a\5\206\1\u017a\20\206\2\u017a"+ + "\2\206\2\u017a\5\206\1\u017a\47\206\1\0\52\206\1\4"+ + "\6\5\1\0\1\313\16\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\u017b\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\336\4\5\1\u017c\5\5\1\u017d\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u017e\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u017f\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\u0180\20\5"+ + "\4\0\3\74\4\u0111\1\0\3\u0111\2\74\1\u0181\3\74"+ + "\1\u0111\1\u0182\1\74\1\u0111\2\74\11\0\1\74\1\u0111"+ + "\1\74\2\0\1\74\2\u0111\2\0\1\u0182\1\u0181\1\0"+ + "\1\u0111\1\0\3\74\4\0\2\74\1\0\5\74\2\u0111"+ + "\2\74\2\u0111\5\74\1\u0111\4\0\7\4\1\0\2\4"+ + "\1\223\14\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\1\u0183\16\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\3\4\1\u0184"+ + "\2\4\1\u0185\10\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\7\4\1\u0186\7\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\1\u0187\3\4\1\u0119\12\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\11\4\1\u0188\5\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\4\4\1\u0185\12\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\1\u0187\16\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\14\4\1\u0189\2\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\15\0\1\u018a\120\0\1\u018b\1\u018c\1\0\1\u018d"+ + "\110\0\1\u018e\1\0\1\u018f\114\0\1\u0190\116\0\1\u0191"+ + "\120\0\1\u0192\76\0\1\4\6\5\1\0\1\5\1\273"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\u0193"+ + "\1\5\1\u0194\12\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u0195\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\171\1\5\1\u0158\1\303\1\u0159\1\u0196\1\5"+ + "\1\u015b\1\5\1\u015d\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u0197\1\0\2\5\1\u015f\16\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0198\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u0199\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\u019a\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\270\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\15\0"+ + "\1\u012a\174\0\1\u019b\50\0\1\u019c\146\0\1\u019d\52\0"+ + "\1\u012e\174\0\1\u019e\50\0\1\u019f\146\0\1\u01a0\41\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\16\5\1\u01a1\2\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\1\5\1\u01a1\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\13\5\1\u01a1\5\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\15\5\1\u01a1\3\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\11\5\1\u01a2\7\5\4\0\3\74"+ + "\1\u0136\1\74\1\u0136\1\74\1\0\2\74\1\262\2\74"+ + "\1\262\11\74\11\0\1\74\1\u0136\1\74\2\0\2\74"+ + "\1\u0136\2\0\1\74\1\262\1\0\1\262\1\0\3\74"+ + "\4\0\2\74\1\0\5\74\2\u0136\12\74\7\0\1\u0136"+ + "\1\0\1\u0136\33\0\1\u0136\5\0\1\u0136\26\0\2\u0136"+ + "\16\0\1\4\6\5\1\0\12\5\1\u01a3\4\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\u01a4\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\273\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u016b\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u013e\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\u01a5\10\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\273\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\1\5\1\273\17\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\164\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\303\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\273\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\273\2\5\1\273"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\u01a6\20\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\273\2\5\1\273\1\5\1\164\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\u01a6\20\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0121\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\15\5\1\u0171\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01a7\20\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u01a8\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u01a9\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u01a7\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u01aa\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u01ab\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u01ac\6\5\1\u01ad\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u01ae\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\7\5\1\u0155\11\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\u01af\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\2\5\1\273\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u01b0\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ + "\1\u0154\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\12\5\1\276\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\16\5\1\u0142\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\u010b\12\5\1\354\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\1\5\1\126\4\5\1\0\10\5\1\u01b1\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b2\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\367\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u013e"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b3"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01b4"+ + "\1\5\1\311\2\5\1\u01b5\1\272\1\5\1\u0142\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u0168\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\u01b6\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01b7\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\2\5\1\u01b8\14\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u01b9\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01ba\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01bb\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\6\5\1\u01bc\10\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\u0121\2\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u01bd\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u01be\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u01bf\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\125\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\u01c0\13\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\u0180\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\125\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\15\5\1\u01c1\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u01c2\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\276\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\u01c3\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u016f\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\272\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\5\5\1\273\13\5\4\0\1\4\6\5\1\0"+ + "\4\5\1\u01c4\12\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\272\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\13\5\1\u01b5\2\5\1\u0142\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\u013e\1\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\u0171\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0178\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\10\5\1\u01c5\6\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\3\u0101\4\201"+ + "\1\u0101\3\201\6\u0101\1\201\2\u0101\1\201\6\u0101\1\203"+ + "\5\u0101\1\201\1\u0101\1\0\2\u0101\2\201\5\u0101\1\201"+ + "\20\u0101\2\201\2\u0101\2\201\5\u0101\1\201\4\u0101\3\206"+ + "\4\41\1\206\3\41\6\206\1\41\2\206\1\41\13\206"+ + "\1\u0109\1\41\2\206\1\u010a\1\206\2\41\5\206\1\41"+ + "\20\206\2\41\2\206\2\41\5\206\1\41\4\206\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\236\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u01c6\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u01c7\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u01c8\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\5\1\125\17\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\273\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\7\74\1\0\12\74"+ + "\1\u01c9\4\74\11\0\3\74\2\0\3\74\2\0\1\u01c9"+ + "\1\74\1\0\1\74\1\0\3\74\4\0\2\74\1\0"+ + "\21\74\4\0\7\74\1\0\5\74\1\u01c9\11\74\11\0"+ + "\3\74\2\0\3\74\2\0\1\74\1\u01c9\1\0\1\74"+ + "\1\0\3\74\4\0\2\74\1\0\21\74\4\0\7\4"+ + "\1\0\3\4\1\u0184\13\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\2\4\1\u01ca\14\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\1\4\1\u01ca\15\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\10\4\1\u01cb\6\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\1\4\1\u0184\15\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\5\4\1\u01cc\11\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\15\4\1\u01cd\1\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\16\0\1\u011e\113\0\1\u01ce\120\0\1\u01cf"+ + "\2\0\1\u01d0\116\0\1\u01d1\106\0\1\u01d2\3\0\1\u0191"+ + "\122\0\1\u01d3\110\0\1\u01d0\111\0\1\u01d2\131\0\1\u01d4"+ + "\71\0\1\4\6\5\1\0\3\5\1\u01d5\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\14\5\1\u01bb\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\u01d6\16\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u01b3\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u01d7\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u01d8\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u01d9\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u01da\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\16\5\1\u01db\11\0\1\4"+ + "\2\5\2\0\1\5\1\273\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\36\0\1\u01dc\101\0\1\u012a\51\0\1\u019b\26\0"+ + "\1\u019d\1\u01dd\4\u019d\1\u01dd\17\u019d\3\u01dd\1\u019d\1\u01dd"+ + "\2\0\2\u01dd\1\0\2\u019d\2\0\3\u019d\1\0\1\u01dd"+ + "\2\u019d\1\u01dd\1\u019d\1\0\1\u01dd\1\u019d\5\u01dd\2\u019d"+ + "\1\u01dd\21\u019d\1\0\1\u01dd\34\0\1\u01de\101\0\1\u012e"+ + "\51\0\1\u019e\26\0\1\u01a0\1\u01df\4\u01a0\1\u01df\17\u01a0"+ + "\3\u01df\1\u01a0\1\u01df\2\0\2\u01df\1\0\2\u01a0\2\0"+ + "\3\u01a0\1\0\1\u01df\2\u01a0\1\u01df\1\u01a0\1\0\1\u01df"+ + "\1\u01a0\5\u01df\2\u01a0\1\u01df\21\u01a0\1\0\1\u01df\2\0"+ + "\1\4\5\5\1\u01e0\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\20\5\1\u01e0\4\0\1\4\6\5"+ + "\1\0\5\5\1\u0168\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\313\15\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\273\2\5\1\273\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\u013e\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u0121\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\354\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\272\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\272\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\12\5\1\u01bb\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\u01e1\1\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u01a5\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u01e2\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\155\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u01e3\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\2\5\1\125\14\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\13\5\1\u01b5\1\272\1\5\1\u0142"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\367\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\4\5\1\273\14\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u013f\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\273\4\5\1\273\4\5"+ + "\1\354\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\5\1\273\17\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u01bb\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\125\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\125\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\273\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e4"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e5"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e6\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01e7\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e8\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e9\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\273\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\u0180\20\5\4\0\1\4\6\5\1\0\14\5\1\u013e"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\1\273\2\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\u01ea\20\5"+ + "\4\0\1\4\6\5\1\0\14\5\1\144\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\15\5\1\273\1\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\11\5\1\u01a5\5\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\7\4\1\0\7\4\1\u01ca\7\4\11\0\3\4"+ + "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ + "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\12\4"+ + "\1\u01eb\4\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\16\4\1\u01ec\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\17\0\1\u01cf\114\0\1\u01ed\114\0"+ + "\1\u01ed\124\0\1\u01ee\106\0\1\u01cf\121\0\1\u01ef\125\0"+ + "\1\u01f0\70\0\1\4\6\5\1\0\5\5\1\u0121\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01b1\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01f1\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\273\4\5\1\273"+ + "\4\5\1\354\3\5\1\120\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\5\1\273\17\5\4\0"+ + "\1\4\6\5\1\0\16\5\1\u01db\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ + "\1\273\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\36\0\1\u019d"+ + "\115\0\1\u01a0\63\0\1\4\1\5\1\u01f2\4\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\273"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01f3"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01d5"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f4"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\276"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u013e"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\270"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u010b"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\306"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\7\4\1\0\1\u0185\16\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\14\4\1\u01ca\2\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\23\0\1\u01ed\120\0\1\u01f5\121\0\1\u01f6\67\0"+ + "\1\4\6\5\1\0\16\5\1\120\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\1\5\1\u01f7\4\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u0173\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\125\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\14\0\1\u01d0"+ + "\131\0\1\u01ed\71\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[37050]; + 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; + } + + + /* 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; + + /* 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 = + "\3\0\25\1\1\11\6\1\1\11\6\1\1\11\1\1"+ + "\2\11\7\1\1\11\5\1\1\11\105\1\1\0\2\11"+ + "\2\1\1\11\3\1\1\11\16\1\1\0\11\1\2\0"+ + "\1\11\6\0\6\1\1\0\122\1\1\11\7\1\1\11"+ + "\20\1\6\0\10\1\10\0\6\1\1\0\122\1\4\0"+ + "\1\1\4\0\10\1\2\0\1\1\2\0\56\1\7\0"+ + "\7\1\4\0\15\1\1\11\3\0\4\1\2\0\1\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[503]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 184) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 27: + { addToken(Token.PREPROCESSOR); + } + case 31: break; + case 7: + { addNullToken(); return firstToken; + } + case 32: break; + case 24: + { addToken(Token.LITERAL_CHAR); + } + case 33: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 34: break; + case 17: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 35: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 36: break; + case 26: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 37: break; + case 18: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 38: break; + case 25: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 39: break; + case 14: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 40: break; + case 15: + { addToken(Token.RESERVED_WORD); + } + case 41: break; + case 5: + { addToken(Token.SEPARATOR); + } + case 42: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 43: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 44: break; + case 16: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 45: break; + case 22: + { addToken(Token.FUNCTION); + } + case 46: break; + case 6: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 47: break; + case 8: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 48: break; + case 23: + { addToken(Token.DATA_TYPE); + } + case 49: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 50: break; + case 19: + { addToken(Token.ERROR_CHAR); + } + case 51: break; + case 20: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 52: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 53: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 54: break; + case 30: + { addToken(Token.RESERVED_WORD_2); + } + case 55: break; + case 13: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 56: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 57: break; + case 4: + { addToken(Token.OPERATOR); + } + case 58: break; + case 10: + { + } + case 59: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 60: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 504: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 505: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 506: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex new file mode 100644 index 0000000..7125d87 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex @@ -0,0 +1,561 @@ +/* + * 12/23/2010 + * + * ClojureTokenMaker.java - Scanner for Clojure. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Clojure programming language.

+ * + * The original version of this class was graciously donated by the folks at the + * Fiji project. + * This version has been modified to fix a few issues. + * Its original location was + * here. + *

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated ClojureTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * + */ +%% + +%public +%class ClojureTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ClojureTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + /*case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break;*/ + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + + +LineCommentBegin = (";") +Keyword = ([:][a-zA-Z?!\-+*/][a-zA-Z0-9?!\-+*/]*) +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +StringLiteralStart = ([\"]) +CharLiteral = ("\\."|"\\space"|"\\tab"|"\\newline") +AnyCharacter = ([.]*) +Separator = ([\(\)\{\}\[\]]) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']) + +BooleanLiteral =("true"|"false") + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +IntegerLiteral = ({IntegerHelper1}[lL]?) +HexLiteral = ({IntegerHelper2}[lL]?) +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) + + +Nil = ("nil") +Quote = (\('\|`\)) +Unquote = (\(\~@\|\~\)) +DispatchStart = ("#^"|"#^{") +Dispatch = ({DispatchStart}[^\s\t\n;\"}]*([ \t\n;\"]|"}")) +VarQuote = ("#'"[.]*[ \t\n;(\"]) +DefName = ([a-zA-Z0-9?!\-+*\./<>_]*) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"<"|"*"|">="|"%"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|">>>") +AssignmentOperator = ("=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) + +Letter = [A-Za-z] +LetterOrUnderscore = ({Letter}|[_]) +Digit = [0-9] +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state STRING +%state EOL_COMMENT + +%% + + { + +"case" | +"class" | +"cond" | +"condp" | +"def" | +"defmacro" | +"defn" | +"do" | +"fn" | +"for" | +"if" | +"if-let" | +"if-not" | +"instance?" | +"let" | +"loop" | +"monitor-enter" | +"monitor-exit" | +"new" | +"quote" | +"recur" | +"set!" | +"this" | +"throw" | +"try-finally" | +"var" | +"when" | +"when-first" | +"when-let" | +"when-not" { addToken(Token.RESERVED_WORD); } + +"*warn-on-reflection*" | +"*1" | +"*2" | +"*3" | +"*agent*" | +"*allow-unresolved-args*" | +"*assert*" | +"*clojure-version*" | +"*command-line-args*" | +"*compile-files*" | +"*compile-path*" | +"*e" | +"*err*" | +"*file*" | +"*flush-on-newline*" | +"*fn-loader*" | +"*in*" | +"*math-context*" | +"*ns*" | +"*out*" | +"*print-dup*" | +"*print-length*" | +"*print-level*" | +"*print-meta*" | +"*print-readably*" | +"*read-eval*" | +"*source-path*" | +"*unchecked-math*" | +"*use-context-classloader*" { addToken(Token.VARIABLE); } + +"*current-namespace*" | +"*in*" | +"*out*" | +"*print-meta*" | +"->" | +".." | +"agent" | +"agent-errors" | +"agent-of" | +"aget" | +"alter" | +"and" | +"any" | +"appl" | +"apply" | +"array" | +"aset" | +"aset-boolean" | +"aset-byte" | +"aset-double" | +"aset-float" | +"aset-int" | +"aset-long" | +"aset-short" | +"assoc" | +"binding" | +"boolean" | +"byte" | +"char" | +"clear-agent-errors" | +"commute" | +"comp" | +"complement" | +"concat" | +"conj" | +"cons" | +"constantly" | +"count" | +"cycle" | +"dec" | +"defmethod" | +"defmulti" | +"delay" | +"deref" | +"dissoc" | +"doseq" | +"dotimes" | +"doto" | +"double" | +"drop" | +"drop-while" | +"ensure" | +"eql-ref?" | +"eql?" | +"eval" | +"every" | +"ffirst" | +"filter" | +"find" | +"find-var" | +"first" | +"float" | +"fnseq" | +"frest" | +"gensym" | +"get" | +"hash-map" | +"identity" | +"implement" | +"import" | +"in-namespace" | +"inc" | +"int" | +"into" | +"into-array" | +"iterate" | +"key" | +"keys" | +"lazy-cons" | +"list" | +"list*" | +"load-file" | +"locking" | +"long" | +"make-array" | +"make-proxy" | +"map" | +"mapcat" | +"max" | +"memfn" | +"merge" | +"meta" | +"min" | +"name" | +"namespace" | +"neg?" | +"newline" | +"nil?" | +"not" | +"not-any" | +"not-every" | +"nth" | +"or" | +"peek" | +"pmap" | +"pop" | +"pos?" | +"print" | +"prn" | +"quot" | +"range" | +"read" | +"reduce" | +"ref" | +"refer" | +"rem" | +"remove-method" | +"repeat" | +"replicate" | +"rest" | +"reverse" | +"rfirst" | +"rrest" | +"rseq" | +"second" | +"seq" | +"set" | +"short" | +"sorted-map" | +"sorted-map-by" | +"split-at" | +"split-with" | +"str" | +"strcat" | +"sym" | +"sync" | +"take" | +"take-while" | +"time" | +"unimport" | +"unintern" | +"unrefer" | +"val" | +"vals" | +"vector" | +"with-meta" | +"zero?" | +"zipmap" { addToken(Token.FUNCTION); } + +{LineTerminator} { addNullToken(); return firstToken; } + +{WhiteSpace}+ { addToken(Token.WHITESPACE); } + +{CharLiteral} { addToken(Token.LITERAL_CHAR); } +{StringLiteralStart} { start = zzMarkedPos-1; yybegin(STRING); } + +{Nil} { addToken(Token.DATA_TYPE); } + +{BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + +{Quote} { addToken(Token.SEPARATOR); } +{Unquote} { addToken(Token.SEPARATOR); } +{VarQuote} { addToken(Token.SEPARATOR); } +{Dispatch} { addToken(Token.DATA_TYPE); } + +{LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + +{Separator} { addToken(Token.SEPARATOR); } + +{Operator} { addToken(Token.OPERATOR); } + +{IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } +{HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } +{FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } +{ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } +{Keyword} { addToken(Token.PREPROCESSOR); } +{DefName} { addToken(Token.IDENTIFIER); } + +<> { addNullToken(); return firstToken; } + +. { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \"\" {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java new file mode 100644 index 0000000..38251ec --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java @@ -0,0 +1,2304 @@ +/* The following code was generated by JFlex 1.4.1 on 7/9/16 7:07 PM */ + +/* + * 12/23/2010 + * + * ClojureTokenMaker.java - Scanner for Clojure. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for the Clojure programming language.

+ * + * The original version of this class was graciously donated by the folks at the + * Fiji project. + * This version has been modified to fix a few issues. + * Its original location was + * here. + *

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated ClojureTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * + */ + +public class ClojureTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int STRING = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\57\1\16\1\0\1\37\1\35\22\0\1\60\1\71\1\17"+ + "\1\53\1\72\1\67\1\67\1\12\1\45\1\50\1\66\1\63\1\73"+ + "\1\44\1\20\1\70\1\4\1\15\1\15\1\15\4\7\2\5\1\2"+ + "\1\1\1\64\1\65\1\62\1\36\1\52\3\6\1\42\1\43\1\42"+ + "\5\3\1\41\13\3\1\40\2\3\1\34\1\11\1\34\1\54\1\61"+ + "\1\47\1\23\1\27\1\24\1\76\1\25\1\14\1\104\1\74\1\33"+ + "\1\105\1\106\1\32\1\77\1\30\1\75\1\22\1\101\1\13\1\21"+ + "\1\26\1\10\1\103\1\31\1\100\1\102\1\107\1\55\1\46\1\56"+ + "\1\51\uff81\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 = + "\1\1\2\0\1\2\1\3\1\4\1\1\2\5\1\1"+ + "\1\2\2\1\1\6\1\7\14\1\1\10\1\4\1\11"+ + "\1\4\1\10\1\4\1\2\4\4\11\1\1\12\1\13"+ + "\1\14\1\15\2\12\1\16\2\12\1\17\2\20\1\21"+ + "\1\20\2\22\1\20\1\5\1\20\1\1\1\23\3\0"+ + "\6\1\1\24\3\1\1\25\52\1\1\24\4\1\4\0"+ + "\1\4\3\1\1\26\4\1\1\26\11\1\1\24\13\1"+ + "\1\13\1\12\4\0\1\21\1\22\1\1\1\21\2\1"+ + "\3\0\4\1\1\25\5\1\1\25\4\1\1\24\2\1"+ + "\2\25\40\1\1\24\1\27\1\25\13\1\1\25\3\1"+ + "\2\0\2\27\26\1\1\24\10\1\1\25\4\1\4\0"+ + "\3\1\2\0\4\1\1\25\4\1\2\25\2\1\1\25"+ + "\1\24\1\25\3\1\1\30\1\1\1\25\3\1\1\25"+ + "\3\1\1\24\1\1\1\25\5\1\1\25\3\1\2\0"+ + "\26\1\1\25\2\1\1\0\1\31\1\0\1\1\2\0"+ + "\7\1\1\25\52\1\2\0\1\1\1\0\176\1\1\25"+ + "\112\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[627]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\110\0\220\0\330\0\330\0\u0120\0\u0168\0\u01b0"+ + "\0\u01f8\0\u0240\0\u0288\0\u02d0\0\u0318\0\330\0\330\0\u0360"+ + "\0\u03a8\0\u03f0\0\u0438\0\u0480\0\u04c8\0\u0510\0\u0558\0\u05a0"+ + "\0\u05e8\0\u0630\0\u0678\0\330\0\u0168\0\u06c0\0\u0708\0\u0750"+ + "\0\330\0\u0798\0\u07e0\0\u0828\0\u0870\0\u08b8\0\u0900\0\u0948"+ + "\0\u0990\0\u09d8\0\u0a20\0\u0a68\0\u0ab0\0\u0af8\0\u0b40\0\u0b88"+ + "\0\u0bd0\0\330\0\u0c18\0\u0c60\0\u0ca8\0\330\0\u0cf0\0\u0d38"+ + "\0\u0d80\0\u0dc8\0\u0e10\0\u0e58\0\u0ea0\0\u0e10\0\u0ee8\0\u0f30"+ + "\0\u0e10\0\u0f78\0\u0fc0\0\330\0\u1008\0\u1050\0\u1098\0\u10e0"+ + "\0\u1128\0\u1170\0\u11b8\0\u1200\0\u1248\0\u1290\0\u12d8\0\u1320"+ + "\0\u1368\0\u0168\0\u13b0\0\u13f8\0\u1440\0\u1488\0\u14d0\0\u1518"+ + "\0\u1560\0\u15a8\0\u15f0\0\u1638\0\u1680\0\u16c8\0\u1710\0\u1758"+ + "\0\u17a0\0\u17e8\0\u1830\0\u1878\0\u18c0\0\u1908\0\u1950\0\u1998"+ + "\0\u19e0\0\u1a28\0\u1a70\0\u1ab8\0\u1b00\0\u1b48\0\u1b90\0\u1bd8"+ + "\0\u1c20\0\u1c68\0\u1cb0\0\u1cf8\0\u1d40\0\u1d88\0\u1dd0\0\u1e18"+ + "\0\u1e60\0\u1ea8\0\u1ef0\0\u1f38\0\u1f80\0\u1fc8\0\u2010\0\u2058"+ + "\0\u20a0\0\u20e8\0\u2130\0\u2178\0\u21c0\0\u2208\0\u2250\0\u2298"+ + "\0\u22e0\0\u0168\0\u2328\0\u2370\0\u23b8\0\u2400\0\u2448\0\u2490"+ + "\0\u24d8\0\u2520\0\u2568\0\u25b0\0\u25f8\0\u2640\0\u2688\0\u26d0"+ + "\0\u2718\0\u2760\0\u27a8\0\u27f0\0\u2838\0\u2880\0\u28c8\0\u2910"+ + "\0\u2958\0\u29a0\0\u29e8\0\u2a30\0\330\0\330\0\u2a78\0\u2ac0"+ + "\0\u2b08\0\u2b50\0\u0e10\0\u2b98\0\u2be0\0\u2c28\0\u2c70\0\u2cb8"+ + "\0\u2d00\0\u2d48\0\u2d90\0\u2dd8\0\u2e20\0\u2e68\0\u2eb0\0\u2ef8"+ + "\0\u2f40\0\u2f88\0\u2fd0\0\u3018\0\u3060\0\u30a8\0\u30f0\0\u3138"+ + "\0\u3180\0\u31c8\0\u0168\0\u3210\0\u3258\0\u32a0\0\u32e8\0\u3330"+ + "\0\u3378\0\u33c0\0\u3408\0\u3450\0\u3498\0\u34e0\0\u3528\0\u3570"+ + "\0\u35b8\0\u3600\0\u2ef8\0\u3648\0\u3690\0\u36d8\0\u3720\0\u3768"+ + "\0\u37b0\0\u37f8\0\u3840\0\u3888\0\u38d0\0\u3918\0\u3960\0\u39a8"+ + "\0\u39f0\0\u3a38\0\u3a80\0\u3ac8\0\u3b10\0\u3b58\0\u3ba0\0\u3be8"+ + "\0\u3498\0\u3c30\0\u3c78\0\u3cc0\0\u3d08\0\u3d50\0\u3d98\0\u3de0"+ + "\0\u3e28\0\u3e70\0\u3eb8\0\u3f00\0\u3f48\0\u3f90\0\u3fd8\0\u4020"+ + "\0\u4068\0\u40b0\0\u40f8\0\330\0\u21c0\0\u4140\0\u4188\0\u41d0"+ + "\0\u4218\0\u4260\0\u42a8\0\u42f0\0\u4338\0\u4380\0\u43c8\0\u4410"+ + "\0\u4458\0\u44a0\0\u44e8\0\u4530\0\u4578\0\u45c0\0\u4608\0\u4650"+ + "\0\u4698\0\u46e0\0\u4728\0\u4770\0\u47b8\0\u4800\0\u4848\0\u4890"+ + "\0\u48d8\0\u4920\0\u4968\0\u49b0\0\u49f8\0\u4a40\0\u4a88\0\u4ad0"+ + "\0\u4b18\0\u4b60\0\u4ba8\0\u4bf0\0\u4c38\0\u4c80\0\u4cc8\0\u4d10"+ + "\0\u4d58\0\u4da0\0\u4de8\0\u4e30\0\u4e78\0\u4ec0\0\u4f08\0\u4f50"+ + "\0\u4f98\0\u4fe0\0\u5028\0\u5070\0\u5028\0\u50b8\0\u5100\0\u5148"+ + "\0\u3e70\0\u5190\0\u51d8\0\u5220\0\u5268\0\u0168\0\u52b0\0\u52f8"+ + "\0\u5340\0\u5388\0\u53d0\0\u5418\0\u5460\0\u54a8\0\u54f0\0\u5538"+ + "\0\u5580\0\u55c8\0\u5610\0\u5658\0\u56a0\0\u56e8\0\u5730\0\u5778"+ + "\0\u57c0\0\u5808\0\u5850\0\u5898\0\u58e0\0\u5928\0\u5970\0\u59b8"+ + "\0\u5a00\0\u5a48\0\u5a90\0\u5ad8\0\u5b20\0\u5b68\0\u5bb0\0\u5bf8"+ + "\0\u5c40\0\u5c88\0\u5cd0\0\u5d18\0\u5d60\0\u5da8\0\u5df0\0\u5e38"+ + "\0\u5e80\0\u5ec8\0\u5f10\0\u3690\0\u5f58\0\u5fa0\0\u5fe8\0\u6030"+ + "\0\u6078\0\u60c0\0\u6108\0\u6150\0\u6198\0\u61e0\0\u6228\0\u6270"+ + "\0\u62b8\0\u6300\0\u6348\0\u6390\0\u63d8\0\u6420\0\u6468\0\u64b0"+ + "\0\u64f8\0\u6540\0\u6588\0\u65d0\0\u6618\0\u6660\0\u66a8\0\u66f0"+ + "\0\u6738\0\u6780\0\u67c8\0\u6810\0\u6858\0\u68a0\0\u68e8\0\u6930"+ + "\0\u6978\0\u69c0\0\u6a08\0\u6a50\0\u6a98\0\u6ae0\0\u6b28\0\u6b70"+ + "\0\u6bb8\0\u6c00\0\u6c48\0\u6c90\0\u6cd8\0\u6d20\0\u6d68\0\u6db0"+ + "\0\u6df8\0\u6e40\0\u6e88\0\u6ed0\0\u6f18\0\u6f60\0\u6fa8\0\u6030"+ + "\0\u6ff0\0\u7038\0\u7080\0\u70c8\0\u7110\0\u7158\0\u71a0\0\u71e8"+ + "\0\u7230\0\u7278\0\u72c0\0\u7308\0\u7350\0\u7398\0\u73e0\0\u7428"+ + "\0\u7470\0\u74b8\0\u7500\0\u7548\0\u7590\0\u75d8\0\u7620\0\u7668"+ + "\0\u76b0\0\u76f8\0\u7740\0\u7788\0\u77d0\0\u7818\0\u7860\0\u78a8"+ + "\0\u78f0\0\u7938\0\u7980\0\u79c8\0\u7a10\0\u7a58\0\u7aa0\0\u7ae8"+ + "\0\u7b30\0\u7b78\0\u7bc0\0\u7c08\0\u49f8\0\u7c50\0\u7c98\0\u7ce0"+ + "\0\u7d28\0\u7d70\0\u7db8\0\u7e00\0\u7e48\0\u7e90\0\u7ed8\0\u7f20"+ + "\0\u7f68\0\u7fb0\0\u7ff8\0\u5418\0\u8040\0\u8088\0\u80d0\0\u8118"+ + "\0\u8160\0\u81a8\0\u81f0\0\u8238\0\u8280\0\u82c8\0\u8310\0\u8358"+ + "\0\u83a0\0\u83e8\0\u8430\0\u8478\0\u84c0\0\u8508\0\u8550\0\u8598"+ + "\0\u85e0\0\u8628\0\u8670\0\u86b8\0\u8700\0\u8748\0\u8790\0\u87d8"+ + "\0\u8820\0\u8868\0\u88b0\0\u88f8\0\u8940\0\u8988\0\u89d0\0\u8a18"+ + "\0\u8a60\0\u8aa8\0\u8af0\0\u8b38\0\u8b80\0\u8bc8\0\u8c10\0\u8c58"+ + "\0\u8ca0\0\u8ce8\0\u8d30\0\u8d78\0\u8dc0\0\u8e08\0\u8e50\0\u8e98"+ + "\0\u8ee0\0\u8f28\0\u8f70\0\u8fb8\0\u9000\0\u9048\0\u9090\0\u90d8"+ + "\0\u9120\0\u9168\0\u91b0\0\u91f8\0\u9240\0\u9288\0\u92d0\0\u9318"+ + "\0\u9360\0\u93a8\0\u93f0\0\u9438\0\u9480\0\u94c8\0\u9510\0\u9558"+ + "\0\u95a0\0\u95e8\0\u9630\0\u9678\0\u96c0\0\u9708\0\u9750\0\u9798"+ + "\0\u97e0\0\u9828\0\u9870\0\u98b8\0\u9900\0\u9948\0\u9990\0\u99d8"+ + "\0\u9a20\0\u9a68\0\u9ab0\0\u9af8\0\u9b40\0\u9b88\0\u9bd0\0\u9c18"+ + "\0\u9c60\0\u9ca8\0\u9cf0\0\u9d38\0\u9d80\0\u9dc8\0\u9e10\0\u9e58"+ + "\0\u9ea0\0\u9ee8\0\u9f30\0\u9f78\0\u9fc0\0\ua008\0\ua050\0\ua098"+ + "\0\ua0e0\0\ua128\0\ua170\0\ua1b8\0\ua200\0\ua248\0\ua290\0\ua2d8"+ + "\0\ua320\0\ua368\0\ua3b0\0\ua3f8\0\ua440\0\ua488\0\ua4d0\0\ua518"+ + "\0\ua560\0\ua5a8\0\ua5f0\0\ua638\0\ua680\0\ua6c8\0\ua710\0\ua758"+ + "\0\ua7a0\0\ua7e8\0\u55c8"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[627]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\10\1\11\1\7\1\11"+ + "\1\12\1\13\1\4\1\14\1\15\1\11\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+ + "\1\30\1\31\1\32\1\33\1\34\1\4\1\35\1\36"+ + "\4\7\1\37\1\40\2\4\1\34\1\41\1\4\1\42"+ + "\1\41\2\34\2\36\1\7\1\43\1\35\1\44\1\45"+ + "\1\46\1\41\1\35\1\44\2\4\1\47\1\50\1\51"+ + "\1\52\1\7\1\53\1\7\1\54\1\55\1\7\1\56"+ + "\1\57\11\60\1\61\4\60\1\62\1\63\70\60\14\64"+ + "\1\65\1\64\1\66\12\64\1\67\42\64\1\70\13\64"+ + "\113\0\1\71\2\0\1\71\1\0\1\71\2\0\2\71"+ + "\4\0\13\71\2\0\1\71\1\0\5\71\16\0\1\71"+ + "\2\0\1\71\1\0\2\71\2\0\14\71\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\1\72\2\0\1\73\1\74\1\75\1\73\1\74\1\73"+ + "\1\72\1\0\1\73\1\76\1\74\2\0\1\77\4\73"+ + "\1\100\4\73\1\101\1\73\2\0\1\7\1\0\1\102"+ + "\1\101\1\76\1\100\1\7\2\0\1\72\2\0\2\72"+ + "\5\0\1\73\3\7\1\0\1\7\1\0\2\7\1\72"+ + "\1\0\2\73\1\76\1\73\1\102\7\73\1\72\2\0"+ + "\1\73\2\11\1\73\1\11\1\73\1\72\1\0\1\73"+ + "\1\76\1\11\2\0\1\77\4\73\1\100\4\73\1\101"+ + "\1\73\2\0\1\7\1\0\1\73\1\101\1\76\1\100"+ + "\1\7\2\0\1\72\2\0\2\72\5\0\1\73\3\7"+ + "\1\0\1\7\1\0\2\7\1\72\1\0\2\73\1\76"+ + "\11\73\3\0\6\7\2\0\3\7\2\0\10\7\1\103"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\20\0\1\104\1\105"+ + "\4\0\1\106\1\0\1\107\62\0\6\7\2\0\1\110"+ + "\1\111\1\7\2\0\1\7\1\112\1\7\1\113\1\7"+ + "\1\114\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\110\1\111\1\7\2\0\3\7\1\115\4\7"+ + "\1\116\1\7\1\117\1\120\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\121\12\7\3\0\1\7\2\77\1\7\1\77\1\7"+ + "\2\0\2\7\1\77\2\0\1\122\13\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\2\7"+ + "\1\123\2\7\1\124\1\125\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\126\1\127\4\7\1\130\5\7\3\0\6\7\2\0"+ + "\1\131\2\7\2\0\5\7\1\132\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\133\1\7\1\134\10\7\3\0\6\7"+ + "\2\0\1\135\2\7\2\0\1\7\1\136\1\137\5\7"+ + "\1\140\1\7\1\141\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ + "\1\142\3\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\143\6\7\1\144\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\145"+ + "\1\146\4\7\1\147\5\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\150\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\5\7"+ + "\1\151\1\7\1\152\4\7\3\0\6\7\2\0\1\153"+ + "\2\7\2\0\3\7\1\154\7\7\1\155\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\156\13\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\157\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\160\4\7"+ + "\1\161\5\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\162\1\7\1\163\1\164\4\7\1\165\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\166\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\167\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\170\13\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\171\1\7"+ + "\1\172\5\7\1\173\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\174"+ + "\12\7\3\0\6\7\2\0\1\7\1\175\1\7\2\0"+ + "\6\7\1\176\1\7\1\177\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\200\1\201\10\7\37\0\1\36\17\0\2\36"+ + "\32\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\1\7\1\122\2\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\12\0\1\202\36\0\1\203"+ + "\50\0\1\204\41\0\1\205\36\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\1\7"+ + "\1\206\2\7\1\41\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\41\1\7\1\0\2\7"+ + "\2\0\14\7\65\0\1\41\25\0\5\7\1\207\2\0"+ + "\1\210\1\211\1\212\2\0\1\7\1\213\1\214\1\215"+ + "\1\216\1\217\2\7\1\220\1\221\1\7\1\222\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\223\1\7\1\224\10\7\3\0"+ + "\6\7\2\0\3\7\2\0\3\7\1\225\10\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\1\122\2\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\226\2\7\2\0\5\7\1\227\5\7\1\230"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\231\12\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\232\1\7\1\233\5\7"+ + "\1\234\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\235\12\7\3\0"+ + "\5\7\1\236\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\237\1\7\1\240\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\241\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\242\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\243\5\7"+ + "\1\244\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\11\60\1\0\4\60"+ + "\2\0\70\60\16\245\1\0\71\245\17\0\1\246\70\0"+ + "\14\64\1\0\1\64\1\0\12\64\1\0\42\64\1\0"+ + "\13\64\26\0\1\247\4\0\1\250\105\0\1\251\104\0"+ + "\1\252\64\0\6\71\2\0\3\71\3\0\13\71\2\0"+ + "\1\71\1\0\5\71\16\0\1\71\2\0\1\71\1\0"+ + "\2\71\2\0\14\71\1\72\2\0\7\72\1\0\3\72"+ + "\3\0\13\72\4\0\4\72\3\0\1\72\2\0\2\72"+ + "\5\0\1\72\10\0\1\72\1\0\15\72\2\0\6\73"+ + "\1\72\1\0\3\73\2\0\1\7\13\73\2\0\1\7"+ + "\1\0\4\73\1\7\2\0\1\72\2\0\2\72\5\0"+ + "\1\73\3\7\1\0\1\7\1\0\2\7\1\72\1\0"+ + "\14\73\1\72\2\0\1\73\1\74\1\75\1\73\1\74"+ + "\1\73\1\72\1\0\1\73\1\76\1\74\2\0\1\77"+ + "\4\73\1\100\4\73\1\253\1\73\2\0\1\7\1\0"+ + "\1\73\1\253\1\76\1\100\1\7\2\0\1\72\2\0"+ + "\2\72\5\0\1\73\3\7\1\0\1\7\1\0\2\7"+ + "\1\72\1\0\2\73\1\76\11\73\1\72\2\0\1\73"+ + "\2\75\1\73\1\75\1\73\1\72\1\0\1\73\1\76"+ + "\1\75\2\0\1\77\4\73\1\100\6\73\2\0\1\7"+ + "\1\0\2\73\1\76\1\100\1\7\2\0\1\72\2\0"+ + "\2\72\5\0\1\73\3\7\1\0\1\7\1\0\2\7"+ + "\1\72\1\0\2\73\1\76\11\73\1\72\2\0\1\73"+ + "\2\77\1\73\1\77\1\73\1\72\1\0\1\73\1\76"+ + "\1\77\2\0\1\7\4\73\1\100\6\73\2\0\1\7"+ + "\1\0\2\73\1\76\1\100\1\7\2\0\1\72\2\0"+ + "\2\72\5\0\1\73\3\7\1\0\1\7\1\0\2\7"+ + "\1\72\1\0\2\73\1\76\11\73\1\72\2\0\1\73"+ + "\2\254\1\73\1\254\1\73\1\72\1\0\2\73\1\254"+ + "\2\0\1\7\13\73\2\0\1\7\1\0\4\73\1\255"+ + "\2\0\1\72\2\0\2\72\5\0\1\73\1\7\1\255"+ + "\1\7\1\0\1\7\1\0\2\7\1\72\1\0\14\73"+ + "\1\72\2\0\1\73\4\256\1\73\1\72\1\0\1\73"+ + "\2\256\2\0\1\7\2\73\3\256\1\73\1\256\4\73"+ + "\2\0\1\7\1\0\2\73\2\256\1\7\2\0\1\72"+ + "\2\0\2\72\5\0\1\73\3\7\1\0\1\7\1\0"+ + "\2\7\1\72\1\0\2\73\1\256\11\73\3\0\6\7"+ + "\2\0\1\257\2\7\2\0\13\7\1\260\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\22\0\1\261\110\0\1\262\111\0\1\263"+ + "\65\0\6\7\2\0\3\7\2\0\5\7\1\264\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\265\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\266\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\267\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\1\7\1\270\1\7\2\0\1\7\1\271"+ + "\1\272\1\273\1\274\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\275\1\276\3\7\1\277\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\12\7\1\300\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\112"+ + "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\301"+ + "\12\7\3\0\6\7\2\0\1\264\2\7\2\0\10\7"+ + "\1\302\1\7\1\141\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\303\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\304\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\4\7\1\305\1\7\1\306"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\5\7\1\122\6\7\3\0"+ + "\6\7\2\0\1\307\2\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\310\12\7\3\0\6\7"+ + "\2\0\1\311\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\312"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\3\7\1\122\10\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\122\2\7\1\313"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\314\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\315\1\122"+ + "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\316\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\317\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\320\3\7\1\321\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\2\7"+ + "\1\322\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\122\3\7\1\122\5\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\323\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\324\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\325\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\326\1\7"+ + "\1\327\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\50\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\5\7\1\313\2\0\3\7\2\0"+ + "\10\7\1\330\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\331"+ + "\10\7\3\0\6\7\2\0\3\7\2\0\4\7\1\332"+ + "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\333\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\334"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\335\1\7\1\336\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\5\7\1\337\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\6\7\1\340\5\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\12\7\1\341\1\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\3\7\1\342\10\7"+ + "\3\0\6\7\2\0\1\343\2\7\2\0\13\7\1\344"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\345\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\346\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\342\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\347\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\11\7\1\350\2\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ + "\1\315\3\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\122\13\7\3\0\6\7\2\0"+ + "\3\7\2\0\12\7\1\351\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\352"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\353\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\354"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\13\7\1\355"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\303\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\356\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\357\1\360"+ + "\3\7\1\361\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\362"+ + "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\363\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\364\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\365\2\7"+ + "\1\122\1\7\1\366\5\7\2\0\1\7\1\0\4\7"+ + "\1\367\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\370"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\371\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\46\0\1\372\113\0\1\373\36\0\1\34\14\0"+ + "\2\34\1\204\24\0\1\34\11\0\2\34\27\0\1\205"+ + "\1\374\14\205\2\374\1\205\1\0\34\205\2\374\1\375"+ + "\27\205\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\1\7\1\35\2\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\376\6\7\1\377\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0100\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0101\1\7\1\u0102"+ + "\1\u0103\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\u0104"+ + "\12\7\3\0\6\7\2\0\1\u0105\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0106\10\7\1\u0107\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\10\7\1\u0108\3\7\3\0\5\7\1\u0109\2\0"+ + "\3\7\2\0\12\7\1\u010a\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u010b\12\7\3\0\6\7\2\0\1\u010c\2\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\1\7\1\u010d\12\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\u010e\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\u010d\3\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\5\7\1\u010f\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u0110\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u0111"+ + "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\u0112"+ + "\12\7\3\0\6\7\2\0\1\u0113\1\u0114\1\7\2\0"+ + "\4\7\1\122\5\7\1\317\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u0115"+ + "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\5\7\1\u0116"+ + "\2\0\3\7\2\0\1\7\1\112\4\7\1\u0117\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\2\7\1\307\11\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\4\7"+ + "\1\122\5\7\1\u0118\1\7\3\0\6\7\2\0\1\267"+ + "\2\7\2\0\6\7\1\u0119\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\3\7\1\u011a\10\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\122\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u011b\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\u011c\12\7\3\0"+ + "\6\7\2\0\1\303\2\7\2\0\12\7\1\u011d\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u011e\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\122\1\7"+ + "\1\u011f\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\6\7"+ + "\1\u011d\5\7\3\0\6\7\2\0\1\u0120\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u0121\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\22\0\1\u0122\117\0\1\u0123\106\0\1\u0124\104\0"+ + "\1\u0125\61\0\1\72\2\0\1\73\2\254\1\73\1\254"+ + "\1\73\1\72\1\0\1\73\1\76\1\254\2\0\1\7"+ + "\13\73\2\0\1\7\1\0\2\73\1\76\1\73\1\7"+ + "\2\0\1\72\2\0\2\72\5\0\1\73\3\7\1\0"+ + "\1\7\1\0\2\7\1\72\1\0\2\73\1\76\11\73"+ + "\3\0\1\7\2\254\1\7\1\254\1\7\2\0\2\7"+ + "\1\254\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\1\72"+ + "\2\0\1\73\4\256\1\73\1\72\1\0\1\73\2\256"+ + "\2\0\1\7\2\73\3\256\1\73\1\256\2\73\1\253"+ + "\1\73\2\0\1\7\1\0\1\73\1\253\2\256\1\7"+ + "\2\0\1\72\2\0\2\72\5\0\1\73\3\7\1\0"+ + "\1\7\1\0\2\7\1\72\1\0\2\73\1\256\11\73"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0126\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\u0127\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\3\7"+ + "\1\u0128\10\7\23\0\1\u0129\113\0\1\104\111\0\1\u012a"+ + "\61\0\6\7\2\0\3\7\2\0\1\7\1\271\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\264"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\5\7\1\122\6\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\10\7\1\342\3\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\50\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\6\7\1\122\5\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\301\4\7\1\u012b"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\2\7\1\122"+ + "\11\7\3\0\5\7\1\121\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\5\7\1\u012c\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u012d\12\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u012e\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\1\7\1\337\12\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\3\7\1\271\10\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\u012f\11\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u0130\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0131\12\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\1\7\1\303\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\301\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\271\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u0132\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\4\7\1\122\7\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\271\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\12\7\1\122\1\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\122\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\2\7\1\122\11\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\u0133\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\312\12\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u0134\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\12\7\1\u0135\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\122\1\7\1\u0136\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\303\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\344\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\u0137\10\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0138\2\7\1\301\7\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\2\7\1\u0139\6\7\1\122\2\7\3\0\6\7"+ + "\2\0\3\7\2\0\2\7\1\u013a\11\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u013b\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\342\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\5\7\1\u013c\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\122\1\0\4\7\1\u013d\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\12\7\1\122\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\u0133\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u013e\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u013f\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u0140\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\122\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\u0141\12\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\303\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\2\7\1\u0142\11\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0143\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u0144\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0145\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0146\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\u0147\13\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u0148\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\6\7"+ + "\1\u0149\5\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u014a\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\u014b\11\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\12\7\1\u0142\1\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ + "\1\122\3\7\3\0\6\7\2\0\3\7\2\0\2\7"+ + "\1\303\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\u014c\1\7\1\u014d\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\u014e"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\6\7\1\u014f\5\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\u0150\12\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0151\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u0152\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u0153\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\310\12\7\47\0\1\u0154\106\0"+ + "\1\u0155\44\0\6\7\2\0\3\7\2\0\5\7\1\u0156"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u0157\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u0158"+ + "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0159"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\5\7\1\u015a\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\u015b\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\5\7\1\u015c\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\u015d\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\u015e\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u015f"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u0160\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u0161\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\u0162\12\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u0163\10\7\3\0\6\7\2\0\1\u010d"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\212\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u0164\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u010d\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u0165\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\u0166\13\7\3\0"+ + "\6\7\2\0\3\7\2\0\2\7\1\u0140\11\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0167\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\303\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\3\7\1\u0168\10\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\320\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\7\7\1\332"+ + "\4\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\13\7\1\u0169\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\122\12\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u016a\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\122\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\7\1\234\1\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\13\7\1\u016b\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u016c"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\122\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u016d"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\u016e\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\315\12\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\134"+ + "\10\7\2\0\1\u016f\132\0\1\u0122\102\0\1\u0170\111\0"+ + "\1\u0171\70\0\6\7\2\0\1\7\1\323\1\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\u0172\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\126"+ + "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\24\0\1\u0173\115\0"+ + "\1\u0174\60\0\6\7\2\0\3\7\2\0\13\7\1\u0175"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\342\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\7\7\1\u0176\4\7\3\0\6\7\2\0\1\u0177"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u0178\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u0179\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\273\3\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u017a\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\6\7"+ + "\1\122\5\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u017b\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\u017c\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u017d\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u017e\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0153\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\5\7\1\161\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\1\342\2\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\u017f\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\u0180\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u0181\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\11\7\1\303\2\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\13\7\1\u0182\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0183\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\1\7\1\u0184\12\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u0185\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u0186\1\7\1\u0187\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0188\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u0189\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u018a\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\122\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u018b\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\172\12\7\3\0\6\7"+ + "\2\0\3\7\2\0\5\7\1\172\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\161\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u018c\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u018d\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u018e\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u018f"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u0190\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\50\0\1\34\110\0\1\u0154\41\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0191"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\u0192\13\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\2\7\1\u0193\11\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u0194\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\1\7\1\u0195\12\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u010d\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\1\u0196\2\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\u0197\3\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u0198\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0199\12\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u010f\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\u019a\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\11\7\1\u019b\2\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u019c\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\3\7\1\u019d\10\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u019e\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\u019f\13\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u0121\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\122\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\5\7\1\u01a0\2\0\3\7\2\0\3\7"+ + "\1\u01a1\1\7\1\u01a2\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u01a3\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01a4\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\6\7\1\u01a5\5\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\50\12\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\6\7\1\u01a6\5\7\70\0\1\u01a7\20\0\2\u01a8\6\u0170"+ + "\1\0\1\u01a8\3\u0170\2\0\1\u01a8\13\u0170\1\u01a8\1\0"+ + "\1\u01a8\1\0\4\u0170\2\u01a8\2\0\4\u01a8\5\0\1\u01a8"+ + "\1\0\1\u01a8\1\0\3\u01a8\1\u0170\1\u01a8\1\u0170\1\u01a8"+ + "\14\u0170\2\0\1\u016f\16\0\1\u0122\71\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u01a9\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\25\0\1\104\115\0\1\u01aa\57\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u014e\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u01ab"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\342\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\7\7\1\145\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u01ac"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\2\7\1\u01ad\11\7\3\0\6\7\2\0\1\7"+ + "\1\u01ae\1\7\2\0\1\7\1\u01af\5\7\1\u01b0\2\7"+ + "\1\u01b1\1\313\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\2\7\1\u01b2\11\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\4\7\1\u01b3\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\4\7\1\u01b4\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u01b5\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u01b6\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\13\7\1\u01b7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\11\7\1\u01b8"+ + "\2\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\361\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\234"+ + "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u01b9\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\342"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\u0133\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\7\7\1\u01ba\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\u01bb"+ + "\10\7\3\0\6\7\2\0\1\7\1\u01bc\1\7\2\0"+ + "\10\7\1\u014c\1\7\1\u014d\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u01bd"+ + "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\u01be\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u01bf"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u01c0\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\3\7\1\u01c1\10\7\3\0\6\7\2\0"+ + "\3\7\2\0\13\7\1\u01c2\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u01c3\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u01c4\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01c5\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01c6\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u01c7\12\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\u01c8\13\7\3\0\6\7"+ + "\2\0\3\7\2\0\4\7\1\u01c9\7\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u01ca\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\u010f\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\11\7\1\u01cb"+ + "\2\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u01cc\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\5\7\1\u01cd\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\u01ce\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\3\7\1\u01cf\10\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\4\7\1\u01d0\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ + "\1\u01d1\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u01d2"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u01d3\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u01d4"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u01d5\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u01d6"+ + "\1\u01c0\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u01d7\12\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\3\7\1\122\10\7\70\0\1\u0170"+ + "\22\0\6\7\2\0\1\234\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\30\0\1\u0173\62\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u01d8"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\271\5\7"+ + "\1\u01d9\2\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ + "\1\u01da\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\117"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\126\13\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\160\4\7\1\161\5\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0182\12\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\u01db\12\7\3\0\6\7"+ + "\2\0\3\7\2\0\5\7\1\u01dc\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u0167\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\3\7\1\u01dd\10\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01de\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\7"+ + "\1\315\1\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01df\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\u01be\13\7\3\0"+ + "\6\7\2\0\3\7\2\0\3\7\1\u012c\10\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\336\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u01e0\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u01e1\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u01e2\12\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\332\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u01e3\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\135\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u01e4\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u0133\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\313\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u01e5\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u01e6\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01e7\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\3\7\1\u01e8\10\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\4\7\1\u01e9\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u01ea\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u01eb\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u01ec\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\u01ed\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u01ee\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u01ef\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01f0\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\u01f1\12\7"+ + "\3\0\6\7\2\0\3\7\2\0\4\7\1\u01f2\7\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u01f3\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\u01f4\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\u01f5\13\7\3\0\6\7"+ + "\2\0\1\u01f6\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u01f7\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\3\7\1\u01f8\10\7"+ + "\3\0\6\7\2\0\3\7\2\0\13\7\1\u01f9\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\3\7\1\u01fa\10\7\3\0"+ + "\5\7\1\u0116\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\u01fb\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\10\7\1\u01fc"+ + "\3\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u01fd"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u01fe\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u0119"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u01ff\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01d5\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u0200\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u0201\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\12\7\1\u0202\1\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\7\7\1\u0203\4\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\2\7\1\u0204\11\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u0205\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0206\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\1\u0207\2\7\2\0\12\7\1\u0208\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\2\7\1\u0209\1\u020a\10\7\3\0"+ + "\5\7\1\u020b\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u020c\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\5\7\1\u020d\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u020e\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\u020f\11\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u0210\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0211\12\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\122\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\303"+ + "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\273\12\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\u0212"+ + "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u0213\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u01a2\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\164\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\3\7\1\u0214\10\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\u0215\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0216\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u0133\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\u0217\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\1\7\1\172\12\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\303\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\u0218\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u0219"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u021a\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u010c"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\u021b\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u021c"+ + "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u021d\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u021e"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\5\7\1\u021f"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0220\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\u0221\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\4\7\1\u0222\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\4\7\1\u0223\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ + "\1\u0224\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u0225\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0226\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0227\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\4\7\1\u0133\7\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u0228\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\2\7\1\u0229\11\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u022a\12\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u022b\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u022c\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u022d\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\u022e\11\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\u010d\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u022f\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\u0230\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u0231\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u0232\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\7\7\1\u0233\4\7"+ + "\3\0\6\7\2\0\3\7\2\0\2\7\1\u010d\11\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u0234\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\u0235\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u0236\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\7\7\1\u0237\4\7\3\0\6\7\2\0\1\7\1\u0238"+ + "\1\7\2\0\2\7\1\u021c\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u0239"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u023a\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u023b\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\u023c\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\4\7"+ + "\1\u023d\7\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u023e\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u01d5\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u023f\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\6\7\1\303\5\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\4\7\1\u0240\7\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0241\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0242\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\6\7\1\u0243\5\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\u0244\11\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\10\7\1\u0230\3\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u021a\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\3\7\1\u010d\10\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u0245\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\3\7\1\u0246\10\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u0247\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u0248\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\13\7\1\u0249\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u024a"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u024b\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u024c"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\13\7\1\172\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\7\7\1\u0133\4\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u024d\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\6\7\1\u024e\5\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\3\7\1\u021c\10\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u024f\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\u010d\13\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u0250\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\1\7"+ + "\1\u0251\12\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\3\7"+ + "\1\u0252\10\7\3\0\6\7\2\0\1\u0253\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\12\7\1\u0254\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u0255"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\u0256\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\4\7\1\u010f\7\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\121\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u01dc"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0257"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\11\7\1\u0258\2\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\7\7\1\u0259\4\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u025a\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u025b\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\u025c\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\220\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u025d\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u025e\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\4\7\1\u025f\7\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u0260\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0261\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u0262\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\u0263\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\u0264\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u0265\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u0266\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\12\7\1\u0267\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\u0268\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\6\7\1\u010d"+ + "\5\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\7\7\1\u0269\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u026a\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\222\12\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u026b\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u026c"+ + "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u026d\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u015b"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u026e\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u026f"+ + "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u0270\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u025c\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0271\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\2\7\1\u025d\11\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u0272\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\10\7\1\220\3\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0159\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0273\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7"; + + private static int [] zzUnpackTrans() { + int [] result = new int[43056]; + 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; + } + + + /* 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; + + /* 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 = + "\1\1\2\0\2\11\10\1\2\11\14\1\1\11\4\1"+ + "\1\11\20\1\1\11\3\1\1\11\15\1\1\11\3\0"+ + "\72\1\4\0\37\1\2\11\4\0\6\1\3\0\106\1"+ + "\2\0\1\11\45\1\4\0\3\1\2\0\51\1\2\0"+ + "\31\1\1\0\1\1\1\0\1\1\2\0\62\1\2\0"+ + "\1\1\1\0\311\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[627]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ClojureTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + /*case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break;*/ + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ClojureTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ClojureTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 164) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 15: + { addToken(Token.PREPROCESSOR); + } + case 26: break; + case 6: + { addNullToken(); return firstToken; + } + case 27: break; + case 19: + { addToken(Token.LITERAL_CHAR); + } + case 28: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 29: break; + case 17: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 30: break; + case 18: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 31: break; + case 20: + { addToken(Token.RESERVED_WORD); + } + case 32: break; + case 22: + { addToken(Token.VARIABLE); + } + case 33: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 34: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 35: break; + case 14: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 36: break; + case 21: + { addToken(Token.FUNCTION); + } + case 37: break; + case 23: + { addToken(Token.DATA_TYPE); + } + case 38: break; + case 11: + { /* Skip escaped chars. */ + } + case 39: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 40: break; + case 24: + { addToken(Token.LITERAL_BOOLEAN); + } + case 41: break; + case 12: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 42: break; + case 25: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 43: break; + case 16: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 44: break; + case 7: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 45: break; + case 3: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 46: break; + case 5: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 47: break; + case 4: + { addToken(Token.OPERATOR); + } + case 48: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 49: break; + case 10: + { + } + case 50: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 628: break; + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 629: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 630: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex new file mode 100644 index 0000000..c23934d --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex @@ -0,0 +1,663 @@ +/* + * 09/08/2014 + * + * DTokenMaker.java - Scanner for the D programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the D programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + * + */ +%% + +%public +%class DTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Token type specific to DTokenMaker; this signals that the user is in + * a nestable multi-line comment. The nested depth is embedded in the + * actual end token type. + */ + private static final int INTERNAL_IN_NESTABLE_MLC = -(1<<11); + + /** + * When in a (possibly) nested MLC, this is the current nested depth. + */ + private int nestedMlcDepth; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + private void addNestedMlcEndToken() { + addEndToken(INTERNAL_IN_NESTABLE_MLC - nestedMlcDepth); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_NESTABLE_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + nestedMlcDepth = 0; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_BACKQUOTE: + state = WYSIWYG_STRING_2; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = WYSIWYG_STRING_1; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + break; + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + } + nestedMlcDepth = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = ([A-Za-z]) +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = ([1-9]) +BinaryDigit = ([0-1]) +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +AnyCharacterButApostropheOrBackSlash = ([^\\']) +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +StringPostfix = ([cwd]) +CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']{StringPostfix}?) +UnclosedCharLiteral = ([\'][^\'\n]*) +ErrorCharLiteral = ({UnclosedCharLiteral}[\']{StringPostfix}?) +StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]{StringPostfix}?) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +HexStringLiteral = ([x]{StringLiteral}) +UnclosedHexStringLiteral = ([x]{UnclosedStringLiteral}) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]{StringPostfix}?) +WysiwygStringLiteralStart = ("r"[\"]) +WysiwygStringLiteralStart2 = ("`") + +MLCBegin = "/*" +MLCEnd = "*/" +DocCommentBegin = "/**" +NestableMLCBegin = "/+" +LineCommentBegin = "//" +LineDocCommentBegin = "///" + +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) +HexLiteral = ({HexHelper}{NonFloatSuffix}?) + +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + +Annotation = ("@"{Identifier}?) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state MLC +%state DOCCOMMENT +%state NESTABLE_MLC +%state EOL_COMMENT +%state EOL_DOCCOMMENT +%state WYSIWYG_STRING_1 +%state WYSIWYG_STRING_2 + +%% + + { + + /* Keywords */ + "abstract" | + "alias" | + "align" | + "asm" | + "assert" | + "auto" | + + "body" | + "break" | + + "case" | + "cast" | + "catch" | + "class" | + "const" | + "continue" | + + "debug" | + "default" | + "delegate" | + "delete" | + "deprecated" | + "do" | + + "else" | + "enum" | + "export" | + "extern" | + + "final" | + "finally" | + "for" | + "foreach" | + "foreach_reverse" | + "function" | + + "goto" | + + "if" | + "immutable" | + "import" | + "in" | + "inout" | + "interface" | + "invariant" | + "is" | + + "lazy" | + + "macro" | + "mixin" | + "module" | + + "new" | + "nothrow" | + "null" | + + "out" | + "override" | + + "package" | + "pragma" | + "private" | + "protected" | + "public" | + "pure" | + + "ref" | + + "scope" | + "shared" | + "static" | + "struct" | + "super" | + "switch" | + "synchronized" | + + "template" | + "this" | + "throw" | + "try" | + "typedef" | + "typeid" | + "typeof" | + + "union" | + "unittest" | + + "version" | + "void" | + "volatile" | + + "while" | + "with" | + + "__FILE__" | + "__MODULE__" | + "__LINE__" | + "__FUNCTION__" | + "__PRETTY_FUNCTION__" | + + "__gshared" | + "__traits" | + "__vector" | + "__parameters" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + /* Data types. */ + "string" | + "wstring" | + "dstring" | + "size_t" | + "ptrdiff_t" | + "bool" | + "byte" | + "cdouble" | + "cent" | + "cfloat" | + "char" | + "creal" | + "dchar" | + "double" | + "float" | + "idouble" | + "ifloat" | + "ireal" | + "int" | + "long" | + "real" | + "short" | + "ubyte" | + "ucent" | + "uint" | + "ulong" | + "ushort" | + "wchar" { addToken(Token.DATA_TYPE); } + + /* Booleans. */ + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + /* Standard library (TODO) */ + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + {HexStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedHexStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {WysiwygStringLiteralStart} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(WYSIWYG_STRING_1); } + {WysiwygStringLiteralStart2} { addToken(Token.LITERAL_BACKQUOTE); yybegin(WYSIWYG_STRING_2); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {NestableMLCBegin} { start = zzMarkedPos-2; nestedMlcDepth = 1; yybegin(NESTABLE_MLC); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + {LineDocCommentBegin} { start = zzMarkedPos-3; yybegin(EOL_DOCCOMMENT); } + + /* Annotations. */ + {Annotation} { addToken(Token.ANNOTATION); } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as identifiers. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + \n | + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } + +} + + { + + [^hwf\n\+\/]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + {NestableMLCBegin} { nestedMlcDepth++; } + "/" {} + + "+/" { + System.out.println("... " + nestedMlcDepth); + if (--nestedMlcDepth==0) { + addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(YYINITIAL); + } + } + \+ {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } + +} + + { + [^\"]+ { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + \" { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } + <> { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; + } +} + + { + [^\`]+ { addToken(Token.LITERAL_BACKQUOTE); } + \` { addToken(Token.LITERAL_BACKQUOTE); yybegin(YYINITIAL); } + <> { + if (firstToken==null) { + addToken(Token.LITERAL_BACKQUOTE); + } + return firstToken; + } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java new file mode 100644 index 0000000..47619b4 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java @@ -0,0 +1,1949 @@ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 7:13 PM */ + +/* + * 09/08/2014 + * + * DTokenMaker.java - Scanner for the D programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the D programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + * + */ + +public class DTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int WYSIWYG_STRING_1 = 6; + public static final int EOL_COMMENT = 4; + public static final int NESTABLE_MLC = 3; + public static final int DOCCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + public static final int WYSIWYG_STRING_2 = 7; + public static final int EOL_DOCCOMMENT = 5; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\22\1\11\1\0\1\22\1\20\22\0\1\22\1\60\1\16"+ + "\1\21\1\1\1\60\1\62\1\10\2\65\1\31\1\32\1\53\1\43"+ + "\1\44\1\30\1\4\1\5\2\17\4\7\2\3\1\63\1\53\1\54"+ + "\1\55\1\57\1\61\1\64\1\6\1\34\1\105\1\40\1\42\1\100"+ + "\2\1\1\101\2\1\1\33\1\102\1\104\1\103\1\107\1\1\1\110"+ + "\1\1\1\106\1\37\2\1\1\36\1\111\1\1\1\65\1\12\1\65"+ + "\1\56\1\2\1\27\1\47\1\35\1\24\1\41\1\46\1\15\1\71"+ + "\1\66\1\70\1\1\1\75\1\50\1\72\1\14\1\73\1\67\1\1"+ + "\1\26\1\51\1\45\1\13\1\76\1\23\1\25\1\74\1\77\1\52"+ + "\1\56\1\52\1\61\uff81\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 = + "\10\0\1\1\2\2\2\3\1\4\1\5\3\2\1\6"+ + "\1\1\1\7\4\2\1\10\3\11\2\2\1\11\6\2"+ + "\1\12\1\2\4\11\1\13\6\2\1\14\1\15\4\14"+ + "\1\16\5\14\1\17\3\14\1\20\3\14\1\21\1\22"+ + "\1\23\1\24\1\25\1\1\1\2\2\26\1\27\1\3"+ + "\1\26\1\27\2\26\1\30\2\26\1\4\1\31\1\0"+ + "\1\4\16\2\2\6\1\22\13\2\1\6\1\32\1\2"+ + "\1\33\1\34\1\35\4\2\1\36\24\2\1\0\1\11"+ + "\1\13\4\2\3\36\10\2\3\0\1\37\4\0\1\40"+ + "\1\0\1\41\1\42\4\0\1\1\10\2\1\3\1\27"+ + "\1\0\4\30\1\3\1\4\1\43\1\31\2\4\1\31"+ + "\1\4\11\2\1\36\1\6\1\44\1\6\1\22\12\2"+ + "\2\6\2\2\1\45\1\46\37\2\1\1\6\2\1\47"+ + "\12\2\14\0\1\1\11\2\1\30\2\26\1\43\1\4"+ + "\2\2\1\47\4\2\1\44\1\6\2\2\2\6\1\2"+ + "\1\50\6\2\1\51\13\2\1\1\13\2\1\0\1\52"+ + "\2\0\1\53\2\0\1\54\1\0\1\1\10\2\1\4"+ + "\1\2\1\36\1\2\1\6\1\2\1\6\10\2\1\1"+ + "\12\2\6\0\1\1\6\2\1\4\2\2\1\6\1\2"+ + "\1\6\1\55\2\2\1\1\12\2\1\36\1\6\1\2"+ + "\1\1\21\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[459]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\112\0\224\0\336\0\u0128\0\u0172\0\u01bc\0\u0206"+ + "\0\u0250\0\u029a\0\u02e4\0\u032e\0\u0378\0\u03c2\0\u040c\0\u0456"+ + "\0\u04a0\0\u04ea\0\u0534\0\u040c\0\u057e\0\u05c8\0\u0612\0\u065c"+ + "\0\u06a6\0\u040c\0\u06f0\0\u073a\0\u0784\0\u07ce\0\u0818\0\u0862"+ + "\0\u08ac\0\u08f6\0\u0940\0\u098a\0\u09d4\0\u0a1e\0\u040c\0\u040c"+ + "\0\u0a68\0\u0ab2\0\u040c\0\u0afc\0\u0b46\0\u0b90\0\u0bda\0\u0c24"+ + "\0\u0c6e\0\u0cb8\0\u0d02\0\u0d4c\0\u040c\0\u0d96\0\u0de0\0\u0e2a"+ + "\0\u0e74\0\u040c\0\u0ebe\0\u0f08\0\u0f52\0\u0f9c\0\u0fe6\0\u040c"+ + "\0\u1030\0\u107a\0\u10c4\0\u040c\0\u110e\0\u1158\0\u11a2\0\u040c"+ + "\0\u11ec\0\u040c\0\u1236\0\u040c\0\u1280\0\u12ca\0\u1314\0\u135e"+ + "\0\u1314\0\u1314\0\u13a8\0\u13f2\0\u143c\0\u1486\0\u14d0\0\u151a"+ + "\0\u1564\0\u15ae\0\u15f8\0\u1642\0\u168c\0\u16d6\0\u1720\0\u176a"+ + "\0\u17b4\0\u17fe\0\u1848\0\u1892\0\u18dc\0\u1926\0\u1970\0\u19ba"+ + "\0\u1a04\0\u1a4e\0\u1a98\0\u1ae2\0\u1b2c\0\u1b76\0\u1bc0\0\u1c0a"+ + "\0\u1c54\0\u1c9e\0\u1ce8\0\u1d32\0\u1d7c\0\u1dc6\0\u1e10\0\u1e5a"+ + "\0\u1ea4\0\u1eee\0\u040c\0\u1f38\0\u1f82\0\u1fcc\0\u040c\0\u2016"+ + "\0\u2060\0\u20aa\0\u20f4\0\u213e\0\u2188\0\u21d2\0\u221c\0\u2266"+ + "\0\u22b0\0\u22fa\0\u2344\0\u238e\0\u23d8\0\u2422\0\u246c\0\u24b6"+ + "\0\u2500\0\u254a\0\u2594\0\u25de\0\u2628\0\u2672\0\u26bc\0\u2706"+ + "\0\u073a\0\u2750\0\u279a\0\u27e4\0\u282e\0\u2878\0\u28c2\0\u290c"+ + "\0\u1ce8\0\u029a\0\u2956\0\u29a0\0\u29ea\0\u2a34\0\u2a7e\0\u2ac8"+ + "\0\u2b12\0\u2b5c\0\u2ba6\0\u2bf0\0\u2c3a\0\u040c\0\u2c84\0\u2cce"+ + "\0\u2d18\0\u2d62\0\u040c\0\u2dac\0\u040c\0\u040c\0\u2df6\0\u2e40"+ + "\0\u2e8a\0\u2ed4\0\u2f1e\0\u2f68\0\u2fb2\0\u2ffc\0\u3046\0\u3090"+ + "\0\u30da\0\u3124\0\u316e\0\u31b8\0\u3202\0\u324c\0\u3296\0\u32e0"+ + "\0\u332a\0\u3374\0\u33be\0\u3408\0\u3452\0\u040c\0\u349c\0\u34e6"+ + "\0\u3530\0\u357a\0\u35c4\0\u360e\0\u3658\0\u36a2\0\u36ec\0\u3736"+ + "\0\u3780\0\u37ca\0\u3814\0\u385e\0\u38a8\0\u38f2\0\u393c\0\u040c"+ + "\0\u3986\0\u39d0\0\u3a1a\0\u3a64\0\u213e\0\u3aae\0\u3af8\0\u3b42"+ + "\0\u3b8c\0\u3bd6\0\u3c20\0\u3c6a\0\u3cb4\0\u3cfe\0\u040c\0\u3d48"+ + "\0\u3d92\0\u3ddc\0\u3e26\0\u3e70\0\u3eba\0\u3f04\0\u3f4e\0\u3f98"+ + "\0\u3fe2\0\u402c\0\u4076\0\u40c0\0\u410a\0\u4154\0\u419e\0\u41e8"+ + "\0\u4232\0\u427c\0\u42c6\0\u4310\0\u435a\0\u43a4\0\u43ee\0\u4438"+ + "\0\u4482\0\u44cc\0\u4516\0\u4560\0\u45aa\0\u45f4\0\u463e\0\u4688"+ + "\0\u46d2\0\u471c\0\u4766\0\u47b0\0\u47fa\0\u4844\0\u488e\0\u48d8"+ + "\0\u4922\0\u496c\0\u49b6\0\u4a00\0\u4a4a\0\u4a94\0\u4ade\0\u4b28"+ + "\0\u4b72\0\u4bbc\0\u4c06\0\u4c50\0\u4c9a\0\u4ce4\0\u4d2e\0\u4d78"+ + "\0\u4dc2\0\u4e0c\0\u4e56\0\u4ea0\0\u4eea\0\u4f34\0\u4f7e\0\u4fc8"+ + "\0\u5012\0\u505c\0\u50a6\0\u50f0\0\u513a\0\u5184\0\u51ce\0\u1314"+ + "\0\u5218\0\u33be\0\u040c\0\u5262\0\u52ac\0\u52f6\0\u029a\0\u5340"+ + "\0\u538a\0\u53d4\0\u541e\0\u040c\0\u5468\0\u54b2\0\u54fc\0\u5546"+ + "\0\u5590\0\u55da\0\u040c\0\u5624\0\u566e\0\u56b8\0\u5702\0\u574c"+ + "\0\u5796\0\u029a\0\u57e0\0\u582a\0\u5874\0\u58be\0\u5908\0\u5952"+ + "\0\u599c\0\u59e6\0\u5a30\0\u5a7a\0\u5ac4\0\u5b0e\0\u5b58\0\u5ba2"+ + "\0\u5bec\0\u5c36\0\u5c80\0\u5cca\0\u5d14\0\u5d5e\0\u5da8\0\u5df2"+ + "\0\u5e3c\0\u5e86\0\u5ed0\0\u5f1a\0\u5f64\0\u5fae\0\u5ff8\0\u6042"+ + "\0\u608c\0\u60d6\0\u6120\0\u616a\0\u61b4\0\u61fe\0\u6248\0\u6292"+ + "\0\u62dc\0\u6326\0\u6370\0\u63ba\0\u6404\0\u644e\0\u6498\0\u64e2"+ + "\0\u652c\0\u6576\0\u65c0\0\u660a\0\u6654\0\u669e\0\u66e8\0\u6732"+ + "\0\u677c\0\u67c6\0\u6810\0\u685a\0\u68a4\0\u68ee\0\u6938\0\u6982"+ + "\0\u69cc\0\u6a16\0\u6a60\0\u6aaa\0\u6af4\0\u6b3e\0\u5ed0\0\u6b88"+ + "\0\u5fae\0\u6bd2\0\u608c\0\u6c1c\0\u6c66\0\u6cb0\0\u6cfa\0\u6d44"+ + "\0\u6d8e\0\u6dd8\0\u6e22\0\u6e6c\0\u6eb6\0\u6f00\0\u6f4a\0\u6f94"+ + "\0\u029a\0\u6fde\0\u7028\0\u7072\0\u70bc\0\u7106\0\u7150\0\u719a"+ + "\0\u71e4\0\u722e\0\u7278\0\u72c2\0\u730c\0\u7356\0\u73a0\0\u73ea"+ + "\0\u7434\0\u747e\0\u74c8\0\u7512\0\u755c\0\u75a6\0\u75f0\0\u763a"+ + "\0\u7684\0\u76ce\0\u7718\0\u7762\0\u77ac\0\u77f6\0\u7840\0\u788a"+ + "\0\u78d4\0\u791e\0\u7968"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[459]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\11\1\12\1\13\1\14\1\15\1\14\1\12\1\14"+ + "\1\16\1\17\1\11\1\20\1\21\1\22\1\23\1\14"+ + "\1\24\1\11\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\2\12\1\36\3\12\1\37\1\12"+ + "\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+ + "\1\50\1\51\2\34\1\52\1\34\1\53\1\54\1\53"+ + "\1\55\1\47\1\12\1\56\1\57\1\60\1\61\1\62"+ + "\2\12\1\63\13\12\11\64\1\65\3\64\1\66\5\64"+ + "\1\67\5\64\1\70\34\64\1\71\34\64\1\72\3\64"+ + "\1\73\5\64\1\74\5\64\1\75\34\64\1\76\23\64"+ + "\11\77\1\100\3\77\1\66\5\77\1\67\4\77\1\101"+ + "\1\77\1\102\33\77\1\71\23\77\11\103\1\104\3\103"+ + "\1\105\5\103\1\106\42\103\1\107\34\103\1\110\3\103"+ + "\1\73\5\103\1\74\42\103\1\76\23\103\16\111\1\112"+ + "\73\111\27\113\1\114\62\113\10\11\2\0\4\11\1\0"+ + "\1\11\1\0\1\11\1\0\4\11\4\0\10\11\2\0"+ + "\5\11\12\0\1\11\1\0\25\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\1\12\1\116\5\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\2\117\1\120\3\14\1\117"+ + "\1\14\2\0\3\117\1\121\1\0\1\14\1\0\1\117"+ + "\1\0\4\117\4\0\1\122\4\117\2\121\1\123\1\0"+ + "\1\124\1\117\1\123\1\117\1\122\1\117\12\0\1\117"+ + "\1\0\12\117\1\121\13\117\1\125\1\126\2\127\1\117"+ + "\1\127\2\0\3\117\1\121\1\0\1\127\1\0\1\117"+ + "\1\0\2\117\1\130\1\117\4\0\1\122\2\131\1\130"+ + "\1\117\2\121\1\123\1\0\1\124\1\117\1\123\1\117"+ + "\1\122\1\117\12\0\1\117\1\0\12\117\1\121\11\117"+ + "\10\132\1\133\1\134\1\135\77\132\112\0\1\11\7\12"+ + "\2\0\1\115\1\12\1\136\1\12\1\0\1\12\1\0"+ + "\1\11\1\0\1\12\1\137\2\12\4\0\2\12\1\140"+ + "\5\12\2\0\3\12\1\141\1\142\12\0\1\11\1\0"+ + "\2\12\1\143\21\12\1\11\7\12\2\0\1\115\1\144"+ + "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\145\3\12\12\0\1\11\1\0"+ + "\5\12\1\146\16\12\1\11\7\12\2\0\1\115\1\147"+ + "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\2\12\1\150\1\151\1\12\12\0\1\11"+ + "\1\0\2\12\1\152\2\12\1\153\16\12\11\23\1\154"+ + "\1\155\3\23\1\156\73\23\22\0\1\25\67\0\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\157\2\12\4\0\10\12\2\0\4\12"+ + "\1\160\12\0\1\11\1\0\1\161\1\12\1\162\21\12"+ + "\1\11\7\12\2\0\1\115\2\12\1\163\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\164\4\0\6\12\1\165"+ + "\1\12\2\0\1\12\1\143\1\166\1\167\1\12\12\0"+ + "\1\11\1\0\1\170\4\12\1\171\16\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\172\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\173\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ + "\1\174\3\12\12\0\1\11\1\0\24\12\30\0\1\175"+ + "\1\176\1\177\22\0\1\53\111\0\1\53\66\0\1\53"+ + "\22\0\1\53\34\0\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\200\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\5\12\1\201"+ + "\1\202\15\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\1\12\1\157\2\12\4\0"+ + "\10\12\2\0\1\12\1\203\2\12\1\160\12\0\1\11"+ + "\1\0\5\12\1\204\16\12\43\0\1\53\11\0\1\53"+ + "\37\0\3\124\1\0\1\124\7\0\1\124\72\0\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\205\4\0\10\12\2\0\1\12\1\206"+ + "\3\12\12\0\1\11\1\0\1\207\5\12\1\210\15\12"+ + "\1\11\7\12\2\0\1\115\1\12\1\211\1\12\1\0"+ + "\1\12\1\0\1\11\1\0\2\12\1\212\1\12\4\0"+ + "\10\12\2\0\3\12\1\213\1\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\1\214\2\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\2\12\1\215"+ + "\5\12\2\0\3\12\1\216\1\217\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\220\2\12\12\0\1\11\1\0\5\12\1\221\16\12"+ + "\1\11\7\12\2\0\1\115\1\222\2\12\1\0\1\12"+ + "\1\0\1\11\1\0\1\223\1\224\2\12\4\0\10\12"+ + "\2\0\1\225\4\12\12\0\1\11\1\0\1\226\1\12"+ + "\1\227\3\12\1\230\15\12\54\0\1\231\1\53\111\0"+ + "\1\53\1\0\1\232\107\0\1\53\4\0\1\53\27\0"+ + "\1\11\2\233\3\11\1\233\1\11\2\0\1\11\3\233"+ + "\1\0\1\11\1\0\1\11\1\0\4\233\4\0\10\233"+ + "\2\0\5\233\12\0\1\11\1\0\24\233\1\11\7\12"+ + "\2\0\1\115\1\234\2\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\235\4\0\10\12\2\0\1\236\1\12"+ + "\1\237\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\1\12\1\240\1\241\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\164\4\0\6\12\1\165\1\12"+ + "\2\0\4\12\1\242\12\0\1\11\1\0\4\12\1\243"+ + "\17\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\5\12\1\214\16\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\244\2\12\12\0"+ + "\1\11\1\0\2\12\1\245\2\12\1\246\16\12\1\11"+ + "\7\12\2\0\1\115\1\247\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\10\12\1\250\13\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\251\3\12\12\0\1\11"+ + "\1\0\5\12\1\252\16\12\11\64\1\0\3\64\1\0"+ + "\5\64\1\0\5\64\1\0\34\64\1\0\23\64\45\0"+ + "\1\253\22\0\1\254\44\0\1\255\116\0\1\256\126\0"+ + "\1\257\111\0\1\260\22\0\1\261\44\0\1\262\116\0"+ + "\1\263\126\0\1\264\44\0\11\77\1\0\3\77\1\0"+ + "\5\77\1\0\4\77\1\0\1\77\1\0\33\77\1\0"+ + "\23\77\32\0\1\265\107\0\1\266\61\0\11\103\1\0"+ + "\3\103\1\0\5\103\1\0\42\103\1\0\23\103\45\0"+ + "\1\267\22\0\1\270\44\0\1\271\133\0\1\272\44\0"+ + "\16\111\1\0\73\111\27\113\1\0\62\113\10\11\2\0"+ + "\1\11\1\273\2\11\1\0\1\11\1\0\1\11\1\0"+ + "\4\11\4\0\10\11\2\0\5\11\12\0\1\11\1\0"+ + "\25\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\1\274\7\12\2\0\1\275"+ + "\4\12\12\0\1\11\1\0\1\12\1\276\1\12\1\277"+ + "\4\12\1\300\1\12\1\301\1\12\1\302\4\12\1\303"+ + "\2\12\10\117\2\0\4\117\1\0\1\117\1\0\1\117"+ + "\1\0\4\117\4\0\10\117\2\0\5\117\12\0\1\117"+ + "\1\0\26\117\1\120\3\304\1\117\1\304\2\0\4\117"+ + "\1\0\1\304\1\0\1\117\1\0\4\117\4\0\10\117"+ + "\2\0\5\117\12\0\1\117\1\0\27\117\3\305\1\117"+ + "\1\305\2\0\4\117\1\0\1\305\1\0\1\117\1\0"+ + "\4\117\3\0\1\306\10\117\1\306\1\0\5\117\12\0"+ + "\1\117\1\0\27\117\3\124\1\117\1\124\2\0\3\117"+ + "\1\121\1\0\1\124\1\0\1\117\1\0\4\117\4\0"+ + "\5\117\2\121\1\123\2\0\1\117\1\123\3\117\12\0"+ + "\1\117\1\0\12\117\1\121\13\117\1\125\1\117\2\307"+ + "\1\117\1\307\2\0\4\117\1\0\1\307\1\0\1\117"+ + "\1\0\4\117\4\0\10\117\2\0\5\117\12\0\1\117"+ + "\1\0\27\117\3\126\1\117\1\126\2\0\3\117\1\121"+ + "\1\0\1\126\1\0\1\117\1\0\4\117\4\0\5\117"+ + "\2\121\1\123\1\0\1\124\1\117\1\123\3\117\12\0"+ + "\1\117\1\0\12\117\1\121\13\117\1\125\1\126\2\127"+ + "\1\117\1\127\2\0\1\117\1\310\1\117\1\121\1\0"+ + "\1\127\1\0\1\117\1\0\4\117\4\0\1\311\3\117"+ + "\1\310\2\121\1\123\1\0\1\124\1\117\1\123\1\117"+ + "\1\311\1\117\12\0\1\117\1\0\12\117\1\121\14\117"+ + "\5\312\2\0\3\117\1\312\1\0\1\312\1\0\1\117"+ + "\1\0\1\117\1\312\2\117\4\0\1\117\2\312\2\117"+ + "\3\312\2\0\1\117\2\312\2\117\12\0\1\117\1\0"+ + "\12\117\1\312\4\117\1\312\10\117\2\313\2\117\2\0"+ + "\4\117\1\0\1\117\1\0\1\117\1\0\4\117\4\0"+ + "\10\117\2\0\5\117\12\0\1\117\1\0\24\117\10\314"+ + "\1\315\1\0\100\314\23\0\2\316\14\0\1\316\60\0"+ + "\1\315\101\0\4\314\2\317\1\314\1\320\1\321\1\0"+ + "\1\132\1\322\3\132\1\317\6\314\1\132\6\314\1\132"+ + "\7\314\1\132\44\314\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\2\12\1\323\21\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\143"+ + "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\6\12"+ + "\1\202\15\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\5\12\1\221\16\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\1\324\23\12\1\11\7\12\2\0\1\115\1\12"+ + "\1\325\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\326"+ + "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\242"+ + "\3\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\327"+ + "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\1\12\1\330\1\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\3\12\1\331\1\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\5\12\1\332\16\12\1\11\7\12\2\0\1\115"+ + "\1\12\1\333\1\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\334\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\12\154\1\335\3\154"+ + "\1\336\77\154\2\23\1\154\2\23\1\0\1\23\1\337"+ + "\4\23\6\154\1\23\6\154\1\23\7\154\1\23\44\154"+ + "\23\0\2\340\14\0\1\340\50\0\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\170"+ + "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\341"+ + "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ + "\1\342\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\343\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\3\12\1\151\1\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\344\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\5\12\1\345\16\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\346\3\12\1\347\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\2\12\1\350\2\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\351\2\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\1\12\1\352\1\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\11\172\1\353\1\354\3\172\1\156\73\172\1\11"+ + "\7\12\2\0\1\115\2\12\1\242\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\355\1\12"+ + "\1\356\2\12\12\0\1\11\1\0\24\12\30\0\1\357"+ + "\112\0\1\360\60\0\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\361\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\6\12\1\362\1\12\2\0"+ + "\5\12\12\0\1\11\1\0\5\12\1\356\16\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\363\4\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\2\12"+ + "\1\364\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\2\12\1\365\5\12\2\0\3\12\1\366\1\12\12\0"+ + "\1\11\1\0\1\12\1\367\22\12\1\11\7\12\2\0"+ + "\1\115\1\370\2\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\1\371\2\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\6\12\1\242\15\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\4\12\1\372\17\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\3\12\1\373"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ + "\1\374\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\1\12\1\375\22\12\1\11"+ + "\7\12\2\0\1\115\1\376\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\377\4\12\12\0\1\11\1\0\1\12\1\u0100"+ + "\22\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\4\12"+ + "\1\u0101\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\u0102\4\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\4\12"+ + "\1\u0103\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ + "\1\u0104\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\4\12\1\u0105\12\0\1\11\1\0\4\12\1\242\17\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\11\12\1\362\12\12\1\11\7\12\2\0"+ + "\1\115\1\12\1\u0106\1\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\1\12\1\u0107\22\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\2\12\1\u0108\21\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\5\12\1\u0109"+ + "\16\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\u010a\4\0\10\12\2\0"+ + "\2\12\1\u010b\2\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\u010c\2\12"+ + "\12\0\1\11\1\0\5\12\1\u010d\16\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\11\12\1\u010e\12\12\1\11\7\12\2\0\1\115\1\12"+ + "\1\u010f\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\55\0\1\53\1\0\1\34\32\0\1\11\7\233\2\0"+ + "\1\u0110\3\233\1\0\1\233\1\0\1\11\1\0\4\233"+ + "\4\0\10\233\2\0\5\233\12\0\1\11\1\0\24\233"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\u0101\4\0\2\12\1\u0111\5\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\u0112\2\12\12\0"+ + "\1\11\1\0\2\12\1\u0113\2\12\1\u0114\16\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0115\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\1\12\1\u0116\2\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\u0117\4\12"+ + "\12\0\1\11\1\0\5\12\1\u0118\2\12\1\u0119\13\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\1\12\1\u0100\2\12\1\u011a\17\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u011b\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\2\12\1\u011c"+ + "\1\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\6\12\1\u011d\1\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\1\242\4\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u011e\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u011f\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\3\12\1\u0120\1\12\12\0\1\11\1\0\2\12"+ + "\1\u0121\21\12\67\0\1\u0122\72\0\1\u0123\64\0\1\u0124"+ + "\133\0\1\u0125\133\0\1\u0126\72\0\1\u0127\64\0\1\u0128"+ + "\133\0\1\u0129\133\0\1\u012a\72\0\1\u012b\64\0\1\u012c"+ + "\133\0\1\u012d\44\0\3\11\5\u012e\2\0\3\11\1\u012e"+ + "\1\0\1\u012e\1\0\1\11\1\0\1\11\1\u012e\2\11"+ + "\4\0\1\11\2\u012e\2\11\3\u012e\2\0\1\11\2\u012e"+ + "\2\11\12\0\1\11\1\0\12\11\1\u012e\4\11\1\u012e"+ + "\5\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\13\12\1\u012f\10\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u0130\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\u0131\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\4\12\1\u0132\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u0133\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\4\12\1\u0134\3\12\2\0\5\12"+ + "\12\0\1\11\1\0\13\12\1\u0135\10\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\15\12\1\u0136\6\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\22\12\1\u0137\1\12"+ + "\2\117\1\120\3\304\1\117\1\304\2\0\4\117\1\0"+ + "\1\304\1\0\1\117\1\0\4\117\4\0\1\122\7\117"+ + "\2\0\3\117\1\122\1\117\12\0\1\117\1\0\27\117"+ + "\3\305\1\117\1\305\2\0\3\117\1\121\1\0\1\305"+ + "\1\0\1\117\1\0\4\117\4\0\5\117\2\121\1\117"+ + "\2\0\5\117\12\0\1\117\1\0\12\117\1\121\11\117"+ + "\3\0\3\305\1\0\1\305\7\0\1\305\72\0\2\117"+ + "\1\125\1\117\2\307\1\117\1\307\2\0\1\117\1\310"+ + "\2\117\1\0\1\307\1\0\1\117\1\0\4\117\4\0"+ + "\1\311\3\117\1\310\3\117\2\0\3\117\1\311\1\117"+ + "\12\0\1\117\1\0\34\117\2\0\4\117\1\0\1\117"+ + "\1\0\1\117\1\0\4\117\4\0\1\u0138\7\117\2\0"+ + "\3\117\1\u0138\1\117\12\0\1\117\1\0\34\117\2\0"+ + "\1\117\1\u0138\2\117\1\0\1\117\1\0\1\117\1\0"+ + "\4\117\4\0\4\117\1\u0138\3\117\2\0\5\117\12\0"+ + "\1\117\1\0\26\117\1\u0139\5\312\2\0\1\117\1\310"+ + "\1\117\1\312\1\0\1\312\1\0\1\117\1\0\1\117"+ + "\1\312\2\117\4\0\1\311\2\312\1\117\1\310\3\312"+ + "\2\0\1\117\2\312\1\311\1\117\12\0\1\117\1\0"+ + "\12\117\1\312\4\117\1\312\6\117\1\u013a\1\117\2\313"+ + "\2\117\2\0\4\117\1\0\1\117\1\0\1\117\1\0"+ + "\4\117\4\0\10\117\2\0\5\117\12\0\1\117\1\0"+ + "\24\117\10\314\1\133\1\0\100\314\23\0\2\u013b\14\0"+ + "\1\u013b\50\0\4\314\2\320\1\314\1\320\1\315\1\0"+ + "\5\314\1\320\76\314\2\132\1\314\1\132\1\315\1\0"+ + "\5\314\1\132\72\314\10\0\1\315\12\0\2\316\14\0"+ + "\1\316\50\0\3\314\5\u013c\1\133\1\0\3\314\1\u013c"+ + "\1\314\1\u013c\4\314\1\u013c\7\314\2\u013c\2\314\3\u013c"+ + "\3\314\2\u013c\30\314\1\u013c\4\314\1\u013c\4\314\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\u013d\4\12\12\0"+ + "\1\11\1\0\5\12\1\u013e\16\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\5\12"+ + "\1\u010d\16\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\u013f\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\3\12\1\242\1\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\1\u0140\23\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u0141\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\4\12\1\371\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\325"+ + "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\2\12\1\u0142\2\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u0143\3\12\12\0\1\11\1\0\24\12\11\154"+ + "\1\0\100\154\23\0\2\u0144\14\0\1\u0144\50\0\3\154"+ + "\5\u0145\2\154\1\335\2\154\1\u0145\1\336\1\u0145\4\154"+ + "\1\u0145\7\154\2\u0145\2\154\3\u0145\3\154\2\u0145\30\154"+ + "\1\u0145\4\154\1\u0145\4\154\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\3\12\1\u0146"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\u0101"+ + "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\242"+ + "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\356\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\1\12\1\343\2\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\242\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\4\12\1\374\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\u013f\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\u0147\3\12\1\247"+ + "\12\0\1\11\1\0\24\12\12\353\1\u0148\3\353\1\0"+ + "\77\353\2\172\1\353\2\172\1\0\1\172\1\u0149\4\172"+ + "\6\353\1\172\6\353\1\172\7\353\1\172\44\353\1\11"+ + "\7\12\2\0\1\115\1\u014a\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\3\12\1\u013f\1\12\12\0\1\11\1\0\24\12"+ + "\30\0\1\u014b\61\0\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\12\1\u014c\2\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\6\12\1\242\15\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u013f\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\2\12\1\u014d\2\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\1\u014e\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\u014f\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\u0150\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\2\12\1\u0151\5\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ + "\1\u0152\3\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\1\12\1\u0153\22\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\5\12\1\145\16\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\4\12\1\242"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\u0154\3\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\4\12\1\242\17\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\1\12\1\u0155\3\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\5\12\1\u0156\16\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\242"+ + "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\5\12"+ + "\1\242\16\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\u0157\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\374\2\12\12\0"+ + "\1\11\1\0\3\12\1\u013e\20\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u0156\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\3\12\1\u013f\20\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\12\1\u0158\3\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\346\4\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\1\12\1\u0101\22\12\1\11\7\12\2\0"+ + "\1\115\1\u0159\2\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\221\21\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\u015a\4\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u015b\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\325\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\12\1\u015c\3\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\1\12\1\u015d"+ + "\2\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\10\11\2\0\1\11\1\u015e\2\11\1\0\1\11"+ + "\1\0\1\11\1\0\4\11\4\0\10\11\2\0\5\11"+ + "\12\0\1\11\1\0\25\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\3\12\1\u015a\1\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\3\12\1\u015f\20\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\10\12"+ + "\1\u0160\13\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\u0161\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\6\12\1\u0162\1\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\7\12\1\u0163\14\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\u0164"+ + "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\1\247\2\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\u0165\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\1\u0166\2\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\3\12\1\u0102\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\u013e\21\12\1\11\7\12\2\0\1\115\1\342"+ + "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0167\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\4\12\1\u0168\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\u0169\2\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\6\12\1\242\1\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\63\0\1\u016a\74\0\1\u0122\107\0\1\u016b\134\0"+ + "\1\u016c\105\0\1\u016d\74\0\1\u0126\107\0\1\u016e\134\0"+ + "\1\u016f\105\0\1\u0170\74\0\1\u012a\107\0\1\u0171\134\0"+ + "\1\u0172\22\0\3\11\5\u0173\2\0\3\11\1\u0173\1\0"+ + "\1\u0173\1\0\1\11\1\0\1\11\1\u0173\2\11\4\0"+ + "\1\11\2\u0173\2\11\3\u0173\2\0\1\11\2\u0173\2\11"+ + "\12\0\1\11\1\0\12\11\1\u0173\4\11\1\u0173\5\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\16\12\1\u0174\5\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\2\12\1\u0175\2\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\u0176\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\u0177"+ + "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\1\12\1\u0178\2\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\16\12\1\u0179\5\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\1\u0174"+ + "\7\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\5\12\1\u017a\2\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\7\12\1\u017b\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\2\117\1\u0139\5\312\2\0\3\117\1\312\1\0\1\312"+ + "\1\0\1\117\1\0\1\117\1\312\2\117\4\0\1\117"+ + "\2\312\2\117\3\312\2\0\1\117\2\312\2\117\12\0"+ + "\1\117\1\0\12\117\1\312\4\117\1\312\4\117\3\314"+ + "\5\u017c\1\133\1\0\3\314\1\u017c\1\314\1\u017c\4\314"+ + "\1\u017c\7\314\2\u017c\2\314\3\u017c\3\314\2\u017c\30\314"+ + "\1\u017c\4\314\1\u017c\4\314\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\u017d\4\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\1\12\1\242\1\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\373\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\u0168"+ + "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\3\12\1\u017e\1\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\2\12\1\u017f\2\12\12\0\1\11\1\0\24\12\3\154"+ + "\5\u0180\2\154\1\335\2\154\1\u0180\1\336\1\u0180\4\154"+ + "\1\u0180\7\154\2\u0180\2\154\3\u0180\3\154\2\u0180\30\154"+ + "\1\u0180\4\154\1\u0180\4\154\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\2\12\1\221"+ + "\21\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\2\12\1\u0181\21\12\11\353\1\0"+ + "\103\353\5\u0182\2\353\1\u0148\2\353\1\u0182\1\0\1\u0182"+ + "\4\353\1\u0182\7\353\2\u0182\2\353\3\u0182\3\353\2\u0182"+ + "\30\353\1\u0182\4\353\1\u0182\4\353\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u0183\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\7\12\1\242\14\12\1\11\7\12"+ + "\2\0\1\115\1\u0184\2\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\3\12\1\242\20\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\u0101\4\12\12\0"+ + "\1\11\1\0\3\12\1\u0160\20\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u0185\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\3\12\1\363\1\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\3\12\1\u0160\1\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\6\12\1\u0186\1\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\u0121\2\12\1\u0187\16\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u013e\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\247\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u0188\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\242\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\12"+ + "\1\247\2\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\2\12\1\u0189\21\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\12\1\u0121\3\12"+ + "\12\0\1\11\1\0\24\12\1\11\1\12\1\325\5\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\1\u018a\23\12\3\11\5\u018b\2\0"+ + "\3\11\1\u018b\1\0\1\u018b\1\0\1\11\1\0\1\11"+ + "\1\u018b\2\11\4\0\1\11\2\u018b\2\11\3\u018b\2\0"+ + "\1\11\2\u018b\2\11\12\0\1\11\1\0\12\11\1\u018b"+ + "\4\11\1\u018b\5\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\4\12\1\u018c\17\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\u018d\2\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\u018e\3\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\2\12\1\u018f\21\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\u0190\2\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\u0191\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0192\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\u0193\4\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0194\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\2\12\1\u0195\21\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\161\4\12"+ + "\12\0\1\11\1\0\24\12\30\0\1\u0196\62\0\1\u016b"+ + "\1\u0197\5\u016b\1\u0197\2\0\3\u016b\1\0\1\u016b\1\0"+ + "\1\u0197\1\0\4\u016b\1\0\1\u016b\2\u0197\10\u016b\2\u0197"+ + "\5\u016b\1\0\1\u0197\1\0\1\u0197\2\0\6\u0197\24\u016b"+ + "\51\0\1\u0122\11\0\1\u016a\56\0\1\u0198\62\0\1\u016e"+ + "\1\u0199\5\u016e\1\u0199\2\0\3\u016e\1\0\1\u016e\1\0"+ + "\1\u0199\1\0\4\u016e\1\0\1\u016e\2\u0199\10\u016e\2\u0199"+ + "\5\u016e\1\0\1\u0199\1\0\1\u0199\2\0\6\u0199\24\u016e"+ + "\51\0\1\u0126\11\0\1\u016d\56\0\1\u019a\62\0\1\u0171"+ + "\1\u019b\5\u0171\1\u019b\2\0\3\u0171\1\0\1\u0171\1\0"+ + "\1\u019b\1\0\4\u0171\1\0\1\u0171\2\u019b\10\u0171\2\u019b"+ + "\5\u0171\1\0\1\u019b\1\0\1\u019b\2\0\6\u019b\24\u0171"+ + "\51\0\1\u012a\11\0\1\u0170\26\0\3\11\5\u019c\2\0"+ + "\3\11\1\u019c\1\0\1\u019c\1\0\1\11\1\0\1\11"+ + "\1\u019c\2\11\4\0\1\11\2\u019c\2\11\3\u019c\2\0"+ + "\1\11\2\u019c\2\11\12\0\1\11\1\0\12\11\1\u019c"+ + "\4\11\1\u019c\5\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\7\12\1\u019d"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\u019e\21\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\12\1\u019f\2\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\u010c"+ + "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\u01a0\4\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\17\12\1\u01a1\4\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\4\12\1\u0135\3\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\20\12\1\u01a2\3\12"+ + "\3\314\5\u01a3\1\133\1\0\3\314\1\u01a3\1\314\1\u01a3"+ + "\4\314\1\u01a3\7\314\2\u01a3\2\314\3\u01a3\3\314\2\u01a3"+ + "\30\314\1\u01a3\4\314\1\u01a3\4\314\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u01a4\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\3\12\1\362\1\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u01a5\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\3\154\5\u01a6\2\154\1\335"+ + "\2\154\1\u01a6\1\336\1\u01a6\4\154\1\u01a6\7\154\2\u01a6"+ + "\2\154\3\u01a6\3\154\2\u01a6\30\154\1\u01a6\4\154\1\u01a6"+ + "\4\154\1\11\7\12\2\0\1\115\1\12\1\u01a7\1\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\3\353\5\u01a8"+ + "\2\353\1\u0148\2\353\1\u01a8\1\0\1\u01a8\4\353\1\u01a8"+ + "\7\353\2\u01a8\2\353\3\u01a8\3\353\2\u01a8\30\353\1\u01a8"+ + "\4\353\1\u01a8\4\353\1\11\7\12\2\0\1\115\1\12"+ + "\1\u01a9\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\247"+ + "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\12"+ + "\1\u01aa\2\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u0187\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\2\12\1\242\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\12\1\u0159\2\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\1\12\1\242\2\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u01ab\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\3\11\5\u01ac\2\0\3\11\1\u01ac\1\0\1\u01ac"+ + "\1\0\1\11\1\0\1\11\1\u01ac\2\11\4\0\1\11"+ + "\2\u01ac\2\11\3\u01ac\2\0\1\11\2\u01ac\2\11\12\0"+ + "\1\11\1\0\12\11\1\u01ac\4\11\1\u01ac\5\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\242\2\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\u0101\4\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u01ad\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\2\12\1\u01ae\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\3\12\1\u0101\20\12\1\11\7\12\2\0"+ + "\1\115\2\12\1\u01af\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\2\12\1\u01b0\21\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\u01b1\2\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\2\12\1\u01b2\21\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\5\12\1\u013e\16\12\30\0\1\u016b\111\0"+ + "\1\u016e\111\0\1\u0171\61\0\3\11\5\12\2\0\3\11"+ + "\1\12\1\0\1\12\1\0\1\11\1\0\1\11\1\12"+ + "\2\11\4\0\1\11\2\12\2\11\3\12\2\0\1\11"+ + "\2\12\2\11\12\0\1\11\1\0\12\11\1\12\4\11"+ + "\1\12\5\11\1\12\1\u01b3\5\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\1\374\4\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\4\12\1\u01b4\17\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\5\12\1\u0158\16\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\20\12\1\u01b5"+ + "\3\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\20\12\1\u01b6\3\12\3\314\5\132"+ + "\1\133\1\0\3\314\1\132\1\314\1\132\4\314\1\132"+ + "\7\314\2\132\2\314\3\132\3\314\2\132\30\314\1\132"+ + "\4\314\1\132\4\314\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\4\12\1\247\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\1\u01b7\23\12\3\154\5\23\2\154\1\335\2\154"+ + "\1\23\1\336\1\23\4\154\1\23\7\154\2\23\2\154"+ + "\3\23\3\154\2\23\30\154\1\23\4\154\1\23\4\154"+ + "\1\11\7\12\2\0\1\115\1\u0101\2\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\3\353\5\u01b8\2\353\1\u0148"+ + "\2\353\1\u01b8\1\0\1\u01b8\4\353\1\u01b8\7\353\2\u01b8"+ + "\2\353\3\u01b8\3\353\2\u01b8\30\353\1\u01b8\4\353\1\u01b8"+ + "\4\353\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\u01ad\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\5\12\1\u01b9\16\12\3\11\5\u01ba\2\0\3\11\1\u01ba"+ + "\1\0\1\u01ba\1\0\1\11\1\0\1\11\1\u01ba\2\11"+ + "\4\0\1\11\2\u01ba\2\11\3\u01ba\2\0\1\11\2\u01ba"+ + "\2\11\12\0\1\11\1\0\12\11\1\u01ba\4\11\1\u01ba"+ + "\5\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\u015b\4\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\2\12\1\u015c\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\u01bb"+ + "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\2\12\1\u01bc\2\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\2\12\1\342"+ + "\5\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\6\12\1\u0101\1\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\1\12\1\242\5\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ + "\1\u01bd\3\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\13\12\1\u01be\10\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\23\12\1\u01bf\1\11"+ + "\1\12\1\u01c0\5\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\3\353\5\172\2\353\1\u0148"+ + "\2\353\1\172\1\0\1\172\4\353\1\172\7\353\2\172"+ + "\2\353\3\172\3\353\2\172\30\353\1\172\4\353\1\172"+ + "\4\353\1\11\7\12\2\0\1\115\1\12\1\u01c1\1\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\3\11\5\233"+ + "\2\0\3\11\1\233\1\0\1\233\1\0\1\11\1\0"+ + "\1\11\1\233\2\11\4\0\1\11\2\233\2\11\3\233"+ + "\2\0\1\11\2\233\2\11\12\0\1\11\1\0\12\11"+ + "\1\233\4\11\1\233\5\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\1\12\1\u0101\2\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\1\12\1\247\1\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\u01c2\4\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\15\12\1\u01c3\6\12\1\11\1\12"+ + "\1\u01c4\5\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\u01c5\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\2\12\1\u01c6\21\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\u01c7\3\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\16\12\1\u019d\5\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\12\12\1\u01c8\11\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\u01c9\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\11\12\1\u015b\12\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\374\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\4\12\1\u0134\3\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\10\12\1\u01ca\13\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\u01cb\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\213\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12"; + + private static int [] zzUnpackTrans() { + int [] result = new int[31154]; + 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; + } + + + /* 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; + + /* 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 = + "\10\0\6\1\1\11\4\1\1\11\5\1\1\11\14\1"+ + "\2\11\2\1\1\11\11\1\1\11\4\1\1\11\5\1"+ + "\1\11\3\1\1\11\3\1\1\11\1\1\1\11\1\1"+ + "\1\11\17\1\1\0\36\1\1\11\3\1\1\11\31\1"+ + "\1\0\21\1\3\0\1\11\4\0\1\11\1\0\2\11"+ + "\4\0\13\1\1\0\7\1\1\11\21\1\1\11\16\1"+ + "\1\11\62\1\14\0\15\1\1\11\10\1\1\11\6\1"+ + "\1\11\36\1\1\0\1\1\2\0\1\1\2\0\1\1"+ + "\1\0\43\1\6\0\60\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[459]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Token type specific to DTokenMaker; this signals that the user is in + * a nestable multi-line comment. The nested depth is embedded in the + * actual end token type. + */ + private static final int INTERNAL_IN_NESTABLE_MLC = -(1<<11); + + /** + * When in a (possibly) nested MLC, this is the current nested depth. + */ + private int nestedMlcDepth; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + private void addNestedMlcEndToken() { + addEndToken(INTERNAL_IN_NESTABLE_MLC - nestedMlcDepth); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_NESTABLE_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + nestedMlcDepth = 0; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_BACKQUOTE: + state = WYSIWYG_STRING_2; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = WYSIWYG_STRING_1; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + break; + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + } + nestedMlcDepth = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 188) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 14: + { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 46: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 47: break; + case 41: + { addToken(Token.LITERAL_BOOLEAN); + } + case 48: break; + case 25: + { addToken(Token.ERROR_CHAR); + } + case 49: break; + case 22: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 50: break; + case 4: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 51: break; + case 18: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 52: break; + case 11: + { addToken(Token.ANNOTATION); + } + case 53: break; + case 6: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 54: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 55: break; + case 20: + { addToken(Token.LITERAL_BACKQUOTE); + } + case 56: break; + case 33: + { nestedMlcDepth++; + } + case 57: break; + case 37: + { start = zzMarkedPos-3; yybegin(EOL_DOCCOMMENT); + } + case 58: break; + case 43: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 59: break; + case 35: + { addToken(Token.LITERAL_CHAR); + } + case 60: break; + case 24: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 61: break; + case 28: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 62: break; + case 17: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 63: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 64: break; + case 32: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); + } + case 65: break; + case 39: + { addToken(Token.DATA_TYPE); + } + case 66: break; + case 34: + { System.out.println("... " + nestedMlcDepth); + if (--nestedMlcDepth==0) { + addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(YYINITIAL); + } + } + case 67: break; + case 31: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 68: break; + case 21: + { addToken(Token.LITERAL_BACKQUOTE); yybegin(YYINITIAL); + } + case 69: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 70: break; + case 19: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); + } + case 71: break; + case 38: + { start = zzMarkedPos-3; yybegin(DOCCOMMENT); + } + case 72: break; + case 15: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; + } + case 73: break; + case 30: + { addToken(Token.RESERVED_WORD); + } + case 74: break; + case 42: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 75: break; + case 29: + { start = zzMarkedPos-2; nestedMlcDepth = 1; yybegin(NESTABLE_MLC); + } + case 76: break; + case 45: + { addToken(Token.RESERVED_WORD_2); + } + case 77: break; + case 16: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 78: break; + case 10: + { addToken(Token.SEPARATOR); + } + case 79: break; + case 5: + { addNullToken(); return firstToken; + } + case 80: break; + case 13: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 81: break; + case 8: + { addToken(Token.LITERAL_BACKQUOTE); yybegin(WYSIWYG_STRING_2); + } + case 82: break; + case 9: + { addToken(Token.OPERATOR); + } + case 83: break; + case 23: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 84: break; + case 26: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(WYSIWYG_STRING_1); + } + case 85: break; + case 44: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 86: break; + case 40: + { addToken(Token.COMMENT_MULTILINE); + } + case 87: break; + case 27: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 88: break; + case 36: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 89: break; + case 12: + { + } + case 90: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case WYSIWYG_STRING_1: { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; + } + case 460: break; + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 461: break; + case NESTABLE_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; + } + case 462: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 463: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 464: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 465: break; + case WYSIWYG_STRING_2: { + if (firstToken==null) { + addToken(Token.LITERAL_BACKQUOTE); + } + return firstToken; + } + case 466: break; + case EOL_DOCCOMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 467: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex new file mode 100644 index 0000000..5c5143c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex @@ -0,0 +1,660 @@ +/* + * 09/01/2014 + * + * DartTokenMaker.java - Token parser for Dart. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dart files. Its states could be simplified, but are + * kept the way they are to keep a degree of similarity (i.e. copy/paste) + * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in + * performance.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DartTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + */ +%% + +%public +%class DartTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * The version of JavaScript being highlighted. + */ + private static String jsVersion; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DartTokenMaker() { + super(); + } + + + static { + jsVersion = "1.0"; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + } + return type; + } + + + /** + * Returns the JavaScript version being highlighted. + * + * @return Supported JavaScript version. + * @see #isJavaScriptCompatible(String) + */ + public static String getJavaScriptVersion() { + return jsVersion; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = DART_MULTILINE_STRING_DOUBLE; + break; + case Token.LITERAL_CHAR: + state = DART_MULTILINE_STRING_SINGLE; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + default: + state = YYINITIAL; // ??? + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether features for a specific JS version should be honored + * while highlighting. + * + * @param version JavaScript version required + * @return Whether the JavaScript version is the same or greater than + * version required. + */ + public static boolean isJavaScriptCompatible(String version) { + return jsVersion.compareTo(version) >= 0; + } + + + /** + * Set the supported JavaScript version because some keywords were + * introduced on or after this version. + * + * @param javaScriptVersion The version of JavaScript to support, such as + * "1.5" or "1.6". + * @see #isJavaScriptCompatible(String) + * @see #getJavaScriptVersion() + */ + public static void setJavaScriptVersion(String javaScriptVersion) { + jsVersion = javaScriptVersion; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrDigit = ({Letter}|{Digit}) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) + +DART_Annotation = ("@"{Letter}{LetterOrDigit}*) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_EOL_COMMENT +%state DART_MULTILINE_STRING_DOUBLE +%state DART_MULTILINE_STRING_SINGLE + + +%% + + { + + // Keywords + "abstract" | + "assert" | + "class" | + "const" | + "extends" | + "factory" | + "get" | + "implements" | + "import" | + "interface" | + "library" | + "negate" | + "new" | + "null" | + "operator" | + "set" | + "source" | + "static" | + "super" | + "this" | + "typedef" | + "var" | + "final" | + "if" | + "else" | + "for" | + "in" | + "is" | + "while" | + "do" | + "switch" | + "case" | + "default" | + "in" | + "try" | + "catch" | + "finally" | + "break" | + "continue" | + "throw" | + "assert" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Data types + "bool" | + "int" | + "double" | + "num" | + "void" { addToken(Token.DATA_TYPE); } + + // stdlib types + "AssertionError" | + "Clock" | + "Collection" | + "Comparable" | + "Date" | + "Dispatcher" | + "Duration" | + "Expect" | + "FallThroughError" | + "Function" | + "HashMap" | + "HashSet" | + "Hashable" | + "Isolate" | + "Iterable" | + "Iterator" | + "LinkedHashMap" | + "List" | + "Map" | + "Match" | + "Math" | + "Object" | + "Pattern" | + "Promise" | + "Proxy" | + "Queue" | + "ReceivePort" | + "RegExp" | + "SendPort" | + "Set" | + "StopWatch" | + "String" | + "StringBuffer" | + "Strings" | + "TimeZone" | + "TypeError" | + + // stdlib exceptions + "BadNumberFormatException" | + "ClosureArgumentMismatchException" | + "EmptyQueueException" | + "Exception" | + "ExpectException" | + "IllegalAccessException" | + "IllegalArgumentException" | + "IllegalJSRegExpException" | + "IndexOutOfRangeException" | + "IntegerDivisionByZeroException" | + "NoMoreElementsException" | + "NoSuchMethodException" | + "NotImplementedException" | + "NullPointerException" | + "ObjectNotClosureException" | + "OutOfMemoryException" | + "StackOverflowException" | + "UnsupportedOperationException" | + "WrongArgumentCountException" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* Multi-line string literals. */ + \"\"\" { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_DOUBLE); } + \'\'\' { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_SINGLE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + + {DART_Annotation} { addToken(Token.ANNOTATION); } + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Deprecated stuff */ + "#library" | + "#import" | + "#source" | + "#resource" { addToken(Token.RESERVED_WORD); } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\"\\\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } + \" {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + + { + [^\'\\\n]* {} + \\.? { /* Skip escaped chars, handles case: "\'''". */ } + \'\'\' { addToken(start,zzStartRead+2, Token.LITERAL_CHAR); yybegin(YYINITIAL); } + \' {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java new file mode 100644 index 0000000..a4f43e7 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java @@ -0,0 +1,2176 @@ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 7:25 PM */ + +/* + * 09/01/2014 + * + * DartTokenMaker.java - Token parser for Dart. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dart files. Its states could be simplified, but are + * kept the way they are to keep a degree of similarity (i.e. copy/paste) + * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in + * performance.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DartTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + */ + +public class DartTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int JS_STRING = 1; + public static final int JS_CHAR = 2; + public static final int DART_MULTILINE_STRING_DOUBLE = 5; + public static final int JS_EOL_COMMENT = 4; + public static final int YYINITIAL = 0; + public static final int JS_MLC = 3; + public static final int DART_MULTILINE_STRING_SINGLE = 6; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\2\1\0\1\1\1\11\22\0\1\1\1\35\1\115"+ + "\1\12\1\15\1\35\1\37\1\44\2\43\1\17\1\30\1\27\1\24"+ + "\1\25\1\16\1\5\7\7\2\4\1\40\1\27\1\31\1\32\1\34"+ + "\1\36\1\42\1\75\1\6\1\76\1\77\1\23\1\22\1\3\1\101"+ + "\1\74\1\113\1\3\1\21\1\102\1\73\1\104\1\106\1\107\1\110"+ + "\1\103\1\100\1\114\1\3\1\111\1\20\1\3\1\112\1\43\1\13"+ + "\1\43\1\33\1\14\1\0\1\56\1\57\1\61\1\65\1\54\1\51"+ + "\1\67\1\45\1\52\1\105\1\72\1\53\1\70\1\63\1\62\1\47"+ + "\1\3\1\60\1\50\1\46\1\10\1\71\1\55\1\64\1\66\1\3"+ + "\1\26\1\41\1\26\1\36\uff81\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 = + "\5\0\2\1\1\2\1\3\1\4\1\5\2\6\1\5"+ + "\2\2\2\7\3\5\1\7\1\5\1\10\1\5\5\7"+ + "\2\2\1\11\37\5\1\12\1\1\1\13\1\14\1\15"+ + "\1\1\1\16\1\17\1\20\1\1\1\21\5\1\1\22"+ + "\3\1\1\23\1\24\1\1\1\25\1\26\1\1\1\2"+ + "\1\27\1\6\1\30\1\27\1\30\1\27\1\31\1\27"+ + "\1\5\4\2\1\32\1\33\5\5\1\0\1\7\1\34"+ + "\1\0\13\5\2\35\21\5\1\35\34\5\1\0\1\36"+ + "\1\37\1\40\1\41\10\0\1\24\1\0\1\26\1\0"+ + "\1\2\1\30\1\0\2\31\1\5\4\2\1\0\7\5"+ + "\1\42\13\5\1\43\17\5\1\43\31\5\1\44\15\5"+ + "\1\45\12\0\1\46\1\47\1\2\1\5\3\2\1\50"+ + "\7\5\1\51\64\5\1\0\1\1\2\0\1\52\2\0"+ + "\1\53\1\2\1\5\3\2\7\5\1\35\50\5\4\0"+ + "\1\2\1\5\3\2\3\5\1\44\6\5\1\54\23\5"+ + "\1\44\3\5\1\44\5\5\1\35\1\2\224\5"; + + private static int [] zzUnpackAction() { + int [] result = new int[616]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ + "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u02be\0\u0444"+ + "\0\u0492\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u02be"+ + "\0\u02be\0\u06b4\0\u0702\0\u0750\0\u02be\0\u079e\0\u07ec\0\u083a"+ + "\0\u0888\0\u08d6\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa"+ + "\0\u0af8\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc\0\u0d1a"+ + "\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0f8a"+ + "\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110\0\u115e\0\u11ac\0\u11fa"+ + "\0\u1248\0\u1296\0\u02be\0\u12e4\0\u02be\0\u1332\0\u02be\0\u12e4"+ + "\0\u02be\0\u1380\0\u02be\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506"+ + "\0\u02be\0\u1554\0\u15a2\0\u15f0\0\u02be\0\u163e\0\u168c\0\u02be"+ + "\0\u16da\0\u1728\0\u1776\0\u17c4\0\u17c4\0\u17c4\0\u1812\0\u1860"+ + "\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82\0\u1ad0"+ + "\0\u02be\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u04e0"+ + "\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14"+ + "\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u030c\0\u2136"+ + "\0\u2184\0\u21d2\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6"+ + "\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616"+ + "\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea\0\u2838\0\u2886"+ + "\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a\0\u2aa8\0\u2af6"+ + "\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca\0\u2d18\0\u2d66"+ + "\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a\0\u2f88\0\u02be"+ + "\0\u2fd6\0\u3024\0\u02be\0\u3072\0\u30c0\0\u310e\0\u315c\0\u31aa"+ + "\0\u31f8\0\u3246\0\u3294\0\u02be\0\u32e2\0\u02be\0\u3330\0\u337e"+ + "\0\u33cc\0\u341a\0\u17c4\0\u3468\0\u34b6\0\u3504\0\u3552\0\u35a0"+ + "\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2\0\u3810"+ + "\0\u385e\0\u02be\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32"+ + "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2"+ + "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4\0\u3f12"+ + "\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u030c\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ + "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ + "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u030c"+ + "\0\u4884\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6"+ + "\0\u4af4\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u02be\0\u4c7a\0\u4cc8"+ + "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ + "\0\u02be\0\u02be\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u02be"+ + "\0\u510c\0\u515a\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u030c"+ + "\0\u532e\0\u537c\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550"+ + "\0\u559e\0\u55ec\0\u563a\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0"+ + "\0\u580e\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30"+ + "\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0"+ + "\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10"+ + "\0\u5f5e\0\u5fac\0\u5ffa\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180"+ + "\0\u61ce\0\u621c\0\u626a\0\u62b8\0\u3024\0\u02be\0\u6306\0\u6354"+ + "\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528\0\u6576\0\u65c4"+ + "\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798\0\u67e6\0\u6834"+ + "\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08\0\u6a56\0\u6aa4"+ + "\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78\0\u6cc6\0\u6d14"+ + "\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8\0\u6f36\0\u6f84"+ + "\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158\0\u71a6\0\u71f4"+ + "\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8\0\u7416\0\u7464"+ + "\0\u74b2\0\u7500\0\u63a2\0\u754e\0\u648c\0\u759c\0\u75ea\0\u7638"+ + "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ + "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u030c\0\u7a2e\0\u7a7c\0\u7aca"+ + "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ + "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ + "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ + "\0\u8268\0\u82b6\0\u0222\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c"+ + "\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac"+ + "\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c"+ + "\0\u896a\0\u89b8\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c"+ + "\0\u8bda\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc"+ + "\0\u8e4a\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c"+ + "\0\u90ba\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc"+ + "\0\u932a\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c"+ + "\0\u959a\0\u95e8\0\u9636\0\u9684\0\u96d2\0\u9720\0\u976e\0\u97bc"+ + "\0\u980a\0\u780c\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990\0\u99de"+ + "\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u9bb2\0\u9c00\0\u9c4e"+ + "\0\u9c9c\0\u9cea\0\u9d38\0\u9d86\0\u9dd4\0\u9e22\0\u9e70\0\u9ebe"+ + "\0\u9f0c\0\u9f5a\0\u9fa8\0\u9ff6\0\ua044\0\ua092\0\ua0e0\0\ua12e"+ + "\0\ua17c\0\ua1ca\0\ua218\0\ua266\0\ua2b4\0\ua302\0\ua350\0\ua39e"+ + "\0\ua3ec\0\ua43a\0\ua488\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e"+ + "\0\ua65c\0\ua6aa\0\ua6f8\0\ua746\0\ua794\0\ua7e2\0\ua830\0\ua87e"+ + "\0\ua8cc\0\ua91a\0\ua968\0\ua9b6\0\uaa04\0\uaa52\0\uaaa0\0\uaaee"+ + "\0\uab3c\0\uab8a\0\uabd8\0\uac26\0\uac74\0\uacc2\0\uad10\0\uad5e"+ + "\0\uadac\0\uadfa\0\uae48\0\uae96\0\uaee4\0\uaf32\0\uaf80\0\uafce"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[616]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\14"+ + "\1\13\1\17\1\20\1\10\2\13\1\21\1\22\1\13"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\2\22\1\34\1\22\1\35\1\36\1\35\1\37"+ + "\1\40\1\30\1\41\1\13\1\42\1\13\1\43\1\44"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ + "\1\55\1\56\1\13\1\57\1\13\1\60\1\13\1\61"+ + "\1\13\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ + "\1\71\1\72\1\73\1\13\1\74\1\75\1\76\1\77"+ + "\2\13\1\100\1\101\2\102\1\103\10\102\1\104\101\102"+ + "\1\105\2\106\1\107\10\106\1\110\30\106\1\111\51\106"+ + "\2\112\1\113\14\112\1\114\25\112\1\115\3\112\1\116"+ + "\3\112\1\117\40\112\2\120\1\121\42\120\1\122\3\120"+ + "\1\123\3\120\1\124\40\120\2\102\1\125\10\102\1\126"+ + "\101\102\1\127\2\106\1\130\10\106\1\131\30\106\1\132"+ + "\51\106\1\10\2\0\6\10\1\0\4\10\2\0\4\10"+ + "\16\0\1\10\2\0\50\10\2\0\1\11\232\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\1\0\1\134\2\0\1\134"+ + "\2\14\1\134\1\14\1\134\1\0\4\134\2\0\1\134"+ + "\1\135\1\136\1\137\1\0\1\140\14\0\1\134\2\0"+ + "\4\134\1\136\1\134\1\135\1\137\10\134\1\136\11\134"+ + "\1\136\15\134\1\0\1\134\2\0\1\134\1\141\1\142"+ + "\1\134\1\142\1\134\1\0\4\134\2\0\1\143\1\135"+ + "\1\136\1\137\1\0\1\140\14\0\1\134\2\0\4\134"+ + "\1\136\1\134\1\135\1\137\7\134\1\143\1\136\11\134"+ + "\1\136\15\134\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\11\13"+ + "\1\144\36\13\1\0\1\10\2\0\6\10\1\0\4\10"+ + "\2\0\4\10\16\0\1\10\2\0\3\10\1\145\1\10"+ + "\1\146\1\147\4\10\1\150\34\10\17\0\1\151\1\152"+ + "\12\0\1\35\115\0\1\35\63\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\5\13\1\153\42\13\1\0\1\10\2\0\5\13"+ + "\1\154\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\155\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\17\13\1\156\3\13\1\157\24\13\25\0"+ + "\1\35\5\0\1\35\67\0\2\140\1\0\1\140\136\0"+ + "\1\35\1\0\1\35\114\0\1\160\1\35\115\0\1\35"+ + "\1\0\1\161\113\0\1\35\4\0\1\35\110\0\1\35"+ + "\6\0\1\35\54\0\1\10\2\0\1\162\2\10\1\162"+ + "\1\10\1\162\1\0\4\10\2\0\4\162\16\0\1\10"+ + "\2\0\50\162\45\0\1\163\51\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\164\12\13\1\165\5\13\1\166\26\13\1\0"+ + "\1\10\2\0\5\13\1\167\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\170\5\13"+ + "\1\171\1\172\4\13\1\173\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\174\3\13\1\175\3\13\1\176"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\2\177"+ + "\11\13\1\200\4\13\1\201\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\202\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\6\13\1\203\10\13\1\204\30\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\205\47\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\3\13\1\206\6\13\1\207\35\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\210\1\13"+ + "\1\211\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\212\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\213\2\13\1\214\3\13\1\215\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\216\45\13\1\0\1\10"+ + "\2\0\5\13\1\217\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\220\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\221\5\13\1\222"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\171"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\176"+ + "\3\13\1\223\32\13\1\0\1\10\2\0\5\13\1\224"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\225\3\13\1\226\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\1\13\1\227\1\13\1\230\2\13"+ + "\1\231\7\13\1\232\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\3\13\1\233\44\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\234\6\13\1\235\32\13\1\0\1\10"+ + "\2\0\5\13\1\236\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\237\3\13\1\240"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\241"+ + "\13\13\1\242\26\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\11\13\1\243\36\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\11\13\1\244\36\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\245\5\13\1\246\40\13\1\0\1\10\2\0"+ + "\5\13\1\247\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\12\13\1\250\35\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\251\1\13\1\252\34\13"+ + "\1\0\1\10\2\0\5\13\1\253\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\254\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\255\34\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\16\13\1\256\31\13\116\0"+ + "\1\257\2\102\1\0\10\102\1\0\101\102\1\0\2\260"+ + "\1\0\5\260\1\261\53\260\1\262\31\260\2\106\1\0"+ + "\10\106\1\0\30\106\1\0\51\106\2\112\1\0\14\112"+ + "\1\0\25\112\1\0\3\112\1\0\3\112\1\0\40\112"+ + "\16\0\1\263\145\0\1\264\115\0\1\265\3\0\1\266"+ + "\120\0\1\267\40\0\2\120\1\0\42\120\1\0\3\120"+ + "\1\0\3\120\1\0\40\120\46\0\1\270\115\0\1\271"+ + "\3\0\1\272\120\0\1\273\40\0\2\274\1\0\113\274"+ + "\115\0\1\275\2\276\1\0\113\276\44\0\1\277\51\0"+ + "\1\10\2\0\5\10\1\300\1\0\4\10\2\0\4\10"+ + "\16\0\1\10\2\0\50\10\1\0\1\134\2\0\6\134"+ + "\1\0\4\134\2\0\4\134\16\0\1\134\2\0\50\134"+ + "\1\0\1\134\2\0\1\134\2\301\1\134\1\301\1\134"+ + "\1\0\4\134\2\0\4\134\1\302\3\0\1\302\11\0"+ + "\1\134\2\0\50\134\1\0\1\134\2\0\1\134\2\140"+ + "\1\134\1\140\1\134\1\0\4\134\2\0\2\134\1\136"+ + "\1\137\16\0\1\134\2\0\4\134\1\136\2\134\1\137"+ + "\10\134\1\136\11\134\1\136\15\134\1\0\1\134\2\0"+ + "\1\134\2\141\1\134\1\141\1\134\1\0\4\134\2\0"+ + "\2\134\1\136\1\137\1\0\1\140\14\0\1\134\2\0"+ + "\4\134\1\136\2\134\1\137\10\134\1\136\11\134\1\136"+ + "\15\134\1\0\1\134\2\0\1\134\1\141\1\142\1\134"+ + "\1\142\1\134\1\0\4\134\2\0\1\134\1\303\1\136"+ + "\1\137\1\0\1\140\14\0\1\134\2\0\4\134\1\136"+ + "\1\134\1\303\1\137\10\134\1\136\11\134\1\136\15\134"+ + "\1\0\1\134\2\0\1\134\4\304\1\134\1\0\4\134"+ + "\2\0\2\134\2\304\16\0\1\134\2\0\4\134\1\304"+ + "\2\134\1\304\1\134\2\304\1\134\1\304\3\134\1\304"+ + "\7\134\3\304\15\134\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\20\13\1\305\27\13\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\15\10\1\306"+ + "\32\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\23\10\1\307\24\10\1\0"+ + "\1\10\2\0\6\10\1\0\4\10\2\0\4\10\16\0"+ + "\1\10\2\0\5\10\1\310\42\10\1\0\1\10\2\0"+ + "\6\10\1\0\4\10\2\0\4\10\16\0\1\10\2\0"+ + "\7\10\1\311\40\10\20\0\1\312\76\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\313\12\13\1\314\31\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\16\13\1\315\31\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\6\13\1\316\41\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\2\13\1\317\11\13\1\320"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\2\13\1\321"+ + "\45\13\33\0\1\35\1\0\1\22\61\0\1\10\2\0"+ + "\6\162\1\0\4\10\2\0\4\162\16\0\1\10\2\0"+ + "\50\162\45\0\1\322\51\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\323\5\13\1\324\34\13\1\0\1\10\2\0"+ + "\5\13\1\325\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\21\13\1\177\26\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\326\45\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\327\45\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\330\36\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\1\13\1\177\46\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\5\13\1\331\42\13\1\0\1\10"+ + "\2\0\5\13\1\332\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\16\13\1\333\31\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\6\13\1\334\5\13\1\335\33\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\177\34\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\336\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\2\13\1\337\45\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\12\13\1\340\35\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\341\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\342\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\343\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\344\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\345\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\346\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\347\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\350\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\351\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\352\1\13\1\341"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\353"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\354"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\355"+ + "\14\13\1\356\24\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\10\13\1\177\11\13\1\357\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\360\43\13\1\0\1\10\2\0"+ + "\5\13\1\361\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\5\13\1\362\42\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\363\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\26\13\1\177\21\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\364\33\13\1\365\1\366\11\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\367\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\370\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\6\13\1\371\41\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\372\2\13\1\373"+ + "\13\13\1\374\27\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\3\13\1\375\44\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\376\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\377\14\13\1\u0100\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u0101\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\u0102\44\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u0103\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\23\13\1\u0104\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0105\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\u0106\44\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u0107\1\u0108\45\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\u0109\1\13\1\u010a\1\13"+ + "\1\u010b\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u0108\14\13\1\u010c\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u010d\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\40\13\1\u010e\7\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u010f\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u0110\32\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u0111\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\14\13\1\u0112\5\13\1\u0113\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\15\13\1\u0114\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\3\13\1\u0115\44\13\116\0\1\u0116"+ + "\4\0\4\u0117\12\0\2\u0117\25\0\1\u0117\2\0\1\u0117"+ + "\1\0\2\u0117\1\0\1\u0117\3\0\1\u0117\7\0\3\u0117"+ + "\22\0\4\u0118\12\0\2\u0118\25\0\1\u0118\2\0\1\u0118"+ + "\1\0\2\u0118\1\0\1\u0118\3\0\1\u0118\7\0\3\u0118"+ + "\64\0\1\u0119\116\0\1\u011a\121\0\1\u011b\117\0\1\u011c"+ + "\106\0\1\u011d\116\0\1\u011e\121\0\1\u011f\117\0\1\u0120"+ + "\155\0\1\u0121\44\0\1\u0122\51\0\1\10\2\0\1\10"+ + "\4\u0123\1\10\1\0\4\10\2\0\2\10\2\u0123\16\0"+ + "\1\10\2\0\4\10\1\u0123\2\10\1\u0123\1\10\2\u0123"+ + "\1\10\1\u0123\3\10\1\u0123\7\10\3\u0123\15\10\1\0"+ + "\1\134\2\0\1\134\2\301\1\134\1\301\1\134\1\0"+ + "\4\134\2\0\2\134\1\136\1\134\16\0\1\134\2\0"+ + "\4\134\1\136\13\134\1\136\11\134\1\136\15\134\5\0"+ + "\2\301\1\0\1\301\106\0\1\134\2\0\1\134\4\304"+ + "\1\134\1\0\4\134\2\0\1\134\1\303\2\304\16\0"+ + "\1\134\2\0\4\134\1\304\1\134\1\303\1\304\1\134"+ + "\2\304\1\134\1\304\3\134\1\304\7\134\3\304\15\134"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\26\13\1\u0124\21\13"+ + "\1\0\1\10\2\0\5\10\1\u0125\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\50\10\1\0\1\10\2\0"+ + "\6\10\1\0\4\10\2\0\4\10\16\0\1\10\2\0"+ + "\2\10\1\u0126\45\10\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\12\10\1\u0127"+ + "\35\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\3\10\1\145\44\10\17\0"+ + "\1\u0128\77\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0108"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\25\13\1\u0129"+ + "\22\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u012a"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u012b"+ + "\41\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u012c"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u012d"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u012e"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\177"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u012f"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0130"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0131"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\176"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0132"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\352"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0133"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u0134"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\325"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0135"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0136"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u0137"+ + "\6\13\1\u0138\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\u0139\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\177\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u013a\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\341\41\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u0138\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u013b\46\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\11\13\1\u013c\36\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\356\41\13\1\0\1\10\2\0\5\13\1\u013d"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\323\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\14\13"+ + "\1\u013e\33\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u013f\1\13\1\171\44\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\13\13\1\u0140\34\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\177\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0141\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0142\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\12\13\1\u0143\35\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\20\13\1\356\27\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\u0144\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\27\13\1\u0145\20\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u0146\32\13\1\0\1\10\2\0\5\13"+ + "\1\u0147\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\u0148\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\u0149\41\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014a\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014b\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\u014c\42\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014d\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014e\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\3\13\1\u014f\10\13\1\u0150\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\6\13\1\u0151\41\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0152\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u012a\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0153\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0108\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0154\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0155\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\u0156\47\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\u0108\13\13\1\u0157\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\14\13\1\u0158\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\u0159\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u015a\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\20\13\1\u015b\27\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\37\13\1\u015c\10\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u015d\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u015e\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\17\13\1\u015f\3\13\1\u0160\24\13\1\0"+ + "\1\10\2\0\5\13\1\u0103\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u0161\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\3\13"+ + "\1\u0162\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\16\13\1\u0163\31\13\1\0\1\10\2\0"+ + "\5\13\1\u0164\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\5\0\4\u0165\12\0\2\u0165"+ + "\25\0\1\u0165\2\0\1\u0165\1\0\2\u0165\1\0\1\u0165"+ + "\3\0\1\u0165\7\0\3\u0165\22\0\4\u0166\12\0\2\u0166"+ + "\25\0\1\u0166\2\0\1\u0166\1\0\2\u0166\1\0\1\u0166"+ + "\3\0\1\u0166\7\0\3\u0166\65\0\1\u0167\106\0\1\u0168"+ + "\131\0\1\u011a\66\0\1\u0169\137\0\1\u016a\106\0\1\u016b"+ + "\131\0\1\u011e\66\0\1\u016c\70\0\1\10\2\0\1\10"+ + "\4\u016d\1\10\1\0\4\10\2\0\2\10\2\u016d\16\0"+ + "\1\10\2\0\4\10\1\u016d\2\10\1\u016d\1\10\2\u016d"+ + "\1\10\1\u016d\3\10\1\u016d\7\10\3\u016d\15\10\1\0"+ + "\1\10\2\0\5\13\1\u016e\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ + "\2\0\6\10\1\0\4\10\2\0\4\10\16\0\1\10"+ + "\2\0\13\10\1\u016f\34\10\1\0\1\10\2\0\6\10"+ + "\1\0\4\10\2\0\4\10\16\0\1\10\2\0\15\10"+ + "\1\u0170\32\10\1\0\1\10\2\0\6\10\1\0\4\10"+ + "\2\0\4\10\16\0\1\10\2\0\13\10\1\u0171\34\10"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u0172\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0173\46\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\33\13\1\u0174\14\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\14\13\1\u0175\33\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\2\13\1\u012a\45\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\21\13\1\u0176\26\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\10\13\1\177\37\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\20\13\1\u0177\27\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\5\13\1\u0178\42\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\14\13\1\341\33\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\6\13\1\u0179\41\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\15\13\1\u017a\32\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017b\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u017c\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\171\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\11\13\1\u017a\36\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\16\13\1\u017d\31\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017e\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\25\13\1\177\22\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017f\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\177\47\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\u0180\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\u0181\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\341\46\13\1\0"+ + "\1\10\2\0\5\13\1\u0182\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\6\13\1\u0183\41\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\41\13\1\u0184\6\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\23\13\1\u0185\24\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\13\13\1\u0186\34\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\14\13\1\u0187\33\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\u0188\36\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\240\36\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u0189\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u018a\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\16\13\1\u018b\31\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\17\13\1\u018c\30\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\13\13\1\u018d\34\13\1\0\1\10"+ + "\2\0\5\13\1\u018e\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\25\13\1\u0108\22\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\315\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u018f\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u0190\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\45\13\1\u0191\2\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\3\13\1\u0192"+ + "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0193\23\13\1\u0194\1\u0195\11\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\u0108\47\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\25\13\1\u0196\22\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\16\13\1\u0197\31\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\44\13\1\u0198\3\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\41\13\1\u0199\6\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\4\13\1\u019a\43\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\14\13\1\u019b\33\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u019c\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\21\13\1\u0108\26\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\5\13\1\u019d\42\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\5\13\1\u019e\42\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\17\13\1\u019f\30\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u01a0\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\u01a1\45\13\41\0\1\u0168"+ + "\7\0\1\u011a\63\0\1\u01a2\102\0\6\u0169\1\0\1\u01a3"+ + "\1\0\1\u01a3\2\u0169\1\u01a3\4\u0169\2\u01a3\1\0\2\u01a3"+ + "\1\0\1\u01a3\2\0\4\u01a3\1\0\3\u01a3\50\u0169\41\0"+ + "\1\u016b\7\0\1\u011e\63\0\1\u01a4\102\0\6\u016c\1\0"+ + "\1\u01a5\1\0\1\u01a5\2\u016c\1\u01a5\4\u016c\2\u01a5\1\0"+ + "\2\u01a5\1\0\1\u01a5\2\0\4\u01a5\1\0\3\u01a5\50\u016c"+ + "\1\0\1\10\2\0\1\10\4\u01a6\1\10\1\0\4\10"+ + "\2\0\2\10\2\u01a6\16\0\1\10\2\0\4\10\1\u01a6"+ + "\2\10\1\u01a6\1\10\2\u01a6\1\10\1\u01a6\3\10\1\u01a6"+ + "\7\10\3\u01a6\15\10\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\23\13\1\u01a7\24\13\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\14\10\1\u01a8"+ + "\33\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\13\10\1\u01a9\34\10\1\0"+ + "\1\10\2\0\6\10\1\0\4\10\2\0\4\10\16\0"+ + "\1\10\2\0\11\10\1\u01aa\36\10\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\20\13\1\u01ab\27\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\u01ac\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\u01ad\47\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u01ae\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\42\13\1\u01af\5\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u01b0\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\14\13\1\177\33\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\u01b1\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\13\13\1\u01b1\34\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\4\13\1\u01b2\43\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\23\13\1\u01b3\24\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\20\13\1\323\27\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u01b4\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\16\13\1\u01b5\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\16\13\1\u01b6\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u01b7\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\171\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\356\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u01b8\32\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\2\13\1\u01b9\45\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u01ba\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\u01bb\47\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u01bc\10\13\1\u01bd\35\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u01be\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u01bf\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\u01c0\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\37\13\1\u01c1\10\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u01c2\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01c3\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01c4\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u01c5\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\15\13\1\u01c6\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01c7\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\12\13\1\u01bd\35\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u019f\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\313\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\37\13\1\u01c8\10\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\22\13\1\u01c9\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u01ca\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\15\13\1\u01cb\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\35\13\1\u01cc\12\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u01cd\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01ce\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\u0103\44\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\24\13\1\u01cf\23\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0108\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\30\13\1\u01d0\17\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u01d1\45\13\17\0\1\u0169\115\0"+ + "\1\u016c\77\0\1\10\2\0\1\10\4\13\1\10\1\0"+ + "\4\10\2\0\2\10\2\13\16\0\1\10\2\0\4\10"+ + "\1\13\2\10\1\13\1\10\2\13\1\10\1\13\3\10"+ + "\1\13\7\10\3\13\15\10\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\12\13\1\u01d2\35\13\1\0\1\10\2\0\6\10"+ + "\1\0\4\10\2\0\4\10\16\0\1\10\2\0\7\10"+ + "\1\u01d3\40\10\1\0\1\10\2\0\6\10\1\0\4\10"+ + "\2\0\4\10\16\0\1\10\2\0\1\10\1\u01d3\46\10"+ + "\1\0\1\10\2\0\6\10\1\0\4\10\2\0\4\10"+ + "\16\0\1\10\2\0\13\10\1\u01d4\34\10\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\34\13\1\u01d5\13\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\15\13\1\u01ce\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\13\13\1\u01d6\34\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\3\13"+ + "\1\u01d7\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\5\13\1\u01d8\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\4\13\1\177\43\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\21\13\1\177\26\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0133\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u01d9\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\14\13\1\171\33\13\1\0\1\10\2\0\5\13"+ + "\1\341\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\176\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\u01da\42\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\u01db\41\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\3\13\1\u01dc\16\0\1\10"+ + "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\35\13"+ + "\1\u01dd\12\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ + "\1\u01de\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u0103\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u01df\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\13\13"+ + "\1\u01e0\34\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u01b1\46\13\1\0\1\10\2\0\5\13\1\u01e1\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\u01e2"+ + "\42\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01e3"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u0193"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u01e4"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0103"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u01bc"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\24\13\1\u01e5"+ + "\23\13\1\0\1\10\2\0\3\13\1\u01e6\2\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\3\13\1\u0108\44\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u01e7\46\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\313\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u01e8\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\26\13\1\u01e9\21\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\16\13\1\u0108\31\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u015b\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\u01ea\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\u01eb\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u01ec\40\13\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\21\10\1\u01d3"+ + "\26\10\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u01ed"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u01ee"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\17\13\1\u01ef"+ + "\30\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f0"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u01f1"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u01f2"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f3"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u01f4"+ + "\41\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f5"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0108"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\30\13\1\u01f6"+ + "\15\13\1\u01f7\1\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\32\13\1\u01f8\15\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u01f9\46\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\u01fa\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\30\13\1\u01fb\17\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\u01fc\47\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u01fd\40\13\1\0\1\10\2\0\5\13\1\u01fe\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u0157"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\23\13\1\u01ff"+ + "\24\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u0200"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\22\13\1\u0201"+ + "\25\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0202"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0203"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\u0204"+ + "\44\13\1\0\1\10\2\0\5\13\1\u0205\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\14\13\1\320\33\13"+ + "\1\0\1\10\2\0\5\13\1\u0206\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\323\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u0207\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\23\13\1\u0208\24\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\u0209\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u020a\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\u020b\1\u020c\33\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\36\13\1\u020d\11\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\5\13\1\u020e\42\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\37\13\1\u020f\10\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\16\13\1\u0155\31\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0210\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u01de\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0211\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\4\13\1\u0212\43\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\15\13\1\u0213\32\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0214\46\13"+ + "\1\0\1\10\2\0\5\13\1\u0215\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u0216\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\2\13\1\u0217\1\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\u0218\47\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u0219\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u021a\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u021b\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u021c\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\23\13\1\u021d\24\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\1\u021e\47\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\22\13\1\u021f\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\14\13\1\u0220\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\43\13\1\u0221\4\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\24\13\1\u0222\23\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\u0223\43\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\22\13\1\u0224\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\u0225\43\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\u01fc\43\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u0226\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\31\13\1\u0227\16\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\23\13\1\u0228\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0229\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\15\13\1\u022a\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\35\13\1\u0194\12\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\u0155\47\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\13\13\1\u021a\34\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\16\13\1\u022b\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u022c\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u022d\32\13\1\0\1\10\2\0\5\13"+ + "\1\u022e\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u022f\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u0230\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\u0231\42\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\43\13\1\u0232\4\13\1\0\1\10\2\0\5\13\1\u0233"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u0234\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\21\13"+ + "\1\u021a\26\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u0235\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u0236\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\20\13"+ + "\1\u0237\27\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\13\13"+ + "\1\u0238\34\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u0239\46\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\16\13"+ + "\1\u023a\31\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\20\13"+ + "\1\u021a\27\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ + "\1\u023b\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\u023c\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\22\13"+ + "\1\u023d\25\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\u023e\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\11\13"+ + "\1\u023f\36\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ + "\1\u0240\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ + "\1\u0241\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ + "\1\u0242\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\16\13"+ + "\1\u0243\31\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\37\13"+ + "\1\u0244\10\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ + "\1\u0245\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u022d\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u023c\46\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u0246\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\u021a\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\3\13\1\u0247\16\0\1\10\2\0"+ + "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\u0248"+ + "\42\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0249"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u024a"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\10\13\1\u021a"+ + "\37\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\u024b"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u024c"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\2\13\1\u024d"+ + "\45\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u024e"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u024e"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\17\13\1\u024f"+ + "\30\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u0250"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\22\13\1\u0206"+ + "\25\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0251"+ + "\31\13\1\0\1\10\2\0\5\13\1\u0252\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\31\13\1\u0253\16\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u0254\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u021a\46\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\2\13\1\u021a\45\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\16\13\1\u0255\31\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0256\46\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0206\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\15\13\1\u0257\32\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0258\34\13"+ + "\1\0\1\10\2\0\3\13\1\u0259\2\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\35\13\1\u025a\12\13"+ + "\1\0\1\10\2\0\5\13\1\u0246\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\u025b\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\21\13\1\u025c\26\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\u025d\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u025e\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\45\13\1\u025f\2\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\u0260\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\u0261\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\u0262\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\23\13\1\u0263\24\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\u0264\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\u0265\34\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\u0266\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\16\13\1\u021a\31\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\u021a\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u0267\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\14\13\1\u0268\33\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\u021a\47\13\1\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[45084]; + 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; + } + + + /* 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; + + /* 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 = + "\5\0\4\1\1\11\4\1\1\11\10\1\2\11\3\1"+ + "\1\11\45\1\1\11\1\1\1\11\1\1\1\11\1\1"+ + "\1\11\1\1\1\11\5\1\1\11\3\1\1\11\2\1"+ + "\1\11\20\1\1\11\6\1\1\0\2\1\1\0\73\1"+ + "\1\0\1\11\2\1\1\11\10\0\1\11\1\0\1\11"+ + "\1\0\2\1\1\0\7\1\1\0\7\1\1\11\103\1"+ + "\1\11\12\0\2\11\5\1\1\11\74\1\1\0\1\11"+ + "\2\0\1\1\2\0\66\1\4\0\303\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[616]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * The version of JavaScript being highlighted. + */ + private static String jsVersion; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DartTokenMaker() { + super(); + } + + + static { + jsVersion = "1.0"; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + } + return type; + } + + + /** + * Returns the JavaScript version being highlighted. + * + * @return Supported JavaScript version. + * @see #isJavaScriptCompatible(String) + */ + public static String getJavaScriptVersion() { + return jsVersion; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = DART_MULTILINE_STRING_DOUBLE; + break; + case Token.LITERAL_CHAR: + state = DART_MULTILINE_STRING_SINGLE; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + default: + state = YYINITIAL; // ??? + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether features for a specific JS version should be honored + * while highlighting. + * + * @param version JavaScript version required + * @return Whether the JavaScript version is the same or greater than + * version required. + */ + public static boolean isJavaScriptCompatible(String version) { + return jsVersion.compareTo(version) >= 0; + } + + + /** + * Set the supported JavaScript version because some keywords were + * introduced on or after this version. + * + * @param javaScriptVersion The version of JavaScript to support, such as + * "1.5" or "1.6". + * @see #isJavaScriptCompatible(String) + * @see #getJavaScriptVersion() + */ + public static void setJavaScriptVersion(String javaScriptVersion) { + jsVersion = javaScriptVersion; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DartTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DartTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 190) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 11: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 45: break; + case 5: + { addToken(Token.IDENTIFIER); + } + case 46: break; + case 41: + { addToken(Token.LITERAL_BOOLEAN); + } + case 47: break; + case 39: + { addToken(start,zzStartRead+2, Token.LITERAL_CHAR); yybegin(YYINITIAL); + } + case 48: break; + case 30: + { /* Skip all escaped chars. */ + } + case 49: break; + case 32: + { /* Invalid latin-1 character \xXX */ validJSString = false; + } + case 50: break; + case 38: + { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); + } + case 51: break; + case 23: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 52: break; + case 17: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 53: break; + case 36: + { addToken(Token.FUNCTION); + } + case 54: break; + case 28: + { addToken(Token.ANNOTATION); + } + case 55: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 56: break; + case 27: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 57: break; + case 13: + { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); + } + case 58: break; + case 37: + { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_DOUBLE); + } + case 59: break; + case 16: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); + } + case 60: break; + case 14: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 61: break; + case 26: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 62: break; + case 20: + { /* Skip escaped chars, handles case: '\"""'. */ + } + case 63: break; + case 34: + { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_SINGLE); + } + case 64: break; + case 25: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 65: break; + case 12: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 66: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 67: break; + case 35: + { addToken(Token.DATA_TYPE); + } + case 68: break; + case 33: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 69: break; + case 15: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 70: break; + case 6: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 71: break; + case 10: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 72: break; + case 31: + { /* Invalid Unicode character \\uXXXX */ validJSString = false; + } + case 73: break; + case 22: + { /* Skip escaped chars, handles case: "\'''". */ + } + case 74: break; + case 9: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 75: break; + case 29: + { addToken(Token.RESERVED_WORD); + } + case 76: break; + case 42: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 77: break; + case 44: + { addToken(Token.RESERVED_WORD_2); + } + case 78: break; + case 18: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 79: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 80: break; + case 4: + { addNullToken(); return firstToken; + } + case 81: break; + case 7: + { addToken(Token.OPERATOR); + } + case 82: break; + case 21: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 83: break; + case 24: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 84: break; + case 43: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 85: break; + case 40: + { addToken(Token.COMMENT_MULTILINE); + } + case 86: break; + case 1: + { + } + case 87: break; + case 19: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 88: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 617: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 618: break; + case DART_MULTILINE_STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 619: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 620: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 621: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 622: break; + case DART_MULTILINE_STRING_SINGLE: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 623: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex new file mode 100644 index 0000000..4e69d45 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex @@ -0,0 +1,559 @@ +/* + * 7/28/2009 + * + * DelphiTokenMaker.java - Scanner for the Delphi programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Delphi programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DelphiTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class DelphiTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "(*" comment. + */ + public static final int INTERNAL_MLC2 = -1; + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "{$" compiler directive. + */ + public static final int INTERNAL_COMPILER_DIRECTIVE = -2; + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "(*$" compiler directive. + */ + public static final int INTERNAL_COMPILER_DIRECTIVE2 = -3; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DelphiTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case INTERNAL_MLC2: + state = MLC2; + start = text.offset; + break; + case INTERNAL_COMPILER_DIRECTIVE: + state = COMPILER_DIRECTIVE; + start = text.offset; + break; + case INTERNAL_COMPILER_DIRECTIVE2: + state = COMPILER_DIRECTIVE2; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|"$") +IdentifierPart = ({IdentifierStart}|{Digit}) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +UnclosedStringLiteral = ([\'][^\']*) +StringLiteral = ({UnclosedStringLiteral}[\']) +EscapeSequence = ("#"{Digit}*) + +MLCBegin = "{" +MLCEnd = "}" +MLC2Begin = "(*" +MLC2End = "*)" +CompilerDirective1Begin = ({MLCBegin}"$") +CompilerDirective2Begin = ({MLC2Begin}"$") +LineCommentBegin = "//" + +IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +IntegerLiteral = ({IntegerHelper1}[lL]?) +HexLiteral = ({IntegerHelper2}[lL]?) +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") + +Separator = ([\(\)\[\]]) +Separator2 = ([\;,.]) + +Operator = ([\^\@\:\=\<\>\+\-\/\*]) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state MLC +%state MLC2 +%state COMPILER_DIRECTIVE +%state COMPILER_DIRECTIVE2 +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "array" | + "as" | + "at" | + "asm" | + "begin" | + "case" | + "class" | + "const" | + "constructor" | + "destructor" | + "dispinterface" | + "div" | + "do" | + "downto" | + "else" | + "end" | + "except" | + "exports" | + "file" | + "final" | + "finalization" | + "finally" | + "for" | + "function" | + "goto" | + "if" | + "implementation" | + "in" | + "inherited" | + "initialization" | + "inline" | + "interface" | + "is" | + "label" | + "mod" | + "not" | + "object" | + "of" | + "on" | + "or" | + "out" | + "packed" | + "procedure" | + "program" | + "property" | + "raise" | + "record" | + "repeat" | + "resourcestring" | + "set" | + "sealed" | + "shl" | + "shr" | + "static" | + "string" | + "then" | + "threadvar" | + "to" | + "try" | + "type" | + "unit" | + "unsafe" | + "until" | + "uses" | + "var" | + "while" | + "with" | + "xor" { addToken(Token.RESERVED_WORD); } + + /* Directives. */ + "absolute" | + "abstract" | + "assembler" | + "automated" | + "cdecl" | + "contains" | + "default" | + "deprecated" | + "dispid" | + "dynamic" | + "export" | + "external" | + "far" | + "forward" | + "implements" | + "index" | + "library" | + "local" | + "message" | + "name" | + "namespaces" | + "near" | + "nil" | + "nodefault" | + "overload" | + "override" | + "package" | + "pascal" | + "platform" | + "private" | + "protected" | + "public" | + "published" | + "read" | + "readonly" | + "register" | + "reintroduce" | + "requires" | + "resident" | + "safecall" | + "self" | + "stdcall" | + "stored" | + "varargs" | + "virtual" | + "write" | + "writeonly" { addToken(Token.FUNCTION); } + + /* Data types. */ + "shortint" | + "byte" | + "char" | + "smallint" | + "integer" | + "word" | + "longint" | + "cardinal" | + "boolean" | + "bytebool" | + "wordbool" | + "longbool" | + "real" | + "single" | + "double" | + "extended" | + "comp" | + "currency" | + "pointer" { addToken(Token.DATA_TYPE); } + + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {EscapeSequence} { addToken(Token.PREPROCESSOR); } + + /* Comment literals. */ + {CompilerDirective1Begin} {start = zzMarkedPos-2; yybegin(COMPILER_DIRECTIVE); } + {CompilerDirective2Begin} {start = zzMarkedPos-3; yybegin(COMPILER_DIRECTIVE2); } + {MLCBegin} { start = zzMarkedPos-1; yybegin(MLC); } + {MLC2Begin} { start = zzMarkedPos-2; yybegin(MLC2); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + {Operator} { addToken(Token.OPERATOR); } + + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + . { addToken(Token.IDENTIFIER); } + +} + + + { + + [^hwf\n\}]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.COMMENT_MULTILINE); } + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } + {MLC2End} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } + +} + + + { + [^\n\}]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.PREPROCESSOR); } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } +} + + + { + [^\n\*]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } + {MLC2End} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } + \* {} + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } +} + + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java new file mode 100644 index 0000000..f57bf60 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java @@ -0,0 +1,1630 @@ +/* The following code was generated by JFlex 1.4.1 on 8/19/09 10:23 AM */ + +/* + * 7/28/2009 + * + * DelphiTokenMaker.java - Scanner for the Delphi programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Delphi programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DelphiTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class DelphiTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int COMPILER_DIRECTIVE = 3; + public static final int EOL_COMMENT = 5; + public static final int YYINITIAL = 0; + public static final int COMPILER_DIRECTIVE2 = 4; + public static final int MLC = 1; + public static final int MLC2 = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\13\1\12\1\0\1\13\1\7\22\0\1\13\1\42\1\7"+ + "\1\10\1\11\1\42\1\42\1\14\1\17\1\21\1\20\1\27\1\42"+ + "\1\27\1\30\1\22\1\4\7\6\2\3\1\45\1\42\1\44\1\46"+ + "\1\44\1\42\1\43\3\5\1\25\1\26\1\25\5\1\1\24\13\1"+ + "\1\23\2\1\1\41\1\0\1\41\1\44\1\2\1\0\1\36\1\55"+ + "\1\60\1\62\1\34\1\35\1\56\1\47\1\51\1\66\1\67\1\37"+ + "\1\54\1\57\1\61\1\50\1\70\1\32\1\40\1\31\1\33\1\63"+ + "\1\52\1\64\1\53\1\65\1\15\1\7\1\16\1\42\uff81\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 = + "\6\0\1\1\1\2\2\3\1\2\1\4\1\5\1\6"+ + "\1\7\1\10\1\11\1\12\1\11\1\12\11\2\1\12"+ + "\14\2\1\13\1\14\1\15\4\13\1\16\2\13\1\17"+ + "\1\20\1\13\1\21\2\13\1\22\3\13\1\23\1\3"+ + "\1\24\1\23\1\24\1\23\1\25\1\23\1\26\1\27"+ + "\1\30\1\31\3\2\1\32\15\2\1\32\20\2\1\32"+ + "\31\2\1\32\3\2\4\0\1\33\1\34\4\0\1\24"+ + "\1\0\2\25\1\35\22\2\1\36\2\2\1\32\73\2"+ + "\1\32\1\2\10\0\1\37\1\2\1\40\1\36\56\2"+ + "\1\40\2\2\1\36\16\2\2\0\1\41\2\0\1\42"+ + "\13\2\1\32\40\2\1\32\10\2\4\0\10\2\1\36"+ + "\65\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[437]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\71\0\162\0\253\0\344\0\u011d\0\u0156\0\u018f"+ + "\0\u01c8\0\u0201\0\u023a\0\u0273\0\u023a\0\u02ac\0\u02e5\0\u031e"+ + "\0\u0357\0\u023a\0\u023a\0\u0390\0\u03c9\0\u0402\0\u043b\0\u0474"+ + "\0\u04ad\0\u04e6\0\u051f\0\u0558\0\u0591\0\u0156\0\u05ca\0\u0603"+ + "\0\u063c\0\u0675\0\u06ae\0\u06e7\0\u0720\0\u0759\0\u0792\0\u07cb"+ + "\0\u0804\0\u083d\0\u0876\0\u023a\0\u023a\0\u08af\0\u08e8\0\u0921"+ + "\0\u095a\0\u023a\0\u0993\0\u09cc\0\u023a\0\u023a\0\u0a05\0\u023a"+ + "\0\u0a3e\0\u0a77\0\u023a\0\u0ab0\0\u0ae9\0\u0b22\0\u0b5b\0\u0b5b"+ + "\0\u0b5b\0\u0b94\0\u0bcd\0\u0c06\0\u0c3f\0\u0c78\0\u023a\0\u023a"+ + "\0\u0cb1\0\u023a\0\u0cea\0\u0d23\0\u0d5c\0\u018f\0\u0d95\0\u0dce"+ + "\0\u0e07\0\u0e40\0\u0e79\0\u0eb2\0\u0eeb\0\u0f24\0\u0f5d\0\u0f96"+ + "\0\u0fcf\0\u1008\0\u1041\0\u107a\0\u10b3\0\u10ec\0\u1125\0\u115e"+ + "\0\u1197\0\u11d0\0\u1209\0\u1242\0\u127b\0\u12b4\0\u12ed\0\u1326"+ + "\0\u135f\0\u1398\0\u13d1\0\u140a\0\u1443\0\u147c\0\u14b5\0\u14ee"+ + "\0\u1527\0\u1560\0\u1599\0\u15d2\0\u160b\0\u1644\0\u167d\0\u16b6"+ + "\0\u16ef\0\u1728\0\u1761\0\u179a\0\u17d3\0\u180c\0\u1845\0\u187e"+ + "\0\u18b7\0\u18f0\0\u1929\0\u1962\0\u199b\0\u19d4\0\u1a0d\0\u1a46"+ + "\0\u1a7f\0\u1ab8\0\u1af1\0\u1b2a\0\u1b63\0\u1b9c\0\u023a\0\u023a"+ + "\0\u1bd5\0\u1c0e\0\u1c47\0\u1c80\0\u1cb9\0\u1cf2\0\u0b5b\0\u1d2b"+ + "\0\u023a\0\u1d64\0\u1d9d\0\u1dd6\0\u1e0f\0\u1e48\0\u1e81\0\u1eba"+ + "\0\u1ef3\0\u1f2c\0\u1f65\0\u1f9e\0\u1fd7\0\u2010\0\u2049\0\u2082"+ + "\0\u20bb\0\u20f4\0\u212d\0\u018f\0\u2166\0\u219f\0\u21d8\0\u2211"+ + "\0\u224a\0\u2283\0\u22bc\0\u22f5\0\u232e\0\u2367\0\u23a0\0\u23d9"+ + "\0\u2412\0\u244b\0\u2484\0\u24bd\0\u24f6\0\u252f\0\u2568\0\u25a1"+ + "\0\u25da\0\u2613\0\u264c\0\u2685\0\u26be\0\u26f7\0\u2730\0\u2769"+ + "\0\u27a2\0\u27db\0\u2814\0\u284d\0\u2886\0\u28bf\0\u28f8\0\u2931"+ + "\0\u296a\0\u29a3\0\u29dc\0\u2a15\0\u2a4e\0\u2a87\0\u2ac0\0\u2af9"+ + "\0\u2b32\0\u2b6b\0\u2ba4\0\u2bdd\0\u2c16\0\u2c4f\0\u2c88\0\u2cc1"+ + "\0\u2cfa\0\u2d33\0\u2d6c\0\u2da5\0\u2dde\0\u2e17\0\u2e50\0\u2e89"+ + "\0\u2ec2\0\u2efb\0\u2f34\0\u2f6d\0\u2fa6\0\u2fdf\0\u3018\0\u3051"+ + "\0\u308a\0\u30c3\0\u30fc\0\u3135\0\u018f\0\u316e\0\u018f\0\u31a7"+ + "\0\u31e0\0\u3219\0\u3252\0\u328b\0\u32c4\0\u32fd\0\u3336\0\u336f"+ + "\0\u33a8\0\u33e1\0\u341a\0\u3453\0\u348c\0\u34c5\0\u34fe\0\u3537"+ + "\0\u3570\0\u35a9\0\u35e2\0\u361b\0\u3654\0\u368d\0\u36c6\0\u36ff"+ + "\0\u3738\0\u3771\0\u37aa\0\u37e3\0\u381c\0\u3855\0\u388e\0\u38c7"+ + "\0\u3900\0\u3939\0\u3972\0\u39ab\0\u39e4\0\u3a1d\0\u3a56\0\u3a8f"+ + "\0\u3ac8\0\u3b01\0\u3b3a\0\u3b73\0\u3bac\0\u3be5\0\u3c1e\0\u3c57"+ + "\0\u3c90\0\u3cc9\0\u3d02\0\u3d3b\0\u3d74\0\u3dad\0\u3de6\0\u3e1f"+ + "\0\u3e58\0\u3e91\0\u3eca\0\u3f03\0\u3f3c\0\u3f75\0\u3fae\0\u3fe7"+ + "\0\u4020\0\u4059\0\u4092\0\u40cb\0\u4104\0\u413d\0\u4176\0\u41af"+ + "\0\u41e8\0\u4221\0\u425a\0\u4293\0\u42cc\0\u4305\0\u433e\0\u4377"+ + "\0\u43b0\0\u43e9\0\u4422\0\u445b\0\u4494\0\u44cd\0\u4506\0\u453f"+ + "\0\u4578\0\u45b1\0\u45ea\0\u4623\0\u465c\0\u4695\0\u46ce\0\u4707"+ + "\0\u4740\0\u4779\0\u47b2\0\u47eb\0\u4824\0\u485d\0\u4896\0\u48cf"+ + "\0\u4908\0\u4941\0\u497a\0\u49b3\0\u49ec\0\u4a25\0\u4a5e\0\u4a97"+ + "\0\u4ad0\0\u4b09\0\u3eca\0\u4b42\0\u4b7b\0\u4bb4\0\u4bed\0\u4c26"+ + "\0\u4c5f\0\u4c98\0\u4cd1\0\u4d0a\0\u4092\0\u4d43\0\u413d\0\u4d7c"+ + "\0\u4db5\0\u4dee\0\u4e27\0\u4e60\0\u4e99\0\u4ed2\0\u4f0b\0\u1fd7"+ + "\0\u4f44\0\u4f7d\0\u4fb6\0\u4fef\0\u5028\0\u5061\0\u509a\0\u50d3"+ + "\0\u510c\0\u5145\0\u517e\0\u51b7\0\u51f0\0\u5229\0\u5262\0\u529b"+ + "\0\u52d4\0\u530d\0\u5346\0\u537f\0\u53b8\0\u53f1\0\u542a\0\u5463"+ + "\0\u549c\0\u54d5\0\u550e\0\u5547\0\u5580\0\u55b9\0\u55f2\0\u562b"+ + "\0\u5664\0\u569d\0\u56d6\0\u570f\0\u5748\0\u5781\0\u57ba\0\u57f3"+ + "\0\u582c\0\u5865\0\u589e\0\u58d7\0\u5910\0\u5949\0\u5982\0\u59bb"+ + "\0\u59f4\0\u5a2d\0\u5a66\0\u5a9f\0\u5ad8"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[437]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\7\2\10\1\11\1\12\1\10\1\11\1\13\1\14"+ + "\1\10\1\15\1\16\1\17\1\20\1\13\1\21\1\22"+ + "\1\23\1\24\4\10\1\22\1\25\1\26\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\35\1\23\1\13\1\36"+ + "\3\22\1\10\1\37\1\40\1\41\1\10\1\42\1\43"+ + "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\4\10"+ + "\12\53\1\54\3\53\1\55\16\53\1\56\11\53\1\57"+ + "\2\53\1\60\16\53\12\61\1\62\5\61\1\63\14\61"+ + "\1\56\11\61\1\57\2\61\1\60\16\61\12\64\1\65"+ + "\3\64\1\66\52\64\12\67\1\70\5\67\1\71\50\67"+ + "\12\72\1\73\22\72\1\74\11\72\1\75\2\72\1\76"+ + "\16\72\7\7\1\0\2\7\11\0\4\7\2\0\10\7"+ + "\2\0\1\7\3\0\23\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\22\10"+ + "\3\77\2\11\1\77\1\11\1\0\2\77\11\0\1\77"+ + "\1\100\1\101\1\102\1\0\1\103\3\77\1\102\1\101"+ + "\1\77\1\100\1\77\2\0\1\77\3\0\13\77\1\101"+ + "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0"+ + "\1\106\1\100\1\101\1\102\1\0\1\103\3\77\1\102"+ + "\1\101\1\77\1\100\1\77\2\0\1\77\3\0\13\77"+ + "\1\101\1\77\1\106\4\77\71\0\3\7\2\14\1\7"+ + "\1\14\1\0\2\7\11\0\4\7\2\0\10\7\2\0"+ + "\1\7\3\0\22\7\13\0\1\16\55\0\14\17\1\107"+ + "\54\17\11\0\1\110\77\0\1\111\72\0\1\112\51\0"+ + "\2\103\1\0\1\103\62\0\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\113\6\10\2\0"+ + "\1\7\3\0\1\114\3\10\1\115\5\10\1\116\7\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\117\1\10\1\120\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\7\10\1\121\2\0\1\7\3\0\10\10\1\122"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\123\1\10\2\0\1\7\3\0\10\10"+ + "\1\124\4\10\1\125\4\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\2\10\1\126\2\10\1\127"+ + "\2\10\2\0\1\7\3\0\2\10\1\130\7\10\1\131"+ + "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\116\1\132\1\133\4\10\1\134\2\0\1\7"+ + "\3\0\6\10\1\135\13\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\5\10\1\136\2\10\2\0"+ + "\1\7\3\0\2\10\1\137\7\10\1\140\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\141"+ + "\2\10\1\142\1\10\1\143\2\10\2\0\1\7\3\0"+ + "\1\144\1\10\1\145\2\10\1\146\14\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\147"+ + "\1\150\2\10\1\151\1\152\1\10\2\0\1\7\3\0"+ + "\12\10\1\153\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\4\10\1\116\2\10\1\116\2\0"+ + "\1\7\3\0\5\10\1\154\2\10\1\155\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\156\6\10\2\0\1\7\3\0\1\157\1\10\1\160"+ + "\7\10\1\161\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\162\4\10\2\0\1\7"+ + "\3\0\12\10\1\124\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\163\4\10\2\0"+ + "\1\7\3\0\4\10\1\164\5\10\1\165\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\166\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\167"+ + "\1\10\1\170\2\10\2\0\1\7\3\0\2\10\1\171"+ + "\7\10\1\172\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\2\10\1\173\2\10\1\174\1\175"+ + "\1\10\2\0\1\7\3\0\1\176\11\10\1\177\1\200"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\116\1\201\1\10\1\116\3\10\2\0"+ + "\1\7\3\0\6\10\1\202\1\10\1\116\3\10\1\203"+ + "\5\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\204\4\10\2\0\1\7\3\0\2\10"+ + "\1\205\1\10\1\206\5\10\1\207\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\210"+ + "\2\10\2\0\1\7\3\0\2\10\1\211\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\212\7\10\12\53\1\0"+ + "\3\53\1\0\16\53\1\0\11\53\1\0\2\53\1\0"+ + "\16\53\31\0\1\213\17\0\1\214\50\0\1\215\111\0"+ + "\1\216\16\0\12\61\1\0\5\61\1\0\14\61\1\0"+ + "\11\61\1\0\2\61\1\0\16\61\21\0\1\217\47\0"+ + "\12\64\1\0\3\64\1\0\52\64\12\67\1\0\5\67"+ + "\1\0\50\67\21\0\1\220\47\0\12\72\1\0\22\72"+ + "\1\0\11\72\1\0\2\72\1\0\16\72\31\0\1\221"+ + "\17\0\1\222\50\0\1\223\111\0\1\224\16\0\7\77"+ + "\1\0\2\77\11\0\4\77\2\0\10\77\2\0\1\77"+ + "\3\0\25\77\2\225\1\77\1\225\1\0\2\77\11\0"+ + "\4\77\1\226\1\0\10\77\2\0\1\77\3\0\25\77"+ + "\2\103\1\77\1\103\1\0\2\77\11\0\2\77\1\101"+ + "\1\102\2\0\3\77\1\102\1\101\3\77\2\0\1\77"+ + "\3\0\13\77\1\101\11\77\2\104\1\77\1\104\1\0"+ + "\2\77\11\0\2\77\1\101\1\102\1\0\1\103\3\77"+ + "\1\102\1\101\3\77\2\0\1\77\3\0\13\77\1\101"+ + "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0"+ + "\1\77\1\227\1\101\1\102\1\0\1\103\3\77\1\102"+ + "\1\101\1\77\1\227\1\77\2\0\1\77\3\0\13\77"+ + "\1\101\11\77\4\230\1\0\2\77\11\0\2\77\2\230"+ + "\2\0\3\77\3\230\2\77\2\0\1\77\3\0\6\77"+ + "\1\230\2\77\1\230\1\77\1\230\6\77\11\0\1\231"+ + "\57\0\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\2\10\1\232\5\10\2\0\1\7\3\0\4\10"+ + "\1\116\15\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\233\1\10\1\234\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\1\10"+ + "\1\235\20\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\236\1\10\1\237\2\0\1\7"+ + "\3\0\1\10\1\240\1\241\4\10\1\242\1\10\1\243"+ + "\7\10\1\244\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\123"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\245\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\246\6\10\1\247\2\0\1\7\3\0\2\10\1\201"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\7\10\1\235\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\13\10\1\116\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\250\7\10"+ + "\2\0\1\7\3\0\1\10\1\251\7\10\1\252\10\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\253\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\254\4\10\1\255\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\235\1\10\2\0\1\7\3\0\10\10\1\256"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\257\6\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\10\1\260\6\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\261"+ + "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\7\10\1\262\2\0"+ + "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\7\10\1\263\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10"+ + "\1\264\13\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\265"+ + "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\10\10\1\266\1\267"+ + "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\270\3\10\1\271\2\10\2\0\1\7"+ + "\3\0\12\10\1\272\1\273\6\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\116\4\10\1\274"+ + "\1\275\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\4\10\1\276"+ + "\3\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\10\1\116\4\10"+ + "\1\116\1\10\2\0\1\7\3\0\12\10\1\277\7\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\300\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\301\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\2\10\1\302\7\10\1\303\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\6\10\1\304\13\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\7\10\1\305"+ + "\2\0\1\7\3\0\11\10\1\306\10\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\307"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\310\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\1\10\1\311\20\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\312\5\10\1\313\1\10\2\0"+ + "\1\7\3\0\1\314\1\10\1\315\10\10\1\316\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\317\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\320\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\321\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\322\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\7\10\1\323\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\7\10\1\324\12\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\325\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\12\10\1\326\7\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\327\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\330\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\5\10\1\331"+ + "\14\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\254\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\116\7\10\2\0\1\7\3\0\13\10\1\332\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\10\1\333\6\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\334\5\10\1\235\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\335\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\336"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\5\10\1\337\2\10\1\340\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\341"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\116\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\17\10"+ + "\1\342\2\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\3\10\1\343\4\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\4\10\1\344\2\10\1\345\2\0\1\7\3\0"+ + "\1\10\1\346\20\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\7\10\1\347\2\0\1\7\3\0"+ + "\14\10\1\116\5\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\10\10"+ + "\1\350\11\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\2\10\1\351\5\10\2\0\1\7\3\0"+ + "\3\10\1\352\16\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\353\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\354\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\116\6\10\2\0\1\7\3\0\22\10"+ + "\50\0\1\355\57\0\1\356\62\0\1\357\111\0\1\360"+ + "\66\0\1\361\57\0\1\362\62\0\1\363\111\0\1\364"+ + "\16\0\3\77\2\225\1\77\1\225\1\0\2\77\11\0"+ + "\2\77\1\101\1\77\2\0\4\77\1\101\3\77\2\0"+ + "\1\77\3\0\13\77\1\101\6\77\3\0\2\225\1\0"+ + "\1\225\62\0\3\77\4\230\1\0\2\77\11\0\1\77"+ + "\1\227\2\230\2\0\3\77\3\230\1\227\1\77\2\0"+ + "\1\77\3\0\6\77\1\230\2\77\1\230\1\77\1\230"+ + "\6\77\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\365\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\366\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\116\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\116"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\6\10\1\367\1\10"+ + "\2\0\1\7\3\0\13\10\1\370\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\2\10\1\371\7\10\1\372\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ + "\1\373\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\10\10\1\374\11\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\375\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\12\10\1\376\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\2\10\1\377\5\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\7\10\1\116\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\u0100\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\u0101\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0102"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\12\10\1\u0103\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u0104\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\u0105\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\7\10\1\232\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\u0106\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\3\10\1\u0107\16\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0108"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\12\10\1\u0109\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u010a\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u010b\7\10\2\0\1\7\3\0"+ + "\12\10\1\u010c\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u0100\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u010d\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\7\10\1\u010e\12\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\171\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u010f\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0110\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u0111\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\u0112\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\6\10\1\u0113\1\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\4\10\1\254\3\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\273\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\u0114\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\7\10\1\u0115\12\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\6\10\1\u0116\1\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\14\10\1\u0117\5\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u0118\7\10\2\0\1\7\3\0"+ + "\1\10\1\u0119\5\10\1\u011a\1\10\1\u011b\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ + "\1\u011c\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\11\10\1\267\10\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\20\10\1\u011d\1\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\u011e\7\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\u011f"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\u0120\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\u0121\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u0122\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0123"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\u0124\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u0125\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u0126\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\235\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\1\116\21\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\13\10\1\u0127\6\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\7\10\1\u0128\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\234"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\u0127\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\u0129\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\116\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\254"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u012a\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u012b\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\u012c\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\u012d"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\7\10\1\245\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\367\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\1\10\1\367\20\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\u012e\6\10\1\u012f"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\11\10\1\171\10\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u0130\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u0131\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0132\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\u0133\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0134"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\1\10\1\u0135\20\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\5\10\1\u0136\2\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10"+ + "\1\u0115\13\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\166"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0137\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\u0138\7\10\2\0\1\7\3\0\22\10\45\0\1\u0139"+ + "\57\0\1\355\104\0\1\u013a\50\0\1\u013b\105\0\1\u013c"+ + "\57\0\1\361\104\0\1\u013d\50\0\1\u013e\40\0\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\u013f\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\12\10\1\u0140\7\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\13\10\1\u0141\6\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\2\10\1\u0142\5\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\201\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u0143\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\7\10\1\u0144\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\124"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\u0145\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\6\10\1\116\1\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\4\10\1\235\3\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u0146\6\10\2\0\1\7\3\0"+ + "\10\10\1\u0147\11\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\u0148\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\1\10\1\201"+ + "\20\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u0149\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ + "\1\u014a\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u014b"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\4\10\1\116\15\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\5\10\1\u014c\14\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10"+ + "\1\u014d\14\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u014e\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\u014f\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\u0150\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u0151\3\10\1\u0152\13\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\u0153\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u0154\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0155"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\5\10\1\u0156\2\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\124\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u0157\7\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\u0158\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\u0157\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\u0159\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u015a"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u015b\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u015c\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u015d\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\u015e"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\124\1\10\1\u015f\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\4\10\1\u0160\3\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u0161\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ + "\1\u0162\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0163"+ + "\6\10\2\0\1\7\3\0\7\10\1\u0161\12\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\235\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0164"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\u0165\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\15\10\1\254\4\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\370\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0152"+ + "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u015f\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\u0166\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10"+ + "\1\u0167\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\4\10\1\344\3\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u0168\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ + "\1\u0169\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\u016a\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u016b\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\11\10\1\201\10\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016c"+ + "\4\10\1\u016d\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\2\10"+ + "\1\u016e\5\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016f"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u0170\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\2\10\1\u0171\17\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10"+ + "\1\u0172\14\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u0173\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\2\10\1\267\5\10\2\0\1\7\3\0\22\10"+ + "\22\0\1\u0174\106\0\1\355\4\0\1\u0139\24\0\1\u013b"+ + "\1\u0175\4\u013b\1\0\1\u0175\1\u013b\2\0\1\u0175\2\0"+ + "\3\u0175\5\u013b\2\u0175\10\u013b\3\u0175\1\0\2\u0175\22\u013b"+ + "\22\0\1\u0176\106\0\1\361\4\0\1\u013c\24\0\1\u013e"+ + "\1\u0177\4\u013e\1\0\1\u0177\1\u013e\2\0\1\u0177\2\0"+ + "\3\u0177\5\u013e\2\u0177\10\u013e\3\u0177\1\0\2\u0177\22\u013e"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\13\10\1\u0178\6\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\u0179\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u017a"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\10\1\u017b\6\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u017c\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u017d\7\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\u017e\6\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\267\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\13\10\1\u017f\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0180\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\2\10\1\u0181\17\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\6\10\1\u0108\1\10\2\0\1\7"+ + "\3\0\2\10\1\u0182\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u0155\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\u0183\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0184"+ + "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0185\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\2\10\1\u0159\5\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\u0186\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\10\10\1\u0187\11\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\12\10\1\u0188\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\7\10\1\116\12\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\116\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\254"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\171\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\u0151\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ + "\1\367\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0189\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\11\10\1\u0183\10\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\u018a\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\u018b\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\13\10\1\u018c\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\7\10\1\u018d\2\0\1\7\3\0\11\10\1\254\10\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\7\10\1\u0189\12\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\u018e\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\336"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\5\10\1\u018f\14\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\4\10\1\u0190\3\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ + "\1\u0191\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\u0192\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0193\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\1\10\1\u0194\20\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\u0195\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\10\10\1\u0196\11\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\u0197\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\2\10\1\u0198\17\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10"+ + "\1\u0199\7\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\6\10\1\u019a\1\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\2\10\1\u019b\5\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\11\10\1\u014c\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\u019c\2\10\1\254\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\u019d\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\7\10\1\u019e\12\10\22\0\1\u013b"+ + "\70\0\1\u013e\46\0\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\14\10"+ + "\1\u019f\5\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\6\10\1\u0186\1\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\10\10\1\u019a\11\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\11\10\1\u01a0\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\u01a1\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\330"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u019e\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u01a2\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10"+ + "\1\234\7\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\16\10\1\u01a3"+ + "\3\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u0111\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ + "\1\u017d\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\11\10\1\u019a\10\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\4\10\1\254\15\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\367\7\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\12\10\1\u01a4"+ + "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\254\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\u0108\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\2\10\1\u01a5\5\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\1\u0111\21\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u01a6\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\u01a7\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\u01a8\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u0113"+ + "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\6\10\1\u01a9\1\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\10\10\1\367\11\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\u01aa\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u01ab"+ + "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u01a4\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\u019e\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\13\10\1\u0189\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0155"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\254\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\u01ac\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u01ad\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\11\10\1\254\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10"+ + "\1\254\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\5\10\1\212\2\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u01ae\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\13\10"+ + "\1\u01af\6\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\367"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0105\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\367\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\235\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\5\10\1\254\14\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\10\10\1\u01b0\11\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\11\10\1\235\10\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ + "\1\u0182\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u017e"+ + "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\4\10\1\367\15\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\52\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u01b1"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\7\10\1\u01b2\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\2\10\1\u01b3\5\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u01b4\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\10\1\u0163\6\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u01b5"+ + "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\11\10\1\u0189\10\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\5\10\1\u0105\1\10\1\254"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\270\6\10\2\0"+ + "\1\7\3\0\22\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[23313]; + 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; + } + + + /* 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; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\4\1\1\11\1\1\1\11\4\1\2\11\30\1"+ + "\2\11\4\1\1\11\2\1\2\11\1\1\1\11\2\1"+ + "\1\11\13\1\2\11\1\1\1\11\100\1\4\0\2\11"+ + "\4\0\1\1\1\0\2\1\1\11\123\1\10\0\104\1"+ + "\2\0\1\1\2\0\66\1\4\0\76\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[437]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "(*" comment. + */ + public static final int INTERNAL_MLC2 = -1; + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "{$" compiler directive. + */ + public static final int INTERNAL_COMPILER_DIRECTIVE = -2; + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "(*$" compiler directive. + */ + public static final int INTERNAL_COMPILER_DIRECTIVE2 = -3; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DelphiTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case INTERNAL_MLC2: + state = MLC2; + start = text.offset; + break; + case INTERNAL_COMPILER_DIRECTIVE: + state = COMPILER_DIRECTIVE; + start = text.offset; + break; + case INTERNAL_COMPILER_DIRECTIVE2: + state = COMPILER_DIRECTIVE2; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DelphiTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DelphiTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 158) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 15: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; + } + case 35: break; + case 4: + { addToken(Token.PREPROCESSOR); + } + case 36: break; + case 5: + { addNullToken(); return firstToken; + } + case 37: break; + case 27: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 38: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 39: break; + case 21: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 40: break; + case 20: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 41: break; + case 26: + { addToken(Token.RESERVED_WORD); + } + case 42: break; + case 16: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.PREPROCESSOR); + } + case 43: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 44: break; + case 17: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; + } + case 45: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 46: break; + case 18: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 47: break; + case 25: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 48: break; + case 30: + { addToken(Token.FUNCTION); + } + case 49: break; + case 7: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 50: break; + case 14: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; + } + case 51: break; + case 32: + { addToken(Token.DATA_TYPE); + } + case 52: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 53: break; + case 31: + { addToken(Token.LITERAL_BOOLEAN); + } + case 54: break; + case 22: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 55: break; + case 34: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 56: break; + case 29: + { start = zzMarkedPos-3; yybegin(COMPILER_DIRECTIVE2); + } + case 57: break; + case 24: + { start = zzMarkedPos-2; yybegin(MLC2); + } + case 58: break; + case 33: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 59: break; + case 19: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 60: break; + case 28: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); + } + case 61: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.COMMENT_MULTILINE); + } + case 62: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 63: break; + case 10: + { addToken(Token.OPERATOR); + } + case 64: break; + case 8: + { start = zzMarkedPos-1; yybegin(MLC); + } + case 65: break; + case 23: + { start = zzMarkedPos-2; yybegin(COMPILER_DIRECTIVE); + } + case 66: break; + case 11: + { + } + case 67: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 68: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case COMPILER_DIRECTIVE: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; + } + case 438: break; + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 439: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 440: break; + case COMPILER_DIRECTIVE2: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; + } + case 441: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 442: break; + case MLC2: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; + } + case 443: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex new file mode 100644 index 0000000..042efde --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex @@ -0,0 +1,282 @@ +/* + * 11/24/2015 + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dockerfiles.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DockerTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class DockerTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DockerTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.RESERVED_WORD; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = TokenTypes.NULL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +Digit = [0-9] +IdentifierPart = ({Letter}|{Digit}|[_\-\.]) +Identifier = ({IdentifierPart}|{IdentifierPart}*) +WhiteSpace = ([ \t\f]) + +%state STRING +%state CHAR_LITERAL + +%% + + { + + /* Keywords */ + "maintainer" | + "from" | + "onbuild" | + "run" | + "expose" | + "env" | + "add" | + "copy" | + "volume" | + "user" | + "workdir" | + "cmd" | + "entrypoint" | + "label" | + "arg" | + "stopsignal" { addToken(Token.RESERVED_WORD); } + + {Identifier} { addToken(Token.IDENTIFIER); } + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + "[" | + "]" { addToken(Token.SEPARATOR); } + + "|" | + ">" | + ">>" { addToken(Token.OPERATOR); } + + /* String/Character literals. */ + \" { start = zzMarkedPos-1; yybegin(STRING); } + \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } + + /* Comment literals. */ + "#".* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Ended with a line not in a string or comment. */ + "\n" | + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + . { addToken(Token.IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped single quotes only, but this should still work. */ } + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java new file mode 100644 index 0000000..ce7565c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java @@ -0,0 +1,764 @@ +/* The following code was generated by JFlex 1.4.1 on 11/25/15 12:02 AM */ + +/* + * 11/24/2015 + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dockerfiles.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated DockerTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class DockerTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int CHAR_LITERAL = 2; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\37\1\0\1\2\23\0\1\2\1\0\1\34\1\36"+ + "\3\0\1\35\5\0\2\1\1\0\12\1\4\0\1\33\2\0\1\4"+ + "\1\14\1\24\1\17\1\10\1\12\1\30\1\1\1\5\1\1\1\27"+ + "\1\16\1\3\1\6\1\13\1\21\1\1\1\11\1\22\1\7\1\15"+ + "\1\23\1\26\1\20\1\25\1\1\1\31\1\40\1\31\1\0\1\1"+ + "\1\0\1\4\1\14\1\24\1\17\1\10\1\12\1\30\1\1\1\5"+ + "\1\1\1\27\1\16\1\3\1\6\1\13\1\21\1\1\1\11\1\22"+ + "\1\7\1\15\1\23\1\26\1\20\1\25\1\1\1\0\1\32\uff83\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 = + "\1\1\2\0\2\1\1\2\14\1\1\3\2\4\1\5"+ + "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\11"+ + "\1\15\1\16\1\17\16\1\1\14\1\17\1\1\1\20"+ + "\41\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[84]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\41\0\102\0\143\0\204\0\245\0\306\0\347"+ + "\0\u0108\0\u0129\0\u014a\0\u016b\0\u018c\0\u01ad\0\u01ce\0\u01ef"+ + "\0\u0210\0\u0231\0\143\0\143\0\u0252\0\143\0\143\0\u0273"+ + "\0\143\0\u0294\0\143\0\143\0\u02b5\0\u02d6\0\143\0\143"+ + "\0\u02f7\0\u0318\0\u0339\0\u035a\0\u037b\0\u039c\0\u03bd\0\u03de"+ + "\0\u03ff\0\u0420\0\u0441\0\u0462\0\u0483\0\u04a4\0\u04c5\0\143"+ + "\0\143\0\u04e6\0\204\0\u0507\0\u0528\0\u0549\0\u056a\0\u058b"+ + "\0\u05ac\0\u05cd\0\u05ee\0\u060f\0\u0630\0\u0651\0\u0672\0\u0693"+ + "\0\u06b4\0\u06d5\0\u06f6\0\u0717\0\u0738\0\u0759\0\u077a\0\u079b"+ + "\0\u07bc\0\u07dd\0\u07fe\0\u081f\0\u0840\0\u0861\0\u0882\0\u08a3"+ + "\0\u08c4\0\u08e5\0\u0906\0\u0927"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[84]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\10\3\5\1\11\1\12"+ + "\1\13\1\14\1\5\1\15\1\16\3\5\1\17\1\20"+ + "\1\21\1\5\1\22\2\5\1\23\1\24\1\25\1\26"+ + "\1\27\1\30\1\31\1\4\34\32\1\33\2\32\1\34"+ + "\1\35\35\36\1\37\1\36\1\40\1\41\42\0\1\5"+ + "\1\0\26\5\12\0\1\6\37\0\1\5\1\0\1\5"+ + "\1\42\24\5\11\0\1\5\1\0\6\5\1\43\5\5"+ + "\1\44\11\5\11\0\1\5\1\0\3\5\1\45\11\5"+ + "\1\46\10\5\11\0\1\5\1\0\12\5\1\47\13\5"+ + "\11\0\1\5\1\0\6\5\1\50\17\5\11\0\1\5"+ + "\1\0\3\5\1\51\22\5\11\0\1\5\1\0\17\5"+ + "\1\52\6\5\11\0\1\5\1\0\1\5\1\53\24\5"+ + "\11\0\1\5\1\0\4\5\1\54\21\5\11\0\1\5"+ + "\1\0\10\5\1\55\15\5\11\0\1\5\1\0\1\44"+ + "\7\5\1\56\15\5\11\0\1\5\1\0\10\5\1\57"+ + "\15\5\43\0\1\24\5\0\37\30\1\0\1\30\34\32"+ + "\1\0\2\32\2\0\37\60\1\0\1\60\35\36\1\0"+ + "\1\36\2\0\37\61\1\0\1\61\1\0\1\5\1\0"+ + "\2\5\1\62\23\5\11\0\1\5\1\0\25\5\1\63"+ + "\11\0\1\5\1\0\14\5\1\63\11\5\11\0\1\5"+ + "\1\0\4\5\1\64\13\5\1\63\5\5\11\0\1\5"+ + "\1\0\16\5\1\65\7\5\11\0\1\5\1\0\3\5"+ + "\1\63\22\5\11\0\1\5\1\0\10\5\1\66\15\5"+ + "\11\0\1\5\1\0\11\5\1\67\14\5\11\0\1\5"+ + "\1\0\5\5\1\70\20\5\11\0\1\5\1\0\11\5"+ + "\1\71\14\5\11\0\1\5\1\0\10\5\1\72\15\5"+ + "\11\0\1\5\1\0\13\5\1\73\12\5\11\0\1\5"+ + "\1\0\16\5\1\74\7\5\11\0\1\5\1\0\6\5"+ + "\1\75\17\5\11\0\1\5\1\0\3\5\1\76\22\5"+ + "\11\0\1\5\1\0\6\5\1\77\17\5\11\0\1\5"+ + "\1\0\10\5\1\100\15\5\11\0\1\5\1\0\1\63"+ + "\25\5\11\0\1\5\1\0\12\5\1\101\13\5\11\0"+ + "\1\5\1\0\6\5\1\63\17\5\11\0\1\5\1\0"+ + "\5\5\1\102\20\5\11\0\1\5\1\0\16\5\1\103"+ + "\7\5\11\0\1\5\1\0\12\5\1\104\13\5\11\0"+ + "\1\5\1\0\22\5\1\63\3\5\11\0\1\5\1\0"+ + "\24\5\1\105\1\5\11\0\1\5\1\0\4\5\1\106"+ + "\21\5\11\0\1\5\1\0\22\5\1\107\3\5\11\0"+ + "\1\5\1\0\17\5\1\110\6\5\11\0\1\5\1\0"+ + "\2\5\1\111\23\5\11\0\1\5\1\0\13\5\1\63"+ + "\12\5\11\0\1\5\1\0\17\5\1\112\6\5\11\0"+ + "\1\5\1\0\1\110\25\5\11\0\1\5\1\0\14\5"+ + "\1\113\11\5\11\0\1\5\1\0\1\5\1\114\24\5"+ + "\11\0\1\5\1\0\16\5\1\115\7\5\11\0\1\5"+ + "\1\0\5\5\1\63\20\5\11\0\1\5\1\0\13\5"+ + "\1\44\12\5\11\0\1\5\1\0\2\5\1\116\23\5"+ + "\11\0\1\5\1\0\2\5\1\70\23\5\11\0\1\5"+ + "\1\0\2\5\1\117\23\5\11\0\1\5\1\0\10\5"+ + "\1\120\15\5\11\0\1\5\1\0\25\5\1\121\11\0"+ + "\1\5\1\0\3\5\1\52\22\5\11\0\1\5\1\0"+ + "\2\5\1\122\23\5\11\0\1\5\1\0\3\5\1\123"+ + "\22\5\11\0\1\5\1\0\3\5\1\124\22\5\11\0"+ + "\1\5\1\0\1\5\1\102\24\5\11\0\1\5\1\0"+ + "\4\5\1\63\21\5\10\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[2376]; + 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; + } + + + /* 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; + + /* 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 = + "\1\1\2\0\1\11\16\1\2\11\1\1\2\11\1\1"+ + "\1\11\1\1\2\11\2\1\2\11\17\1\2\11\43\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[84]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DockerTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.RESERVED_WORD; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = TokenTypes.NULL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DockerTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DockerTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 160) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 16: + { addToken(Token.RESERVED_WORD); + } + case 17: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 18: break; + case 7: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 19: break; + case 2: + { addToken(Token.WHITESPACE); + } + case 20: break; + case 11: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 21: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 22: break; + case 12: + { /* Skip escaped chars. */ + } + case 23: break; + case 4: + { addToken(Token.OPERATOR); + } + case 24: break; + case 15: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 25: break; + case 5: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 26: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 27: break; + case 10: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 28: break; + case 8: + { addNullToken(); return firstToken; + } + case 29: break; + case 9: + { + } + case 30: break; + case 3: + { addToken(Token.SEPARATOR); + } + case 31: break; + case 6: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 32: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 85: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 86: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 87: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex new file mode 100644 index 0000000..8a2f8f3 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex @@ -0,0 +1,347 @@ +/* + * 04/12/2012 + * + * DtdTokenMaker.java - Generates tokens for DTD syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for DTD files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated XMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + */ +%% + +%public +%class DtdTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG_START = -1; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ELEMENT = -2; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed, locally-defined DTD in a DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ATTLIST = -3; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed comment. The state to return to when this comment ends is + * embedded in the token type as well. + */ + public static final int INTERNAL_IN_COMMENT = -(1<<11); + + /** + * The state we were in prior to the current one. This is used to know + * what state to resume after an MLC ends. + */ + private int prevState; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DtdTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in XML files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + prevState = YYINITIAL; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_INTAG_START: + state = INTAG_START; + break; + case INTERNAL_INTAG_ELEMENT: + state = INTAG_ELEMENT; + break; + case INTERNAL_INTAG_ATTLIST: + state = INTAG_ATTLIST; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_COMMENT: + state = COMMENT; + break; + } + prevState = -initialTokenType&0xff; + } + else { // Shouldn't happen + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]) +LineTerminator = ([\n]) +UnclosedString = ([\"][^\"]*) +UnclosedChar = ([\'][^\']*) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z_0-9\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state COMMENT +%state INTAG_START +%state INTAG_ELEMENT +%state INTAG_ATTLIST + +%% + + { + ([^ \t\f<]+) { /* Not really valid */ addToken(Token.IDENTIFIER); } + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; } +} + + { + ("ELEMENT") { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ELEMENT); } + ("ATTLIST") { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ATTLIST); } + ([^ \t\f>]+) { addToken(Token.IDENTIFIER); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + <> { addEndToken(INTERNAL_INTAG_START); return firstToken; } +} + + { + ([^ \t\f>]+) { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + <> { addEndToken(INTERNAL_INTAG_ELEMENT); return firstToken; } +} + + { + ("CDATA"|"#IMPLIED"|"#REQUIRED") { addToken(Token.MARKUP_PROCESSING_INSTRUCTION); } + ([^ \t\f>\"\']+) { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + ({UnclosedString}[\"]?) { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + ({UnclosedChar}[\']?) { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + <> { addEndToken(INTERNAL_INTAG_ATTLIST); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java new file mode 100644 index 0000000..539cef6 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java @@ -0,0 +1,835 @@ +/* The following code was generated by JFlex 1.4.1 on 7/9/16 6:48 PM */ + +/* + * 04/12/2012 + * + * DtdTokenMaker.java - Generates tokens for DTD syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for DTD files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated XMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + */ + +public class DtdTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INTAG_START = 2; + public static final int INTAG_ELEMENT = 3; + public static final int YYINITIAL = 0; + public static final int INTAG_ATTLIST = 4; + public static final int COMMENT = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\1\24\1\3\1\41"+ + "\1\7\1\5\1\5\1\4\5\5\1\25\1\22\1\6\12\7\1\20"+ + "\1\5\1\23\1\5\1\26\2\5\1\34\1\7\1\37\1\40\1\27"+ + "\3\7\1\35\2\7\1\30\1\31\1\32\1\7\1\42\1\44\1\43"+ + "\1\36\1\33\1\45\5\7\1\5\1\0\1\5\1\0\1\5\1\0"+ + "\4\7\1\17\1\14\1\7\1\10\1\15\2\7\1\16\3\7\1\12"+ + "\2\7\1\13\1\11\2\7\1\21\3\7\3\0\1\5\uff81\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 = + "\5\0\1\1\1\2\1\3\1\4\1\5\4\4\1\3"+ + "\1\6\2\3\2\7\2\10\2\7\1\11\5\0\2\3"+ + "\1\10\3\7\5\0\1\12\2\3\3\7\1\13\2\0"+ + "\1\14\2\3\3\7\2\0\2\3\1\15\2\7\2\3"+ + "\2\7\1\16\1\17\1\7"; + + private static int [] zzUnpackAction() { + int [] result = new int[70]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\46\0\114\0\162\0\230\0\276\0\344\0\u010a"+ + "\0\u0130\0\u0156\0\u017c\0\u01a2\0\u01c8\0\u01ee\0\u0214\0\u0156"+ + "\0\u023a\0\u0260\0\u0286\0\u02ac\0\u02d2\0\u02f8\0\u031e\0\u0344"+ + "\0\u036a\0\u0390\0\u03b6\0\u03dc\0\u0402\0\u0428\0\u044e\0\u0474"+ + "\0\u0156\0\u049a\0\u04c0\0\u04e6\0\u050c\0\u0532\0\u0558\0\u057e"+ + "\0\u05a4\0\u0156\0\u05ca\0\u05f0\0\u0616\0\u063c\0\u0662\0\u0156"+ + "\0\u0688\0\u06ae\0\u06d4\0\u06fa\0\u0720\0\u0746\0\u076c\0\u0792"+ + "\0\u07b8\0\u06d4\0\u07de\0\u0804\0\u02ac\0\u082a\0\u0850\0\u0876"+ + "\0\u089c\0\u08c2\0\u08e8\0\u0214\0\u0214\0\u090e"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[70]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\21\6\1\10\22\6\2\11\1\12\5\11"+ + "\1\13\3\11\1\14\4\11\1\15\3\11\1\16\20\11"+ + "\1\17\1\7\24\17\1\20\1\21\4\17\1\22\11\17"+ + "\1\23\1\7\24\23\1\20\17\23\1\24\1\7\1\24"+ + "\1\25\1\26\21\24\1\20\10\24\1\27\1\24\1\30"+ + "\4\24\1\6\1\0\21\6\1\0\22\6\1\0\1\7"+ + "\70\0\1\31\21\0\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\4\11\1\0\3\11\1\0\20\11\57\0\1\32"+ + "\45\0\1\33\3\0\1\34\51\0\1\35\51\0\1\36"+ + "\20\0\1\17\1\0\24\17\1\0\20\17\1\0\24\17"+ + "\1\0\1\17\1\37\16\17\1\0\24\17\1\0\4\17"+ + "\1\40\12\17\1\23\1\0\24\23\1\0\17\23\1\24"+ + "\1\0\1\24\2\0\21\24\1\0\17\24\3\25\1\41"+ + "\42\25\4\26\1\41\41\26\1\24\1\0\1\24\2\0"+ + "\21\24\1\0\11\24\1\42\6\24\1\0\1\24\2\0"+ + "\21\24\1\0\6\24\1\43\5\24\1\44\2\24\25\0"+ + "\1\45\31\0\1\46\46\0\1\47\51\0\1\50\50\0"+ + "\1\51\52\0\1\52\17\0\1\17\1\0\24\17\1\0"+ + "\1\53\17\17\1\0\24\17\1\0\4\17\1\54\12\17"+ + "\1\24\1\0\1\24\2\0\21\24\1\0\5\24\1\55"+ + "\12\24\1\0\1\24\2\0\21\24\1\0\2\24\1\56"+ + "\15\24\1\0\1\24\2\0\21\24\1\0\1\57\16\24"+ + "\25\0\1\60\32\0\1\61\53\0\1\62\44\0\1\47"+ + "\50\0\1\63\23\0\1\17\1\0\24\17\1\0\2\17"+ + "\1\64\15\17\1\0\24\17\1\0\1\17\1\65\15\17"+ + "\1\24\1\0\1\24\2\0\21\24\1\0\4\24\1\66"+ + "\13\24\1\0\1\24\2\0\21\24\1\0\13\24\1\67"+ + "\4\24\1\0\1\24\2\0\21\24\1\0\15\24\1\70"+ + "\1\24\13\0\1\47\4\0\1\62\33\0\1\71\43\0"+ + "\2\72\12\63\1\72\1\63\1\72\1\0\2\72\1\0"+ + "\12\63\1\72\4\63\1\17\1\0\24\17\1\0\1\73"+ + "\17\17\1\0\24\17\1\0\6\17\1\74\10\17\1\24"+ + "\1\0\1\24\2\0\21\24\1\0\5\24\1\75\12\24"+ + "\1\0\1\24\2\0\21\24\1\0\1\24\1\76\16\24"+ + "\1\0\1\24\2\0\21\24\1\0\16\24\1\77\6\0"+ + "\1\63\37\0\1\17\1\0\24\17\1\0\3\17\1\100"+ + "\14\17\1\0\24\17\1\0\7\17\1\101\7\17\1\24"+ + "\1\0\1\24\2\0\21\24\1\0\6\24\1\102\11\24"+ + "\1\0\1\24\2\0\21\24\1\0\6\24\1\103\10\24"+ + "\1\17\1\0\24\17\1\0\4\17\1\104\13\17\1\0"+ + "\24\17\1\0\4\17\1\105\12\17\1\24\1\0\1\24"+ + "\2\0\21\24\1\0\1\106\17\24\1\0\1\24\2\0"+ + "\21\24\1\0\14\24\1\102\3\24\1\0\1\24\2\0"+ + "\21\24\1\0\11\24\1\75\5\24"; + + private static int [] zzUnpackTrans() { + int [] result = new int[2356]; + 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; + } + + + /* 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; + + /* 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 = + "\5\0\4\1\1\11\5\1\1\11\11\1\5\0\2\1"+ + "\1\11\3\1\5\0\1\11\5\1\1\11\2\0\6\1"+ + "\2\0\14\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[70]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG_START = -1; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ELEMENT = -2; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed, locally-defined DTD in a DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ATTLIST = -3; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed comment. The state to return to when this comment ends is + * embedded in the token type as well. + */ + public static final int INTERNAL_IN_COMMENT = -(1<<11); + + /** + * The state we were in prior to the current one. This is used to know + * what state to resume after an MLC ends. + */ + private int prevState; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DtdTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in XML files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + prevState = YYINITIAL; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_INTAG_START: + state = INTAG_START; + break; + case INTERNAL_INTAG_ELEMENT: + state = INTAG_ELEMENT; + break; + case INTERNAL_INTAG_ATTLIST: + state = INTAG_ATTLIST; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_COMMENT: + state = COMMENT; + break; + } + prevState = -initialTokenType&0xff; + } + else { // Shouldn't happen + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DtdTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DtdTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 138) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { addToken(Token.IDENTIFIER); + } + case 16: break; + case 2: + { addToken(Token.WHITESPACE); + } + case 17: break; + case 1: + { /* Not really valid */ addToken(Token.IDENTIFIER); + } + case 18: break; + case 12: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 19: break; + case 9: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG_START); + } + case 20: break; + case 6: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 21: break; + case 10: + { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); + } + case 22: break; + case 11: + { start = zzStartRead; prevState = zzLexicalState; yybegin(COMMENT); + } + case 23: break; + case 7: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 24: break; + case 15: + { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ATTLIST); + } + case 25: break; + case 14: + { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ELEMENT); + } + case 26: break; + case 13: + { addToken(Token.MARKUP_PROCESSING_INSTRUCTION); + } + case 27: break; + case 4: + { + } + case 28: break; + case 5: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; + } + case 29: break; + case 8: + { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 30: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INTAG_START: { + addEndToken(INTERNAL_INTAG_START); return firstToken; + } + case 71: break; + case INTAG_ELEMENT: { + addEndToken(INTERNAL_INTAG_ELEMENT); return firstToken; + } + case 72: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 73: break; + case INTAG_ATTLIST: { + addEndToken(INTERNAL_INTAG_ATTLIST); return firstToken; + } + case 74: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; + } + case 75: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex new file mode 100644 index 0000000..a119b88 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex @@ -0,0 +1,477 @@ +/* + * 03/23/2005 + * + * FortranTokenMaker.java - Scanner for the Fortran programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Fortran programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated FortranTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.4 + * + */ +%% + +%public +%class FortranTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. We must have this here as there is no default, + * no-parameter constructor generated by JFlex. + */ + public FortranTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "!", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +Column1CommentBegin = ([C\*]) +Column1Comment2Begin = (D) +AnywhereCommentBegin = (\!) + +Identifier = ([A-Za-z0-9_$]+) + +StringDelimiter = (\") +CharDelimiter = (\') + +Operators1 = ("<"|">"|"<="|">="|"&"|"/="|"==") +Operators2 = (\.(lt|gt|eq|ne|le|ge|and|or)\.) +Operator = ({Operators1}|{Operators2}) + +Boolean = (\.(true|false)\.) + +%state STRING +%state CHAR + +%% + +/* Keywords */ + "INCLUDE" { addToken(Token.RESERVED_WORD); } + "PROGRAM" { addToken(Token.RESERVED_WORD); } + "MODULE" { addToken(Token.RESERVED_WORD); } + "SUBROUTINE" { addToken(Token.RESERVED_WORD); } + "FUNCTION" { addToken(Token.RESERVED_WORD); } + "CONTAINS" { addToken(Token.RESERVED_WORD); } + "USE" { addToken(Token.RESERVED_WORD); } + "CALL" { addToken(Token.RESERVED_WORD); } + "RETURN" { addToken(Token.RESERVED_WORD); } + "IMPLICIT" { addToken(Token.RESERVED_WORD); } + "EXPLICIT" { addToken(Token.RESERVED_WORD); } + "NONE" { addToken(Token.RESERVED_WORD); } + "DATA" { addToken(Token.RESERVED_WORD); } + "PARAMETER" { addToken(Token.RESERVED_WORD); } + "ALLOCATE" { addToken(Token.RESERVED_WORD); } + "ALLOCATABLE" { addToken(Token.RESERVED_WORD); } + "ALLOCATED" { addToken(Token.RESERVED_WORD); } + "DEALLOCATE" { addToken(Token.RESERVED_WORD); } + "INTEGER" { addToken(Token.RESERVED_WORD); } + "REAL" { addToken(Token.RESERVED_WORD); } + "DOUBLE" { addToken(Token.RESERVED_WORD); } + "PRECISION" { addToken(Token.RESERVED_WORD); } + "COMPLEX" { addToken(Token.RESERVED_WORD); } + "LOGICAL" { addToken(Token.RESERVED_WORD); } + "CHARACTER" { addToken(Token.RESERVED_WORD); } + "DIMENSION" { addToken(Token.RESERVED_WORD); } + "KIND" { addToken(Token.RESERVED_WORD); } + "CASE" { addToken(Token.RESERVED_WORD); } + "SELECT" { addToken(Token.RESERVED_WORD); } + "DEFAULT" { addToken(Token.RESERVED_WORD); } + "CONTINUE" { addToken(Token.RESERVED_WORD); } + "CYCLE" { addToken(Token.RESERVED_WORD); } + "DO" { addToken(Token.RESERVED_WORD); } + "WHILE" { addToken(Token.RESERVED_WORD); } + "ELSE" { addToken(Token.RESERVED_WORD); } + "IF" { addToken(Token.RESERVED_WORD); } + "ELSEIF" { addToken(Token.RESERVED_WORD); } + "THEN" { addToken(Token.RESERVED_WORD); } + "ELSEWHERE" { addToken(Token.RESERVED_WORD); } + "END" { addToken(Token.RESERVED_WORD); } + "ENDIF" { addToken(Token.RESERVED_WORD); } + "ENDDO" { addToken(Token.RESERVED_WORD); } + "FORALL" { addToken(Token.RESERVED_WORD); } + "WHERE" { addToken(Token.RESERVED_WORD); } + "EXIT" { addToken(Token.RESERVED_WORD); } + "GOTO" { addToken(Token.RESERVED_WORD); } + "PAUSE" { addToken(Token.RESERVED_WORD); } + "STOP" { addToken(Token.RESERVED_WORD); } + "BACKSPACE" { addToken(Token.RESERVED_WORD); } + "CLOSE" { addToken(Token.RESERVED_WORD); } + "ENDFILE" { addToken(Token.RESERVED_WORD); } + "INQUIRE" { addToken(Token.RESERVED_WORD); } + "OPEN" { addToken(Token.RESERVED_WORD); } + "PRINT" { addToken(Token.RESERVED_WORD); } + "READ" { addToken(Token.RESERVED_WORD); } + "REWIND" { addToken(Token.RESERVED_WORD); } + "WRITE" { addToken(Token.RESERVED_WORD); } + "FORMAT" { addToken(Token.RESERVED_WORD); } + "AIMAG" { addToken(Token.RESERVED_WORD); } + "AINT" { addToken(Token.RESERVED_WORD); } + "AMAX0" { addToken(Token.RESERVED_WORD); } + "AMIN0" { addToken(Token.RESERVED_WORD); } + "ANINT" { addToken(Token.RESERVED_WORD); } + "CEILING" { addToken(Token.RESERVED_WORD); } + "CMPLX" { addToken(Token.RESERVED_WORD); } + "CONJG" { addToken(Token.RESERVED_WORD); } + "DBLE" { addToken(Token.RESERVED_WORD); } + "DCMPLX" { addToken(Token.RESERVED_WORD); } + "DFLOAT" { addToken(Token.RESERVED_WORD); } + "DIM" { addToken(Token.RESERVED_WORD); } + "DPROD" { addToken(Token.RESERVED_WORD); } + "FLOAT" { addToken(Token.RESERVED_WORD); } + "FLOOR" { addToken(Token.RESERVED_WORD); } + "IFIX" { addToken(Token.RESERVED_WORD); } + "IMAG" { addToken(Token.RESERVED_WORD); } + "INT" { addToken(Token.RESERVED_WORD); } + "LOGICAL" { addToken(Token.RESERVED_WORD); } + "MODULO" { addToken(Token.RESERVED_WORD); } + "NINT" { addToken(Token.RESERVED_WORD); } + "REAL" { addToken(Token.RESERVED_WORD); } + "SIGN" { addToken(Token.RESERVED_WORD); } + "SNGL" { addToken(Token.RESERVED_WORD); } + "TRANSFER" { addToken(Token.RESERVED_WORD); } + "ZEXT" { addToken(Token.RESERVED_WORD); } + "ABS" { addToken(Token.RESERVED_WORD); } + "ACOS" { addToken(Token.RESERVED_WORD); } + "AIMAG" { addToken(Token.RESERVED_WORD); } + "AINT" { addToken(Token.RESERVED_WORD); } + "ALOG" { addToken(Token.RESERVED_WORD); } + "ALOG10" { addToken(Token.RESERVED_WORD); } + "AMAX0" { addToken(Token.RESERVED_WORD); } + "AMAX1" { addToken(Token.RESERVED_WORD); } + "AMIN0" { addToken(Token.RESERVED_WORD); } + "AMIN1" { addToken(Token.RESERVED_WORD); } + "AMOD" { addToken(Token.RESERVED_WORD); } + "ANINT" { addToken(Token.RESERVED_WORD); } + "ASIN" { addToken(Token.RESERVED_WORD); } + "ATAN" { addToken(Token.RESERVED_WORD); } + "ATAN2" { addToken(Token.RESERVED_WORD); } + "CABS" { addToken(Token.RESERVED_WORD); } + "CCOS" { addToken(Token.RESERVED_WORD); } + "CHAR" { addToken(Token.RESERVED_WORD); } + "CLOG" { addToken(Token.RESERVED_WORD); } + "CMPLX" { addToken(Token.RESERVED_WORD); } + "CONJG" { addToken(Token.RESERVED_WORD); } + "COS" { addToken(Token.RESERVED_WORD); } + "COSH" { addToken(Token.RESERVED_WORD); } + "CSIN" { addToken(Token.RESERVED_WORD); } + "CSQRT" { addToken(Token.RESERVED_WORD); } + "DABS" { addToken(Token.RESERVED_WORD); } + "DACOS" { addToken(Token.RESERVED_WORD); } + "DASIN" { addToken(Token.RESERVED_WORD); } + "DATAN" { addToken(Token.RESERVED_WORD); } + "DATAN2" { addToken(Token.RESERVED_WORD); } + "DBLE" { addToken(Token.RESERVED_WORD); } + "DCOS" { addToken(Token.RESERVED_WORD); } + "DCOSH" { addToken(Token.RESERVED_WORD); } + "DDIM" { addToken(Token.RESERVED_WORD); } + "DEXP" { addToken(Token.RESERVED_WORD); } + "DIM" { addToken(Token.RESERVED_WORD); } + "DINT" { addToken(Token.RESERVED_WORD); } + "DLOG" { addToken(Token.RESERVED_WORD); } + "DLOG10" { addToken(Token.RESERVED_WORD); } + "DMAX1" { addToken(Token.RESERVED_WORD); } + "DMIN1" { addToken(Token.RESERVED_WORD); } + "DMOD" { addToken(Token.RESERVED_WORD); } + "DNINT" { addToken(Token.RESERVED_WORD); } + "DPROD" { addToken(Token.RESERVED_WORD); } + "DREAL" { addToken(Token.RESERVED_WORD); } + "DSIGN" { addToken(Token.RESERVED_WORD); } + "DSIN" { addToken(Token.RESERVED_WORD); } + "DSINH" { addToken(Token.RESERVED_WORD); } + "DSQRT" { addToken(Token.RESERVED_WORD); } + "DTAN" { addToken(Token.RESERVED_WORD); } + "DTANH" { addToken(Token.RESERVED_WORD); } + "EXP" { addToken(Token.RESERVED_WORD); } + "FLOAT" { addToken(Token.RESERVED_WORD); } + "IABS" { addToken(Token.RESERVED_WORD); } + "ICHAR" { addToken(Token.RESERVED_WORD); } + "IDIM" { addToken(Token.RESERVED_WORD); } + "IDINT" { addToken(Token.RESERVED_WORD); } + "IDNINT" { addToken(Token.RESERVED_WORD); } + "IFIX" { addToken(Token.RESERVED_WORD); } + "INDEX" { addToken(Token.RESERVED_WORD); } + "INT" { addToken(Token.RESERVED_WORD); } + "ISIGN" { addToken(Token.RESERVED_WORD); } + "LEN" { addToken(Token.RESERVED_WORD); } + "LGE" { addToken(Token.RESERVED_WORD); } + "LGT" { addToken(Token.RESERVED_WORD); } + "LLE" { addToken(Token.RESERVED_WORD); } + "LLT" { addToken(Token.RESERVED_WORD); } + "LOG" { addToken(Token.RESERVED_WORD); } + "LOG10" { addToken(Token.RESERVED_WORD); } + "MAX" { addToken(Token.RESERVED_WORD); } + "MAX0" { addToken(Token.RESERVED_WORD); } + "MAX1" { addToken(Token.RESERVED_WORD); } + "MIN" { addToken(Token.RESERVED_WORD); } + "MIN0" { addToken(Token.RESERVED_WORD); } + "MIN1" { addToken(Token.RESERVED_WORD); } + "MOD" { addToken(Token.RESERVED_WORD); } + "NINT" { addToken(Token.RESERVED_WORD); } + "REAL" { addToken(Token.RESERVED_WORD); } + "SIGN" { addToken(Token.RESERVED_WORD); } + "SIN" { addToken(Token.RESERVED_WORD); } + "SINH" { addToken(Token.RESERVED_WORD); } + "SNGL" { addToken(Token.RESERVED_WORD); } + "SQRT" { addToken(Token.RESERVED_WORD); } + "TAN" { addToken(Token.RESERVED_WORD); } + "TANH" { addToken(Token.RESERVED_WORD); } + + { + + {LineTerminator} { addNullToken(); return firstToken; } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character Literals. */ + {CharDelimiter} { start = zzMarkedPos-1; yybegin(CHAR); } + {StringDelimiter} { start = zzMarkedPos-1; yybegin(STRING); } + + /* Comment Literals. */ + /* Note that we cannot combine these as JFLex doesn't like combining an */ + /* expression containing the beginning-of-line character '^'. */ + {Column1CommentBegin} { + // Since we change zzStartRead, we have the unfortunate + // side-effect of not being able to use the '^' operator. + // So we must check whether we're really at the beginning + // of the line ourselves... + if (zzStartRead==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + else { + addToken(Token.IDENTIFIER); + } + } + {Column1Comment2Begin} { + // Since we change zzStartRead, we have the unfortunate + // side-effect of not being able to use the '^' operator. + // So we must check whether we're really at the beginning + // of the line ourselves... + if (zzStartRead==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_DOCUMENTATION); + addNullToken(); + return firstToken; + } + else { + addToken(Token.IDENTIFIER); + } + } + {AnywhereCommentBegin} { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Boolean literals. */ + {Boolean} { addToken(Token.LITERAL_BOOLEAN); } + + {Identifier} { addToken(Token.IDENTIFIER); } + + /* Ended with a line not in a string or char literal. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + . { addToken(Token.IDENTIFIER); } + +} + + { + [^\'\n]* {} + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} + + { + [^\"\n]* {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java new file mode 100644 index 0000000..df04357 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java @@ -0,0 +1,1010 @@ +/* The following code was generated by JFlex 1.4.1 on 10/16/06 10:31 AM */ + +/* + * 03/23/2005 + * + * FortranTokenMaker.java - Scanner for the Fortran programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Fortran programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated FortranTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.4 + * + */ + +public class FortranTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int YYINITIAL = 0; + public static final int CHAR = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\1\1\0\1\2\23\0\1\2\1\5\1\10\1\0"+ + "\1\6\1\0\1\14\1\11\2\0\1\3\3\0\1\16\1\15\1\45"+ + "\1\50\1\51\7\6\2\0\1\12\1\13\1\12\2\0\1\25\1\37"+ + "\1\7\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17"+ + "\1\36\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6"+ + "\1\44\1\40\1\43\1\47\4\0\1\6\1\0\1\25\1\37\1\34"+ + "\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17\1\36"+ + "\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6\1\44"+ + "\1\40\1\43\1\47\uff85\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 = + "\1\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\2\1\5\1\10\1\11\1\12\1\2\1\12\24\2"+ + "\1\1\1\13\1\14\1\1\1\15\1\16\7\2\1\17"+ + "\20\2\7\0\41\2\1\17\27\2\1\17\10\2\1\17"+ + "\3\2\4\0\2\17\3\2\2\17\20\2\1\17\10\2"+ + "\2\17\3\2\1\17\2\2\1\17\6\2\1\17\2\0"+ + "\3\2\1\17\4\2\1\17\26\2\1\0\20\2\1\20"+ + "\12\2\1\17"; + + private static int [] zzUnpackAction() { + int [] result = new int[257]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\52\0\124\0\176\0\176\0\250\0\176\0\322"+ + "\0\176\0\374\0\u0126\0\176\0\176\0\u0150\0\u0150\0\176"+ + "\0\u017a\0\u01a4\0\u01ce\0\u01f8\0\u0222\0\u024c\0\u0276\0\u02a0"+ + "\0\u02ca\0\u02f4\0\u031e\0\u0348\0\u0372\0\u0126\0\u039c\0\u03c6"+ + "\0\u03f0\0\u041a\0\u0444\0\u046e\0\u0498\0\176\0\176\0\u04c2"+ + "\0\176\0\176\0\u04ec\0\u0516\0\u0540\0\u056a\0\u0594\0\u05be"+ + "\0\u05e8\0\u0612\0\u063c\0\u0666\0\u0690\0\u06ba\0\u06e4\0\u070e"+ + "\0\u0738\0\u0762\0\u078c\0\u07b6\0\u07e0\0\u080a\0\u0834\0\u085e"+ + "\0\u0888\0\u08b2\0\u08dc\0\u0906\0\u0930\0\u095a\0\u0984\0\u09ae"+ + "\0\u09d8\0\u0a02\0\u0a2c\0\u0a56\0\u0a80\0\u0aaa\0\u0ad4\0\u0afe"+ + "\0\u0b28\0\u0b52\0\u0b7c\0\u0ba6\0\u0bd0\0\u0bfa\0\u0c24\0\u0c4e"+ + "\0\u0c78\0\u0ca2\0\u0ccc\0\u0cf6\0\u0d20\0\u0d4a\0\u0d74\0\u0d9e"+ + "\0\u0dc8\0\u0df2\0\u0e1c\0\u0e46\0\u0e70\0\u0e9a\0\u0ec4\0\u0eee"+ + "\0\u0f18\0\u0f42\0\u0f6c\0\u0f96\0\u0fc0\0\u0fea\0\u1014\0\u103e"+ + "\0\u1068\0\u1092\0\u10bc\0\u10e6\0\u1110\0\u113a\0\u1164\0\u118e"+ + "\0\u11b8\0\u11e2\0\u120c\0\u1236\0\u1260\0\u128a\0\u12b4\0\u12de"+ + "\0\u1308\0\u1332\0\u135c\0\u1386\0\u13b0\0\u13da\0\u1404\0\u142e"+ + "\0\u1458\0\u1482\0\u14ac\0\u14d6\0\u1500\0\u152a\0\u1554\0\u157e"+ + "\0\u15a8\0\u15d2\0\u15fc\0\374\0\u1626\0\u1650\0\u167a\0\u16a4"+ + "\0\u16ce\0\u16f8\0\u1722\0\u174c\0\u1776\0\u17a0\0\u17ca\0\u17f4"+ + "\0\u181e\0\u1848\0\u1872\0\u189c\0\u18c6\0\u18f0\0\u191a\0\u1944"+ + "\0\u196e\0\u1998\0\u19c2\0\u19ec\0\u1a16\0\u1a40\0\u1a6a\0\u16f8"+ + "\0\u1a94\0\u1abe\0\u1ae8\0\u1b12\0\u1b3c\0\u1b66\0\u1b90\0\u1bba"+ + "\0\u1be4\0\u1c0e\0\u1c38\0\u174c\0\u1c62\0\u1c8c\0\u1cb6\0\u1ce0"+ + "\0\u1d0a\0\u1d34\0\u1d5e\0\u1d88\0\u1db2\0\u1ddc\0\u1e06\0\u1e30"+ + "\0\u1e5a\0\u1e84\0\u1eae\0\u1ed8\0\u1f02\0\u1f2c\0\u1b12\0\u1f56"+ + "\0\u1f80\0\u1faa\0\u1fd4\0\u1ffe\0\u2028\0\u2052\0\u207c\0\u20a6"+ + "\0\u20d0\0\u20fa\0\u2124\0\u214e\0\u2178\0\u21a2\0\u21cc\0\u21f6"+ + "\0\u2220\0\u224a\0\u2274\0\u229e\0\u22c8\0\u22f2\0\u231c\0\u2346"+ + "\0\u2370\0\u239a\0\u23c4\0\u23ee\0\u2418\0\u2442\0\u246c\0\u2496"+ + "\0\u24c0\0\u24ea\0\u2514\0\u253e\0\u2568\0\176\0\u2592\0\u25bc"+ + "\0\u25e6\0\u2610\0\u263a\0\u2664\0\u268e\0\u26b8\0\u26e2\0\u270c"+ + "\0\u13da"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[257]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\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\17\1\21\1\22"+ + "\1\23\1\24\1\25\1\12\1\26\1\27\1\30\1\31"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\2\12\1\42\1\12\1\43\2\12\1\44\2\12\1\45"+ + "\1\46\6\45\1\47\41\45\1\50\1\51\7\50\1\52"+ + "\40\50\54\0\1\6\53\0\1\53\1\0\1\12\1\54"+ + "\7\0\1\55\1\56\1\12\1\57\1\12\1\60\1\61"+ + "\1\62\1\63\1\12\1\64\1\65\1\66\1\54\1\67"+ + "\1\70\1\71\12\12\4\0\1\12\1\0\2\12\7\0"+ + "\33\12\4\0\1\12\1\0\1\12\1\72\7\0\1\73"+ + "\2\12\1\74\2\12\1\75\1\76\3\12\1\77\1\12"+ + "\1\72\1\12\1\100\2\12\1\101\1\12\1\102\6\12"+ + "\13\0\1\20\55\0\1\103\1\104\1\103\1\105\1\0"+ + "\1\106\1\107\1\110\2\0\1\111\24\0\1\12\1\0"+ + "\2\12\7\0\1\112\1\12\1\112\1\113\3\12\1\114"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\6\12\1\115"+ + "\1\12\1\116\11\12\1\117\10\12\4\0\1\12\1\0"+ + "\2\12\7\0\7\12\1\120\23\12\4\0\1\12\1\0"+ + "\2\12\7\0\1\121\4\12\1\122\13\12\1\123\11\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\124\4\12"+ + "\1\125\16\12\4\0\1\12\1\0\1\12\1\72\7\0"+ + "\1\126\1\127\3\12\1\60\5\12\1\130\1\131\1\72"+ + "\1\12\1\132\1\133\12\12\4\0\1\12\1\0\2\12"+ + "\7\0\16\12\1\117\14\12\4\0\1\12\1\0\2\12"+ + "\7\0\3\12\1\134\27\12\4\0\1\12\1\0\2\12"+ + "\7\0\13\12\1\135\17\12\4\0\1\12\1\0\2\12"+ + "\7\0\1\136\6\12\1\137\1\12\1\140\21\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\12\1\141\1\12\1\142"+ + "\1\143\1\144\3\12\1\145\2\12\1\146\16\12\4\0"+ + "\1\147\1\0\1\12\1\150\7\0\5\12\1\151\1\152"+ + "\3\12\1\153\1\154\1\12\1\150\1\12\1\155\13\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\156\1\12"+ + "\1\157\22\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\160\1\161\4\12\1\162\16\12\4\0\1\12\1\0"+ + "\2\12\7\0\6\12\1\163\24\12\4\0\1\12\1\0"+ + "\2\12\7\0\14\12\1\164\16\12\4\0\1\12\1\0"+ + "\2\12\7\0\10\12\1\165\11\12\1\166\10\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\167\27\12\1\45"+ + "\1\0\6\45\1\0\41\45\1\50\1\0\7\50\1\0"+ + "\40\50\4\0\1\12\1\0\2\12\7\0\14\12\1\170"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\7\12\1\171"+ + "\7\12\1\100\13\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\172\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\115\24\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\173\3\12\1\174\6\12\1\175\11\12\4\0"+ + "\1\12\1\0\2\12\7\0\14\12\1\125\16\12\4\0"+ + "\1\12\1\0\1\12\1\72\7\0\1\12\1\176\11\12"+ + "\1\130\1\12\1\72\2\12\1\133\12\12\4\0\1\12"+ + "\1\0\2\12\7\0\11\12\1\177\21\12\4\0\1\12"+ + "\1\0\2\12\7\0\3\12\1\200\27\12\4\0\1\12"+ + "\1\0\2\12\7\0\1\201\32\12\4\0\1\12\1\0"+ + "\2\12\7\0\4\12\1\143\7\12\1\146\16\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\202\11\12\1\203"+ + "\13\12\4\0\1\12\1\0\2\12\7\0\10\12\1\204"+ + "\22\12\4\0\1\12\1\0\2\12\7\0\6\12\1\205"+ + "\1\206\4\12\1\207\16\12\4\0\1\12\1\0\2\12"+ + "\7\0\1\135\32\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\133\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\210\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\14\12\1\211\16\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\212\12\12\1\135\4\12\1\133\12\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\213\5\12\1\214\3\12"+ + "\1\215\13\12\4\0\1\12\1\0\2\12\7\0\4\12"+ + "\1\143\7\12\1\113\16\12\4\0\1\12\1\0\2\12"+ + "\7\0\16\12\1\216\14\12\4\0\1\12\1\0\2\12"+ + "\7\0\6\12\1\217\24\12\4\0\1\12\1\0\1\12"+ + "\1\71\7\0\15\12\1\71\15\12\20\0\1\220\1\0"+ + "\1\220\56\0\1\221\45\0\1\220\50\0\1\220\53\0"+ + "\1\222\54\0\1\220\47\0\1\223\30\0\1\12\1\0"+ + "\2\12\7\0\1\12\1\224\1\12\1\224\27\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\224\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\2\12\1\225\30\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\214\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\6\12\1\226\24\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\113\27\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\12\1\227\31\12\4\0"+ + "\1\12\1\0\2\12\7\0\13\12\1\230\17\12\4\0"+ + "\1\231\1\0\2\12\7\0\33\12\4\0\1\12\1\0"+ + "\2\12\7\0\14\12\1\202\1\12\1\232\14\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\135\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\202\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\233\6\12\1\172\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\234\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\113\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\5\12\1\202\11\12"+ + "\1\235\13\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\236\1\206\4\12\1\237\16\12\4\0\1\12\1\0"+ + "\2\12\7\0\13\12\1\224\17\12\4\0\1\12\1\0"+ + "\2\12\7\0\1\12\1\240\4\12\1\241\16\12\1\42"+ + "\5\12\4\0\1\12\1\0\2\12\7\0\3\12\1\224"+ + "\27\12\4\0\1\12\1\0\2\12\7\0\7\12\1\242"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\10\12\1\243"+ + "\22\12\4\0\1\12\1\0\2\12\7\0\5\12\1\244"+ + "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\175"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\1\245\32\12"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\202\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\2\12\1\212\30\12"+ + "\4\0\1\12\1\0\2\12\7\0\20\12\1\246\12\12"+ + "\4\0\1\12\1\0\2\12\7\0\2\12\1\113\2\12"+ + "\1\214\25\12\4\0\1\12\1\0\2\12\7\0\5\12"+ + "\1\60\6\12\1\247\16\12\4\0\1\12\1\0\2\12"+ + "\7\0\22\12\1\250\10\12\4\0\1\251\1\0\1\12"+ + "\1\252\7\0\1\12\1\253\2\12\1\254\10\12\1\252"+ + "\15\12\4\0\1\12\1\0\2\12\7\0\20\12\1\133"+ + "\12\12\4\0\1\12\1\0\2\12\7\0\14\12\1\255"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\14\12\1\256"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\6\12\1\257"+ + "\7\12\1\260\14\12\4\0\1\12\1\0\2\12\7\0"+ + "\10\12\1\261\1\32\21\12\4\0\1\12\1\0\2\12"+ + "\7\0\3\12\1\262\3\12\1\263\4\12\1\125\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\21\12\1\264\11\12"+ + "\4\0\1\265\1\0\2\12\7\0\33\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\264\25\12\4\0\1\12"+ + "\1\0\1\12\1\266\7\0\15\12\1\266\15\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\206\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\14\12\1\267\16\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\270\10\12\1\71"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\21\12\1\202"+ + "\11\12\4\0\1\12\1\0\2\12\7\0\17\12\1\224"+ + "\13\12\4\0\1\12\1\0\2\12\7\0\13\12\1\214"+ + "\17\12\4\0\1\12\1\0\2\12\7\0\2\12\1\271"+ + "\30\12\4\0\1\12\1\0\2\12\7\0\1\272\32\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\273\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\16\12\1\224\14\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\274\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\20\12\1\71\12\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\212\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\275\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\12\1\224\31\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\276\27\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\206\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\21\12\1\277\11\12"+ + "\4\0\1\224\1\0\2\12\7\0\33\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\277\25\12\4\0\1\12"+ + "\1\0\2\12\7\0\2\12\1\224\10\12\1\135\17\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\300\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\224\32\12\4\0\1\12"+ + "\1\0\2\12\7\0\1\12\1\301\25\12\1\257\3\12"+ + "\4\0\1\12\1\0\2\12\7\0\22\12\1\224\10\12"+ + "\4\0\1\12\1\0\2\12\7\0\16\12\1\302\14\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\255\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\10\12\1\303\22\12\16\0"+ + "\1\20\63\0\1\304\25\0\1\220\64\0\1\305\36\0"+ + "\1\12\1\0\2\12\7\0\14\12\1\306\14\12\1\307"+ + "\1\12\4\0\1\12\1\0\2\12\7\0\5\12\1\310"+ + "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\224"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\3\12\1\311"+ + "\27\12\4\0\1\227\1\0\2\12\7\0\12\12\1\312"+ + "\1\12\1\313\16\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\314\32\12\4\0\1\12\1\0\2\12\7\0\7\12"+ + "\1\315\23\12\4\0\1\12\1\0\2\12\7\0\5\12"+ + "\1\316\25\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\257\24\12\4\0\1\12\1\0\2\12\7\0\21\12"+ + "\1\317\11\12\4\0\1\12\1\0\2\12\7\0\5\12"+ + "\1\317\25\12\4\0\1\12\1\0\2\12\7\0\11\12"+ + "\1\320\21\12\4\0\1\224\1\0\2\12\7\0\1\224"+ + "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\202"+ + "\1\321\23\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\322\10\12\1\275\13\12\4\0\1\12\1\0\1\12"+ + "\1\323\7\0\15\12\1\323\15\12\4\0\1\12\1\0"+ + "\2\12\7\0\3\12\1\324\27\12\4\0\1\12\1\0"+ + "\2\12\7\0\10\12\1\325\22\12\4\0\1\12\1\0"+ + "\2\12\7\0\5\12\1\202\11\12\1\224\13\12\4\0"+ + "\1\12\1\0\2\12\7\0\6\12\1\321\24\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\255\27\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\326\32\12\4\0\1\12"+ + "\1\0\2\12\7\0\3\12\1\327\27\12\4\0\1\12"+ + "\1\0\2\12\7\0\11\12\1\330\21\12\4\0\1\12"+ + "\1\0\2\12\7\0\21\12\1\224\11\12\4\0\1\12"+ + "\1\0\2\12\7\0\2\12\1\113\30\12\4\0\1\12"+ + "\1\0\2\12\7\0\2\12\1\224\30\12\4\0\1\12"+ + "\1\0\2\12\7\0\6\12\1\331\24\12\4\0\1\12"+ + "\1\0\1\12\1\332\7\0\15\12\1\332\15\12\4\0"+ + "\1\12\1\0\2\12\7\0\2\12\1\333\30\12\4\0"+ + "\1\12\1\0\2\12\7\0\26\12\1\224\2\12\1\224"+ + "\1\12\4\0\1\12\1\0\2\12\7\0\11\12\1\334"+ + "\21\12\4\0\1\12\1\0\2\12\7\0\23\12\1\335"+ + "\7\12\4\0\1\12\1\0\2\12\7\0\1\12\1\135"+ + "\31\12\4\0\1\12\1\0\2\12\7\0\10\12\1\135"+ + "\22\12\4\0\1\12\1\0\2\12\7\0\31\12\1\307"+ + "\1\12\4\0\1\12\1\0\2\12\7\0\1\336\32\12"+ + "\4\0\1\12\1\0\2\12\7\0\11\12\1\337\21\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\202\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\5\12\1\340\25\12"+ + "\4\0\1\12\1\0\2\12\7\0\31\12\1\224\1\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\341\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\342\5\12"+ + "\1\343\16\12\4\0\1\12\1\0\2\12\7\0\1\251"+ + "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\344"+ + "\24\12\22\0\1\345\61\0\1\304\23\0\1\12\1\0"+ + "\1\12\1\200\7\0\15\12\1\200\15\12\4\0\1\12"+ + "\1\0\2\12\7\0\26\12\1\224\4\12\4\0\1\12"+ + "\1\0\2\12\7\0\13\12\1\346\17\12\4\0\1\12"+ + "\1\0\2\12\7\0\14\12\1\313\10\12\1\347\5\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\71\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\12\12\1\224\20\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\350\16\12"+ + "\4\0\1\12\1\0\1\12\1\351\7\0\15\12\1\351"+ + "\15\12\4\0\1\12\1\0\2\12\7\0\32\12\1\224"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\113\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\224\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\212\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\12\1\352\31\12\4\0"+ + "\1\12\1\0\1\12\1\202\7\0\15\12\1\202\15\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\353\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\11\12\1\354\21\12"+ + "\4\0\1\12\1\0\2\12\7\0\2\12\1\355\30\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\270\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\17\12\1\356\13\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\340\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\357\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\360\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\13\12\1\361\17\12\4\0"+ + "\1\12\1\0\2\12\7\0\7\12\1\362\23\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\202\32\12\4\0\1\12"+ + "\1\0\2\12\7\0\13\12\1\352\17\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\257\25\12\4\0\1\12"+ + "\1\0\2\12\7\0\14\12\1\363\16\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\364\25\12\4\0\1\12"+ + "\1\0\1\12\1\365\7\0\15\12\1\365\15\12\16\0"+ + "\1\366\37\0\1\12\1\0\2\12\7\0\12\12\1\355"+ + "\20\12\4\0\1\12\1\0\2\12\7\0\22\12\1\367"+ + "\10\12\4\0\1\12\1\0\1\12\1\370\7\0\15\12"+ + "\1\370\15\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\371\24\12\4\0\1\12\1\0\2\12\7\0\14\12"+ + "\1\372\16\12\4\0\1\12\1\0\2\12\7\0\11\12"+ + "\1\373\21\12\4\0\1\135\1\0\2\12\7\0\33\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\321\27\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\365\27\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\170\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\224\3\12"+ + "\1\224\23\12\4\0\1\12\1\0\2\12\7\0\16\12"+ + "\1\374\14\12\4\0\1\12\1\0\1\12\1\375\7\0"+ + "\15\12\1\375\15\12\4\0\1\12\1\0\2\12\7\0"+ + "\5\12\1\133\25\12\4\0\1\12\1\0\2\12\7\0"+ + "\11\12\1\135\21\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\12\1\355\31\12\4\0\1\12\1\0\2\12\7\0"+ + "\3\12\1\270\27\12\4\0\1\12\1\0\2\12\7\0"+ + "\14\12\1\202\16\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\12\1\376\31\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\113\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\12\1\377\31\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\u0100\24\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\267\24\12\4\0\1\12\1\0\2\12\7\0"+ + "\3\12\1\u0101\2\12\1\177\24\12\4\0\1\12\1\0"+ + "\2\12\7\0\14\12\1\124\16\12\4\0\1\12\1\0"+ + "\1\12\1\135\7\0\15\12\1\135\15\12"; + + private static int [] zzUnpackTrans() { + int [] result = new int[10038]; + 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; + } + + + /* 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; + + /* 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 = + "\1\0\2\1\2\11\1\1\1\11\1\1\1\11\2\1"+ + "\2\11\2\1\1\11\25\1\2\11\1\1\2\11\30\1"+ + "\7\0\106\1\4\0\60\1\2\0\37\1\1\0\20\1"+ + "\1\11\13\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[257]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. We must have this here as there is no default, + * no-parameter constructor generated by JFlex. + */ + public FortranTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "!", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public FortranTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public FortranTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 168) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 15: + { addToken(Token.RESERVED_WORD); + } + case 17: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 18: break; + case 4: + { addToken(Token.WHITESPACE); + } + case 19: break; + case 11: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 20: break; + case 13: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 21: break; + case 10: + { addToken(Token.OPERATOR); + } + case 22: break; + case 5: + { // Since we change zzStartRead, we have the unfortunate + // side-effect of not being able to use the '^' operator. + // So we must check whether we're really at the beginning + // of the line ourselves... + if (zzStartRead==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + else { + addToken(Token.IDENTIFIER); + } + } + case 23: break; + case 16: + { addToken(Token.LITERAL_BOOLEAN); + } + case 24: break; + case 8: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 25: break; + case 7: + { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 26: break; + case 6: + { // Since we change zzStartRead, we have the unfortunate + // side-effect of not being able to use the '^' operator. + // So we must check whether we're really at the beginning + // of the line ourselves... + if (zzStartRead==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_DOCUMENTATION); + addNullToken(); + return firstToken; + } + else { + addToken(Token.IDENTIFIER); + } + } + case 27: break; + case 9: + { start = zzMarkedPos-1; yybegin(CHAR); + } + case 28: break; + case 14: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 29: break; + case 12: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 30: break; + case 3: + { addNullToken(); return firstToken; + } + case 31: break; + case 1: + { + } + case 32: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 258: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 259: break; + case CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 260: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex new file mode 100644 index 0000000..cf174cc --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex @@ -0,0 +1,930 @@ +/* + * 09/28/2007 + * + * GroovyTokenMaker.java - Scanner for the Groovy programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Groovy programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated GroovyTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class GroovyTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public GroovyTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = MULTILINE_STRING_SINGLE; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = [1-9] +BinaryDigit = ([0-1]) +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +AnyCharacterButApostropheOrBackSlash = ([^\\']) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})*[\']) +UnclosedCharLiteral = ([\'][^\'\n]*) +ErrorCharLiteral = ({UnclosedCharLiteral}[\']) + +MLCBegin = "/*" +MLCEnd = "*/" +DocCommentBegin = "/**" +LineCommentBegin = "//" + +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +HexLiteral = ({HexHelper}[lL]?) + +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") +Regex = ([~]?"/"([^\*\\/]|\\.)([^/\\]|\\.)*"/") + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +GroovyOperator = ("=~") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}|{GroovyOperator}) + +CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") +ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") +BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) +InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + +// Variables in strings +VariableStart = ([\$]) +BracedVariable = ({VariableStart}\{[^\}]+\}) +UnbracedVariable = ({VariableStart}{Identifier}) +Variable = ({BracedVariable}|{UnbracedVariable}) + +Annotation = ("@"{Identifier}?) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state MLC +%state DOCCOMMENT +%state EOL_COMMENT +%state MULTILINE_STRING_DOUBLE +%state MULTILINE_STRING_SINGLE +%state STRING_DOUBLE + +%% + + { + + /* Keywords */ + "abstract" | + "break" | + "case" | + "catch" | + "class" | + "const" | + "continue" | + "default" | + "do" | + "else" | + "enum" | + "extends" | + "final" | + "finally" | + "for" | + "goto" | + "if" | + "it" | + "implements" | + "import" | + "instanceof" | + "interface" | + "native" | + "new" | + "null" | + "package" | + "private" | + "protected" | + "public" | + "static" | + "strictfp" | + "super" | + "switch" | + "synchronized" | + "this" | + "throw" | + "throws" | + "transient" | + "try" | + "void" | + "volatile" | + "while" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + /* Groovy keywords */ + "as" | + "assert" | + "def" | + "mixin" | + "property" | + "test" | + "using" | + "in" { addToken(Token.RESERVED_WORD); } + + /* Data types. */ + "boolean" | + "byte" | + "char" | + "double" | + "float" | + "int" | + "long" | + "short" { addToken(Token.DATA_TYPE); } + + /* Booleans. */ + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + /* java.lang classes */ + "Appendable" | + "AutoCloseable" | + "CharSequence" | + "Cloneable" | + "Comparable" | + "Iterable" | + "Readable" | + "Runnable" | + "Thread.UncaughtExceptionHandler" | + "Boolean" | + "Byte" | + "Character" | + "Character.Subset" | + "Character.UnicodeBlock" | + "Class" | + "ClassLoader" | + "ClassValue" | + "Compiler" | + "Double" | + "Enum" | + "Float" | + "InheritableThreadLocal" | + "Integer" | + "Long" | + "Math" | + "Number" | + "Object" | + "Package" | + "Process" | + "ProcessBuilder" | + "ProcessBuilder.Redirect" | + "Runtime" | + "RuntimePermission" | + "SecurityManager" | + "Short" | + "StackTraceElement" | + "StrictMath" | + "String" | + "StringBuffer" | + "StringBuilder" | + "System" | + "Thread" | + "ThreadGroup" | + "ThreadLocal" | + "Throwable" | + "Void" | + "Character.UnicodeScript" | + "ProcessBuilder.Redirect.Type" | + "Thread.State" | + "ArithmeticException" | + "ArrayIndexOutOfBoundsException" | + "ArrayStoreException" | + "ClassCastException" | + "ClassNotFoundException" | + "CloneNotSupportedException" | + "EnumConstantNotPresentException" | + "Exception" | + "IllegalAccessException" | + "IllegalArgumentException" | + "IllegalMonitorStateException" | + "IllegalStateException" | + "IllegalThreadStateException" | + "IndexOutOfBoundsException" | + "InstantiationException" | + "InterruptedException" | + "NegativeArraySizeException" | + "NoSuchFieldException" | + "NoSuchMethodException" | + "NullPointerException" | + "NumberFormatException" | + "RuntimeException" | + "SecurityException" | + "StringIndexOutOfBoundsException" | + "TypeNotPresentException" | + "UnsupportedOperationException" | + "AbstractMethodError" | + "AssertionError" | + "BootstrapMethodError" | + "ClassCircularityError" | + "ClassFormatError" | + "Error" | + "ExceptionInInitializerError" | + "IllegalAccessError" | + "IncompatibleClassChangeError" | + "InstantiationError" | + "InternalError" | + "LinkageError" | + "NoClassDefFoundError" | + "NoSuchFieldError" | + "NoSuchMethodError" | + "OutOfMemoryError" | + "StackOverflowError" | + "ThreadDeath" | + "UnknownError" | + "UnsatisfiedLinkError" | + "UnsupportedClassVersionError" | + "VerifyError" | + "VirtualMachineError" | + + /* java.io classes*/ + "Closeable" | + "DataInput" | + "DataOutput" | + "Externalizable" | + "FileFilter" | + "FilenameFilter" | + "Flushable" | + "ObjectInput" | + "ObjectInputValidation" | + "ObjectOutput" | + "ObjectStreamConstants" | + "Serializable" | + + "BufferedInputStream" | + "BufferedOutputStream" | + "BufferedReader" | + "BufferedWriter" | + "ByteArrayInputStream" | + "ByteArrayOutputStream" | + "CharArrayReader" | + "CharArrayWriter" | + "Console" | + "DataInputStream" | + "DataOutputStream" | + "File" | + "FileDescriptor" | + "FileInputStream" | + "FileOutputStream" | + "FilePermission" | + "FileReader" | + "FileWriter" | + "FilterInputStream" | + "FilterOutputStream" | + "FilterReader" | + "FilterWriter" | + "InputStream" | + "InputStreamReader" | + "LineNumberInputStream" | + "LineNumberReader" | + "ObjectInputStream" | + "ObjectInputStream.GetField" | + "ObjectOutputStream" | + "ObjectOutputStream.PutField" | + "ObjectStreamClass" | + "ObjectStreamField" | + "OutputStream" | + "OutputStreamWriter" | + "PipedInputStream" | + "PipedOutputStream" | + "PipedReader" | + "PipedWriter" | + "PrintStream" | + "PrintWriter" | + "PushbackInputStream" | + "PushbackReader" | + "RandomAccessFile" | + "Reader" | + "SequenceInputStream" | + "SerializablePermission" | + "StreamTokenizer" | + "StringBufferInputStream" | + "StringReader" | + "StringWriter" | + "Writer" | + + "CharConversionException" | + "EOFException" | + "FileNotFoundException" | + "InterruptedIOException" | + "InvalidClassException" | + "InvalidObjectException" | + "IOException" | + "NotActiveException" | + "NotSerializableException" | + "ObjectStreamException" | + "OptionalDataException" | + "StreamCorruptedException" | + "SyncFailedException" | + "UncheckedIOException" | + "UnsupportedEncodingException" | + "UTFDataFormatException" | + "WriteAbortedException" | + + "IOError" | + + /* java.util classes */ + "Collection" | + "Comparator" | + "Deque" | + "Enumeration" | + "EventListener" | + "Formattable" | + "Iterator" | + "List" | + "ListIterator" | + "Map" | + "Map.Entry" | + "NavigableMap" | + "NavigableSet" | + "Observer" | + "PrimitiveIterator" | + "PrimitiveIterator.OfDouble" | + "PrimitiveIterator.OfInt" | + "PrimitiveIterator.OfLong" | + "Queue" | + "RandomAccess" | + "Set" | + "SortedMap" | + "SortedSet" | + "Spliterator" | + "Spliterator.OfDouble" | + "Spliterator.OfInt" | + "Spliterator.OfLong" | + "Spliterator.OfPrimitive" | + + "AbstractCollection" | + "AbstractList" | + "AbstractMap" | + "AbstractMap.SimpleEntry" | + "AbstractMap.SimpleImmutableEntry" | + "AbstractQueue" | + "AbstractSequentialList" | + "AbstractSet" | + "ArrayDeque" | + "ArrayList" | + "Arrays" | + "Base64" | + "Base64.Decoder" | + "Base64.Encoder" | + "BitSet" | + "Calendar" | + "Calendar.Builder" | + "Collections" | + "Currency" | + "Date" | + "Dictionary" | + "DoubleSummaryStatistics" | + "EnumMap" | + "EnumSet" | + "EventListenerProxy" | + "EventObject" | + "FormattableFlags" | + "Formatter" | + "GregorianCalendar" | + "HashMap" | + "HashSet" | + "Hashtable" | + "IdentityHashMap" | + "IntSummaryStatistics" | + "LinkedHashMap" | + "LinkedHashSet" | + "LinkedList" | + "ListResourceBundle" | + "Locale" | + "Locale.Builder" | + "Locale.LanguageRange" | + "LongSummaryStatistics" | + "Objects" | + "Observable" | + "Optional" | + "OptionalDouble" | + "OptionalInt" | + "OptionalLong" | + "PriorityQueue" | + "Properties" | + "PropertyPermission" | + "PropertyResourceBundle" | + "Random" | + "ResourceBundle" | + "ResourceBundle.Control" | + "Scanner" | + "ServiceLoader" | + "SimpleTimeZone" | + "Spliterators" | + "Spliterators.AbstractDoubleSpliterator" | + "Spliterators.AbstractIntSpliterator" | + "Spliterators.AbstractLongSpliterator" | + "Spliterators.AbstractSpliterator" | + "SpliteratorRandom" | + "Stack" | + "StringJoiner" | + "StringTokenizer" | + "Timer" | + "TimerTask" | + "TimeZone" | + "TreeMap" | + "TreeSet" | + "UUID" | + "Vector" | + "WeakHashMap" | + + "Formatter.BigDecimalLayoutForm" | + "Locale.Category" | + "Locale.FilteringMode" | + + "ConcurrentModificationException" | + "DuplicateFormatFlagsException" | + "EmptyStackException" | + "FormatFlagsConversionMismatchException" | + "FormatterClosedException" | + "IllegalFormatCodePointException" | + "IllegalFormatConversionException" | + "IllegalFormatException" | + "IllegalFormatFlagsException" | + "IllegalFormatPrecisionException" | + "IllegalFormatWidthException" | + "IllformedLocaleException" | + "InputMismatchException" | + "InvalidPropertiesFormatException" | + "MissingFormatArgumentException" | + "MissingFormatWidthException" | + "MissingResourceException" | + "NoSuchElementException" | + "TooManyListenersException" | + "UnknownFormatConversionException" | + "UnknownFormatFlagsException" | + + "ServiceConfigurationError" { addToken(Token.FUNCTION); } + + /* Commonly used methods added to Object class */ + "addShutdownHook" | + "any" | + "asBoolean" | + "asType" | + "collect" | + "dump" | + "each" | + "eachWithIndex" | + "every" | + "find" | + "findAll" | + "findIndexOf" | + "findIndexValues" | + "findLastIndexOf" | + "getAt" | + "getMetaClass" | + "getMetaPropertyValues" | + "getProperties" | + "grep" | + "hasProperty" | + "identity" | + "inject" | + "inspect" | + "invokeMethod" | + "is" | + "isCase" | + "iterator" | + "metaClass" | + "print" | + "printf" | + "println" | + "putAt" | + "respondsTo" | + "setMetaClass" | + "sleep" | + "split" | + "sprintf" | + "toString" | + "use" | + "with" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* Multiline string literals. */ + \"\"\" { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } + \'\'\' { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_SINGLE); } + + + /* String/Character literals. */ + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } + \" { start = zzMarkedPos-1; yybegin(STRING_DOUBLE); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + /* Regular expressions. */ + {Regex} { + boolean highlightedAsRegex = false; + if (zzBuffer[zzStartRead]=='~' || firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Annotations. */ + {Annotation} { addToken(Token.ANNOTATION); } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} + + + { + + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + "@" {} + "{@"{InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } + \< {} + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } + +} + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} + + + { + [^\"\\\$\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \" {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + + { + [^\'\\\n]* {} + \\.? { /* Skip escaped chars, handles case: "\'''". */ } + \'\'\' { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_CHAR); } + \' {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} + + { + [^\n\\\$\"]+ {} + \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + \\.? { /* Skip escaped chars. */ } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } +} + diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java new file mode 100644 index 0000000..c8cfbdf --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java @@ -0,0 +1,5582 @@ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 6:49 PM */ + +/* + * 09/28/2007 + * + * GroovyTokenMaker.java - Scanner for the Groovy programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Groovy programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated GroovyTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class GroovyTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 3; + public static final int MULTILINE_STRING_DOUBLE = 4; + public static final int DOCCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + public static final int STRING_DOUBLE = 6; + public static final int MULTILINE_STRING_SINGLE = 5; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\22\1\21\1\0\1\22\1\16\22\0\1\22\1\53\1\13"+ + "\1\17\1\20\1\53\1\55\1\10\2\44\1\24\1\46\1\45\1\33"+ + "\1\34\1\23\1\4\1\5\2\7\1\123\1\7\1\122\1\7\2\3"+ + "\1\56\1\45\1\47\1\50\1\52\1\54\1\100\1\102\1\26\1\6"+ + "\1\67\1\32\1\31\1\117\1\110\1\105\1\125\1\1\1\25\1\112"+ + "\1\113\1\114\1\116\1\121\1\74\1\103\1\106\1\107\1\111\1\120"+ + "\1\30\1\1\1\124\1\44\1\12\1\44\1\51\1\2\1\0\1\40"+ + "\1\27\1\63\1\61\1\37\1\15\1\72\1\57\1\65\1\115\1\75"+ + "\1\41\1\66\1\14\1\60\1\62\1\104\1\36\1\42\1\35\1\11"+ + "\1\71\1\70\1\64\1\73\1\101\1\76\1\51\1\77\1\43\uff81\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 = + "\4\0\2\1\1\0\1\2\1\3\2\4\1\3\1\5"+ + "\1\3\1\6\2\3\1\2\1\7\1\10\2\11\5\3"+ + "\1\11\7\3\1\11\1\12\1\3\6\11\13\3\1\13"+ + "\16\3\2\1\1\14\5\1\1\15\10\1\1\16\3\1"+ + "\1\17\2\1\1\20\2\1\1\21\1\22\1\23\1\24"+ + "\1\25\1\2\2\26\1\27\1\4\1\26\1\27\2\26"+ + "\1\30\2\26\5\3\1\5\1\31\1\5\1\0\1\3"+ + "\1\0\7\3\2\0\1\32\1\33\1\11\37\3\1\34"+ + "\12\3\2\0\1\11\3\3\1\34\7\3\3\34\1\35"+ + "\22\3\1\13\57\3\2\0\1\36\4\0\1\37\2\0"+ + "\1\40\22\0\1\17\1\0\1\41\2\0\1\21\1\23"+ + "\1\2\1\4\1\27\1\0\2\30\1\4\1\30\10\3"+ + "\1\31\1\42\1\5\1\43\1\5\1\0\1\35\1\3"+ + "\1\44\5\3\1\45\1\46\65\3\1\34\13\3\1\47"+ + "\30\3\1\2\54\3\1\35\24\3\37\0\1\50\2\0"+ + "\1\51\1\2\2\26\12\3\1\43\1\5\1\0\4\3"+ + "\1\35\1\52\1\35\3\3\1\35\5\3\1\35\2\3"+ + "\1\47\4\3\2\35\6\3\1\53\5\3\1\35\54\3"+ + "\1\2\56\3\1\0\31\3\2\0\1\54\2\0\1\55"+ + "\15\0\1\56\12\0\1\57\1\0\1\41\1\2\2\3"+ + "\1\35\11\3\1\5\1\0\1\34\42\3\1\34\20\3"+ + "\1\35\24\3\1\2\11\3\1\35\31\3\1\35\11\3"+ + "\1\0\31\3\36\0\1\2\15\3\1\5\1\0\4\3"+ + "\1\35\5\3\1\35\27\3\1\60\31\3\1\35\1\2"+ + "\11\3\1\35\30\3\1\35\13\3\1\0\2\3\1\35"+ + "\10\3\1\35\12\3\23\0\14\3\1\0\2\3\1\0"+ + "\3\3\1\0\45\3\1\35\2\3\1\2\43\3\1\0"+ + "\14\3\1\0\23\3\1\35\6\3\5\0\1\56\4\0"+ + "\1\35\14\3\4\0\3\3\2\0\102\3\2\0\11\3"+ + "\1\0\20\3\1\35\12\3\12\0\4\3\1\35\6\3"+ + "\4\0\3\3\1\0\3\3\1\35\10\3\1\35\11\3"+ + "\1\35\47\3\2\0\10\3\1\35\27\3\5\0\4\3"+ + "\1\0\2\3\1\35\2\3\4\0\1\3\1\0\3\3"+ + "\1\0\57\3\2\0\32\3\5\0\3\3\2\0\3\3"+ + "\4\0\3\3\1\0\1\35\14\3\1\35\10\3\1\35"+ + "\5\3\1\35\12\3\2\0\15\3\1\35\5\3\2\0"+ + "\2\3\2\0\3\3\4\0\3\3\1\0\10\3\1\35"+ + "\3\3\1\0\1\3\1\35\2\3\1\35\2\3\1\0"+ + "\1\35\15\3\1\0\14\3\1\35\3\3\1\35\5\3"+ + "\2\0\2\3\3\0\2\3\1\0\2\3\1\35\10\3"+ + "\1\0\2\3\2\0\12\3\1\0\23\3\2\0\1\3"+ + "\2\0\2\3\1\0\5\3\1\35\1\3\1\0\2\3"+ + "\2\0\12\3\1\0\14\3\1\35\2\3\2\0\1\3"+ + "\2\0\2\3\1\0\4\3\1\0\1\3\1\0\1\3"+ + "\5\0\11\3\1\0\11\3\1\0\2\3\1\0\1\3"+ + "\2\0\1\3\1\0\2\3\1\0\1\3\5\0\10\3"+ + "\1\0\6\3\1\0\1\3\3\0\1\3\1\0\1\3"+ + "\1\0\1\3\5\0\5\3\1\0\3\3\1\35\1\3"+ + "\1\0\1\35\4\0\1\3\1\0\1\3\1\0\1\3"+ + "\4\0\3\3\1\0\3\3\1\0\1\35\4\0\1\3"+ + "\1\0\1\3\4\0\2\3\1\0\2\3\6\0\1\3"+ + "\1\0\1\3\4\0\1\3\7\0\1\3\1\0\1\3"+ + "\30\0\1\35\37\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[2058]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\126\0\254\0\u0102\0\u0158\0\u01ae\0\u0204\0\u025a"+ + "\0\u02b0\0\u0306\0\u035c\0\u03b2\0\u0408\0\u045e\0\u04b4\0\u050a"+ + "\0\u0560\0\u05b6\0\u05b6\0\u060c\0\u0662\0\u06b8\0\u070e\0\u0764"+ + "\0\u07ba\0\u0810\0\u0866\0\u08bc\0\u0912\0\u0968\0\u09be\0\u0a14"+ + "\0\u0a6a\0\u0ac0\0\u0b16\0\u0b6c\0\u05b6\0\u05b6\0\u0bc2\0\u0c18"+ + "\0\u0c6e\0\u0cc4\0\u05b6\0\u0d1a\0\u0d70\0\u0dc6\0\u0e1c\0\u0e72"+ + "\0\u0ec8\0\u0f1e\0\u0f74\0\u0fca\0\u1020\0\u1076\0\u10cc\0\u1122"+ + "\0\u1178\0\u11ce\0\u1224\0\u127a\0\u12d0\0\u1326\0\u137c\0\u13d2"+ + "\0\u1428\0\u147e\0\u14d4\0\u152a\0\u1580\0\u15d6\0\u162c\0\u1682"+ + "\0\u05b6\0\u16d8\0\u172e\0\u1784\0\u17da\0\u1830\0\u05b6\0\u1886"+ + "\0\u18dc\0\u1932\0\u1988\0\u19de\0\u1a34\0\u1a8a\0\u1ae0\0\u05b6"+ + "\0\u1b36\0\u1b8c\0\u1be2\0\u1c38\0\u1c8e\0\u1ce4\0\u05b6\0\u1d3a"+ + "\0\u1d90\0\u1de6\0\u05b6\0\u1e3c\0\u05b6\0\u05b6\0\u1e92\0\u1ee8"+ + "\0\u1f3e\0\u1ee8\0\u1ee8\0\u1f94\0\u1fea\0\u2040\0\u2096\0\u20ec"+ + "\0\u2142\0\u2198\0\u21ee\0\u2244\0\u229a\0\u22f0\0\u2346\0\u239c"+ + "\0\u23f2\0\u2448\0\u249e\0\u24f4\0\u254a\0\u25a0\0\u25f6\0\u264c"+ + "\0\u26a2\0\u26f8\0\u274e\0\u27a4\0\u27fa\0\u2850\0\u05b6\0\u28a6"+ + "\0\u27fa\0\u28fc\0\u2952\0\u29a8\0\u29fe\0\u2a54\0\u2aaa\0\u2b00"+ + "\0\u2b56\0\u2bac\0\u2c02\0\u2c58\0\u2cae\0\u2d04\0\u2d5a\0\u2db0"+ + "\0\u2e06\0\u2e5c\0\u2eb2\0\u2f08\0\u2f5e\0\u2fb4\0\u300a\0\u3060"+ + "\0\u30b6\0\u310c\0\u3162\0\u31b8\0\u320e\0\u3264\0\u32ba\0\u3310"+ + "\0\u3366\0\u33bc\0\u3412\0\u3468\0\u34be\0\u3514\0\u356a\0\u35c0"+ + "\0\u3616\0\u366c\0\u36c2\0\u3718\0\u06b8\0\u376e\0\u37c4\0\u381a"+ + "\0\u3870\0\u38c6\0\u391c\0\u3972\0\u39c8\0\u3a1e\0\u3a74\0\u3aca"+ + "\0\u3b20\0\u3b76\0\u02b0\0\u3bcc\0\u3c22\0\u3c78\0\u3cce\0\u3d24"+ + "\0\u3d7a\0\u3dd0\0\u3e26\0\u3e7c\0\u3ed2\0\u3f28\0\u3f7e\0\u3fd4"+ + "\0\u402a\0\u4080\0\u40d6\0\u412c\0\u4182\0\u41d8\0\u422e\0\u4284"+ + "\0\u42da\0\u4330\0\u4386\0\u43dc\0\u4432\0\u4488\0\u44de\0\u4534"+ + "\0\u458a\0\u45e0\0\u4636\0\u468c\0\u46e2\0\u4738\0\u478e\0\u47e4"+ + "\0\u483a\0\u4890\0\u48e6\0\u493c\0\u4992\0\u49e8\0\u4a3e\0\u4a94"+ + "\0\u4aea\0\u4b40\0\u4b96\0\u4bec\0\u4c42\0\u4c98\0\u4cee\0\u4d44"+ + "\0\u4d9a\0\u4df0\0\u4e46\0\u4e9c\0\u4ef2\0\u4f48\0\u4f9e\0\u4ff4"+ + "\0\u504a\0\u50a0\0\u50f6\0\u514c\0\u51a2\0\u51f8\0\u524e\0\u52a4"+ + "\0\u52fa\0\u05b6\0\u5350\0\u53a6\0\u53fc\0\u5452\0\u05b6\0\u54a8"+ + "\0\u54fe\0\u05b6\0\u5554\0\u55aa\0\u5600\0\u5656\0\u56ac\0\u5702"+ + "\0\u5758\0\u57ae\0\u5804\0\u585a\0\u58b0\0\u5906\0\u595c\0\u59b2"+ + "\0\u5a08\0\u5a5e\0\u5ab4\0\u5b0a\0\u05b6\0\u5b60\0\u5bb6\0\u5c0c"+ + "\0\u5c62\0\u05b6\0\u05b6\0\u5cb8\0\u5d0e\0\u5d64\0\u5dba\0\u5e10"+ + "\0\u1ee8\0\u5e66\0\u5ebc\0\u5f12\0\u5f68\0\u5fbe\0\u6014\0\u606a"+ + "\0\u60c0\0\u6116\0\u616c\0\u05b6\0\u05b6\0\u61c2\0\u249e\0\u6218"+ + "\0\u626e\0\u02b0\0\u62c4\0\u05b6\0\u631a\0\u6370\0\u63c6\0\u641c"+ + "\0\u6472\0\u05b6\0\u64c8\0\u651e\0\u6574\0\u65ca\0\u6620\0\u6676"+ + "\0\u66cc\0\u6722\0\u6778\0\u67ce\0\u6824\0\u687a\0\u68d0\0\u6926"+ + "\0\u697c\0\u69d2\0\u6a28\0\u6a7e\0\u6ad4\0\u6b2a\0\u6b80\0\u6bd6"+ + "\0\u6c2c\0\u6c82\0\u6cd8\0\u6d2e\0\u6d84\0\u6dda\0\u6e30\0\u6e86"+ + "\0\u6edc\0\u6f32\0\u6f88\0\u6fde\0\u7034\0\u708a\0\u70e0\0\u7136"+ + "\0\u718c\0\u71e2\0\u7238\0\u728e\0\u72e4\0\u733a\0\u7390\0\u73e6"+ + "\0\u743c\0\u7492\0\u74e8\0\u753e\0\u7594\0\u75ea\0\u7640\0\u7696"+ + "\0\u76ec\0\u7742\0\u7798\0\u77ee\0\u7844\0\u789a\0\u78f0\0\u7946"+ + "\0\u799c\0\u79f2\0\u7a48\0\u7a9e\0\u7af4\0\u7b4a\0\u7ba0\0\u7bf6"+ + "\0\u7c4c\0\u7ca2\0\u7cf8\0\u7d4e\0\u7da4\0\u7dfa\0\u7e50\0\u7ea6"+ + "\0\u7efc\0\u7f52\0\u7fa8\0\u7ffe\0\u8054\0\u80aa\0\u8100\0\u8156"+ + "\0\u81ac\0\u8202\0\u8258\0\u82ae\0\u8304\0\u835a\0\u83b0\0\u8406"+ + "\0\u845c\0\u84b2\0\u8508\0\u855e\0\u85b4\0\u860a\0\u8660\0\u86b6"+ + "\0\u870c\0\u8762\0\u87b8\0\u880e\0\u8864\0\u88ba\0\u8910\0\u8966"+ + "\0\u89bc\0\u8a12\0\u8a68\0\u8abe\0\u8b14\0\u8b6a\0\u8bc0\0\u8c16"+ + "\0\u8c6c\0\u8cc2\0\u8d18\0\u8d6e\0\u8dc4\0\u8e1a\0\u8e70\0\u8ec6"+ + "\0\u8f1c\0\u8f72\0\u8fc8\0\u901e\0\u9074\0\u90ca\0\u9120\0\u9176"+ + "\0\u91cc\0\u9222\0\u9278\0\u92ce\0\u9324\0\u937a\0\u93d0\0\u9426"+ + "\0\u947c\0\u94d2\0\u9528\0\u957e\0\u95d4\0\u962a\0\u9680\0\u96d6"+ + "\0\u972c\0\u9782\0\u97d8\0\u982e\0\u9884\0\u98da\0\u9930\0\u9986"+ + "\0\u99dc\0\u9a32\0\u9a88\0\u9ade\0\u9b34\0\u9b8a\0\u9be0\0\u9c36"+ + "\0\u9c8c\0\u9ce2\0\u9d38\0\u9d8e\0\u9de4\0\u9e3a\0\u9e90\0\u9ee6"+ + "\0\u9f3c\0\u9f92\0\u9fe8\0\ua03e\0\ua094\0\ua0ea\0\ua140\0\ua196"+ + "\0\ua1ec\0\ua242\0\ua298\0\ua2ee\0\ua344\0\ua39a\0\u05b6\0\ua3f0"+ + "\0\ua446\0\u05b6\0\ua49c\0\u5e66\0\ua4f2\0\ua548\0\ua59e\0\ua5f4"+ + "\0\ua64a\0\ua6a0\0\ua6f6\0\ua74c\0\ua7a2\0\ua7f8\0\ua84e\0\u05b6"+ + "\0\ua8a4\0\ua8fa\0\ua950\0\ua9a6\0\ua9fc\0\uaa52\0\uaaa8\0\u05b6"+ + "\0\uaafe\0\uab54\0\uabaa\0\uac00\0\uac56\0\uacac\0\uad02\0\uad58"+ + "\0\uadae\0\uae04\0\uae5a\0\uaeb0\0\uaf06\0\u02b0\0\uaf5c\0\uafb2"+ + "\0\ub008\0\ub05e\0\ub0b4\0\ub10a\0\ub160\0\ub1b6\0\ub20c\0\ub262"+ + "\0\ub2b8\0\ub30e\0\u02b0\0\ub364\0\ub3ba\0\ub410\0\ub466\0\ub4bc"+ + "\0\ub512\0\ub568\0\ub5be\0\ub614\0\ub66a\0\ub6c0\0\ub716\0\ub76c"+ + "\0\ub7c2\0\ub818\0\ub86e\0\ub8c4\0\ub91a\0\ub970\0\ub9c6\0\uba1c"+ + "\0\uba72\0\ubac8\0\ubb1e\0\ubb74\0\ubbca\0\ubc20\0\ubc76\0\ubccc"+ + "\0\ubd22\0\ubd78\0\ubdce\0\ube24\0\ube7a\0\ubed0\0\ubf26\0\ubf7c"+ + "\0\ubfd2\0\uc028\0\uc07e\0\uc0d4\0\uc12a\0\uc180\0\uc1d6\0\uc22c"+ + "\0\uc282\0\uc2d8\0\uc32e\0\uc384\0\uc3da\0\uc430\0\uc486\0\uc4dc"+ + "\0\uc532\0\uc588\0\uc5de\0\uc634\0\uc68a\0\uc6e0\0\uc736\0\uc78c"+ + "\0\uc7e2\0\uc838\0\uc88e\0\uc8e4\0\uc93a\0\uc990\0\uc9e6\0\uca3c"+ + "\0\uca92\0\ucae8\0\ucb3e\0\ucb94\0\ucbea\0\ucc40\0\ucc96\0\uccec"+ + "\0\ucd42\0\ucd98\0\ucdee\0\uce44\0\uce9a\0\ucef0\0\ucf46\0\ucf9c"+ + "\0\ucff2\0\ud048\0\ud09e\0\ud0f4\0\ud14a\0\ud1a0\0\ud1f6\0\ud24c"+ + "\0\ud2a2\0\ud2f8\0\ud34e\0\ud3a4\0\ud3fa\0\ud450\0\ud4a6\0\ud4fc"+ + "\0\ud552\0\ud5a8\0\ud5fe\0\ud654\0\ud6aa\0\ud700\0\ud756\0\ud7ac"+ + "\0\ud802\0\ud858\0\ud8ae\0\ud904\0\ud95a\0\ud9b0\0\uda06\0\uda5c"+ + "\0\udab2\0\udb08\0\udb5e\0\udbb4\0\udc0a\0\udc60\0\udcb6\0\udd0c"+ + "\0\udd62\0\uddb8\0\ude0e\0\ude64\0\udeba\0\udf10\0\udf66\0\udfbc"+ + "\0\ue012\0\ue068\0\ue0be\0\ue114\0\ue16a\0\ue1c0\0\ue216\0\ue26c"+ + "\0\ue2c2\0\u05b6\0\ue318\0\ue36e\0\ue3c4\0\ue41a\0\ue470\0\ue4c6"+ + "\0\ue51c\0\ue572\0\ue5c8\0\ue61e\0\ue674\0\ue6ca\0\u05b6\0\ue720"+ + "\0\ue776\0\ue7cc\0\ue822\0\ue878\0\ue8ce\0\ue924\0\ue97a\0\ue9d0"+ + "\0\uea26\0\uea7c\0\uead2\0\ueb28\0\ueb7e\0\uebd4\0\uec2a\0\uec80"+ + "\0\uecd6\0\ued2c\0\ued82\0\uedd8\0\uee2e\0\uee84\0\ueeda\0\uef30"+ + "\0\uef86\0\uefdc\0\uf032\0\uf088\0\uf0de\0\uf134\0\uf18a\0\uf1e0"+ + "\0\uf236\0\uf28c\0\uf2e2\0\uf338\0\uf38e\0\uf3e4\0\uf43a\0\uf490"+ + "\0\uf4e6\0\uf53c\0\uf592\0\uf5e8\0\uf63e\0\uf694\0\uf6ea\0\uf740"+ + "\0\uf796\0\u6e30\0\uf7ec\0\uf842\0\uf898\0\uf8ee\0\uf944\0\uf99a"+ + "\0\uf9f0\0\ufa46\0\ufa9c\0\ufaf2\0\ufb48\0\ufb9e\0\ufbf4\0\ufc4a"+ + "\0\ufca0\0\ufcf6\0\ufd4c\0\ufda2\0\ufdf8\0\ufe4e\0\ufea4\0\ufefa"+ + "\0\uff50\0\uffa6\0\ufffc\1\122\1\250\1\376\1\u0154\1\u01aa"+ + "\1\u0200\1\u0256\1\u02ac\1\u0302\1\u0358\1\u03ae\1\u0404\1\u045a"+ + "\1\u04b0\1\u0506\1\u055c\1\u05b2\1\u0608\1\u065e\1\u06b4\1\u070a"+ + "\1\u0760\1\u07b6\1\u080c\1\u0862\1\u08b8\1\u090e\1\u0964\1\u09ba"+ + "\1\u0a10\1\u0a66\1\u0abc\1\u0b12\1\u0b68\1\u0bbe\1\u0c14\1\u0c6a"+ + "\1\u0cc0\1\u0d16\1\u0d6c\1\u0dc2\1\u0e18\1\u0e6e\1\u0ec4\1\u0f1a"+ + "\1\u0f70\1\u0fc6\1\u101c\1\u1072\1\u10c8\1\u111e\1\u1174\1\u11ca"+ + "\1\u1220\1\u1276\1\u12cc\1\u1322\1\u1378\1\u13ce\1\u1424\1\u147a"+ + "\1\u14d0\1\u1526\1\u157c\1\u15d2\1\u1628\1\u167e\1\u16d4\1\u172a"+ + "\1\u1780\1\u17d6\1\u182c\1\u1882\1\u18d8\1\u192e\1\u1984\1\u19da"+ + "\1\u1a30\1\u1a86\1\u1adc\1\u1b32\1\u1b88\1\u1bde\1\u1c34\1\u1c8a"+ + "\0\udd62\1\u1ce0\0\ude64\1\u1d36\1\u1d8c\1\u1de2\1\u1e38\1\u1e8e"+ + "\1\u1ee4\1\u1f3a\1\u1f90\1\u1fe6\1\u203c\1\u2092\1\u20e8\1\u213e"+ + "\1\u2194\1\u21ea\1\u2240\1\u2296\1\u22ec\1\u2342\1\u2398\1\u23ee"+ + "\1\u2444\1\u249a\1\u24f0\0\ue674\1\u2546\1\u259c\1\u25f2\1\u2648"+ + "\1\u269e\1\u26f4\1\u274a\1\u27a0\1\u27f6\1\u284c\1\u28a2\1\u28f8"+ + "\1\u294e\1\u29a4\1\u29fa\1\u2a50\1\u2aa6\1\u2afc\1\u2b52\1\u2ba8"+ + "\1\u2bfe\1\u2c54\1\u2caa\1\u2d00\1\u2d56\1\u2dac\0\u3bcc\1\u2e02"+ + "\1\u2e58\1\u2eae\1\u2f04\1\u2f5a\1\u2fb0\1\u3006\1\u305c\1\u30b2"+ + "\1\u3108\1\u315e\1\u31b4\1\u320a\1\u3260\1\u32b6\1\u330c\1\u3362"+ + "\1\u33b8\1\u340e\1\u3464\1\u34ba\1\u3510\1\u3566\1\u35bc\0\u02b0"+ + "\1\u3612\1\u3668\1\u36be\1\u3714\1\u376a\1\u37c0\1\u3816\1\u386c"+ + "\1\u38c2\1\u3918\1\u396e\1\u39c4\1\u3a1a\1\u3a70\1\u3ac6\1\u3b1c"+ + "\1\u3b72\1\u3bc8\1\u3c1e\1\u3c74\1\u3cca\1\u3d20\1\u3d76\1\u3dcc"+ + "\1\u3e22\1\u3e78\1\u3ece\1\u3f24\1\u3f7a\1\u3fd0\1\u4026\1\u407c"+ + "\1\u40d2\1\u4128\1\u417e\1\u41d4\1\u422a\1\u4280\1\u42d6\1\u432c"+ + "\1\u4382\1\u43d8\1\u442e\1\u4484\1\u44da\1\u4530\1\u4586\1\u45dc"+ + "\1\u4632\1\u4688\1\u46de\1\u4734\1\u478a\1\u47e0\1\u4836\1\u488c"+ + "\1\u48e2\1\u4938\1\u498e\1\u49e4\1\u4a3a\1\u4a90\1\u4ae6\1\u4b3c"+ + "\1\u4b92\1\u4be8\1\u4c3e\1\u4c94\1\u4cea\1\u4d40\1\u4d96\1\u4dec"+ + "\1\u4e42\1\u4e98\1\u4eee\1\u4f44\1\u4f9a\1\u4ff0\1\u5046\1\u509c"+ + "\1\u50f2\1\u5148\1\u519e\1\u51f4\1\u524a\1\u52a0\1\u52f6\1\u534c"+ + "\1\u53a2\1\u53f8\1\u544e\1\u54a4\1\u54fa\1\u5550\1\u55a6\1\u55fc"+ + "\1\u5652\1\u56a8\1\u56fe\1\u5754\1\u57aa\1\u5800\1\u5856\1\u58ac"+ + "\1\u5902\1\u5958\1\u59ae\1\u5a04\1\u5a5a\1\u5ab0\1\u5b06\1\u5b5c"+ + "\1\u5bb2\1\u5c08\1\u5c5e\1\u5cb4\1\u5d0a\1\u5d60\1\u5db6\1\u5e0c"+ + "\1\u5e62\1\u5eb8\1\u5f0e\1\u5f64\1\u5fba\1\u6010\1\u6066\1\u60bc"+ + "\1\u6112\1\u6168\1\u61be\1\u6214\1\u626a\1\u62c0\1\u6316\1\u636c"+ + "\1\u63c2\1\u6418\1\u646e\1\u64c4\1\u651a\1\u6570\1\u65c6\1\u661c"+ + "\1\u6672\1\u66c8\1\u671e\1\u6774\1\u67ca\1\u6820\1\u6876\1\u68cc"+ + "\1\u6922\1\u6978\1\u69ce\1\u6a24\1\u6a7a\1\u6ad0\1\u6b26\1\u6b7c"+ + "\1\u6bd2\1\u6c28\1\u6c7e\1\u6cd4\1\u6d2a\1\u6d80\1\u6dd6\1\u6e2c"+ + "\1\u6e82\1\u6ed8\1\u6f2e\1\u6f84\1\u6fda\1\u7030\1\u7086\1\u70dc"+ + "\1\u7132\1\u7188\1\u71de\1\u7234\1\u728a\1\u72e0\1\u7336\1\u738c"+ + "\1\u73e2\1\u7438\1\u748e\1\u74e4\1\u753a\1\u7590\1\u75e6\1\u763c"+ + "\1\u7692\1\u76e8\1\u773e\1\u7794\1\u77ea\1\u7840\1\u7896\1\u78ec"+ + "\1\u7942\1\u7998\1\u79ee\1\u7a44\1\u7a9a\1\u7af0\1\u7b46\1\u7b9c"+ + "\1\u7bf2\1\u7c48\1\u7c9e\1\u7cf4\1\u7d4a\1\u7da0\1\u7df6\1\u7e4c"+ + "\1\u7ea2\1\u7ef8\1\u7f4e\1\u7fa4\1\u7ffa\1\u4f9a\1\u8050\1\u80a6"+ + "\1\u80fc\1\u8152\1\u81a8\1\u81fe\1\u8254\1\u82aa\1\u8300\1\u8356"+ + "\1\u83ac\1\u8402\1\u8458\1\u84ae\1\u8504\1\u855a\1\u85b0\1\u8606"+ + "\1\u865c\1\u86b2\1\u8708\1\u875e\1\u87b4\1\u880a\1\u8860\1\u88b6"+ + "\1\u890c\1\u8962\1\u89b8\1\u8a0e\1\u8a64\1\u8aba\1\u8b10\1\u8b66"+ + "\1\u8bbc\1\u8c12\1\u8c68\1\u8cbe\1\u8d14\1\u8d6a\1\u8dc0\1\u8e16"+ + "\1\u8e6c\1\u8ec2\1\u8f18\1\u8f6e\1\u8fc4\1\u901a\1\u9070\1\u90c6"+ + "\1\u911c\1\u9172\1\u91c8\1\u921e\1\u9274\1\u92ca\1\u9320\1\u9376"+ + "\1\u93cc\1\u9422\1\u9478\1\u94ce\1\u9524\1\u957a\1\u95d0\1\u9626"+ + "\1\u967c\1\u96d2\1\u9728\1\u977e\1\u97d4\1\u982a\1\u9880\1\u98d6"+ + "\1\u992c\1\u9982\1\u99d8\1\u9a2e\1\u9a84\1\u9ada\1\u9b30\1\u9b86"+ + "\1\u9bdc\1\u9c32\1\u9c88\1\u9cde\1\u9d34\1\u9d8a\1\u9de0\1\u9e36"+ + "\1\u9e8c\1\u9ee2\1\u9f38\1\u9f8e\1\u9fe4\1\ua03a\1\ua090\1\ua0e6"+ + "\1\ua13c\1\ua192\1\ua1e8\1\ua23e\1\ua294\1\ua2ea\1\ua340\1\ua396"+ + "\1\ua3ec\1\ua442\1\ua498\1\ua4ee\1\ua544\1\ua59a\1\ua5f0\1\ua646"+ + "\1\ua69c\1\ua6f2\1\ua748\1\ua79e\1\ua7f4\1\ua84a\1\ua8a0\1\ua8f6"+ + "\1\ua94c\1\ua9a2\1\ua9f8\1\uaa4e\1\uaaa4\1\uaafa\1\uab50\1\uaba6"+ + "\1\uabfc\1\uac52\1\uaca8\1\uacfe\1\uad54\1\uadaa\1\uae00\1\uae56"+ + "\1\uaeac\1\uaf02\1\uaf58\1\uafae\1\ub004\1\ub05a\1\ub0b0\1\ub106"+ + "\1\ub15c\1\ub1b2\1\ub208\1\ub25e\1\ub2b4\1\ub30a\1\ub360\1\ub3b6"+ + "\1\ub40c\1\ub462\1\ub4b8\1\ub50e\1\ub564\1\ub5ba\1\ub610\1\ub666"+ + "\1\ub6bc\1\ub712\1\ub768\1\ub7be\1\ub814\1\ub86a\1\ub8c0\1\ub916"+ + "\1\ub96c\1\ub9c2\1\uba18\1\uba6e\1\ubac4\1\ubb1a\1\ubb70\1\ubbc6"+ + "\1\ubc1c\1\ubc72\1\ubcc8\1\ubd1e\1\ubd74\1\ubdca\1\ube20\1\ube76"+ + "\1\ubecc\1\ubf22\1\ubf78\1\ubfce\1\uc024\1\uc07a\1\uc0d0\1\uc126"+ + "\1\uc17c\1\uc1d2\1\uc228\1\uc27e\1\uc2d4\1\uc32a\1\uc380\1\uc3d6"+ + "\1\uc42c\1\uc482\1\uc4d8\1\uc52e\1\uc584\1\uc5da\1\uc630\1\uc686"+ + "\1\uc6dc\1\uc732\1\uc788\1\uc7de\1\uc834\1\uc88a\1\uc8e0\1\uc3d6"+ + "\1\uc936\1\uc98c\1\uc9e2\1\uca38\1\uca8e\1\ucae4\1\ucb3a\1\ucb90"+ + "\1\ucbe6\1\ucc3c\1\ucc92\1\ucce8\1\ucd3e\1\ucd94\1\ucdea\1\uce40"+ + "\1\uce96\1\uceec\1\ucf42\1\ucf98\1\ucfee\1\ud044\1\ud09a\1\ud0f0"+ + "\1\ud146\1\ud19c\1\ud1f2\1\ud248\1\ud29e\1\ud2f4\1\ud34a\1\ud3a0"+ + "\1\ud3f6\1\ud44c\1\ud4a2\1\ud4f8\1\ud54e\1\ud5a4\1\ud5fa\1\ud650"+ + "\1\ud6a6\1\ud6fc\1\ud752\1\ud7a8\1\ud7fe\1\ud854\1\ud8aa\1\ud900"+ + "\1\ud956\0\u05b6\1\ud9ac\1\uda02\1\uda58\1\udaae\1\udb04\1\udb5a"+ + "\1\udbb0\1\udc06\1\udc5c\1\udcb2\1\udd08\1\udd5e\1\uddb4\1\ude0a"+ + "\1\ude60\1\udeb6\1\udf0c\1\udf62\1\udfb8\1\ue00e\1\ue064\1\ue0ba"+ + "\1\ue110\1\ue166\1\ue1bc\1\ue212\1\ue268\1\ue2be\1\ue314\1\ue36a"+ + "\1\ue3c0\1\ue416\1\ue46c\1\ue4c2\1\ue518\1\u9cde\1\ue56e\1\ue5c4"+ + "\1\ue61a\1\ue670\1\ue6c6\1\ue71c\1\ue772\1\ue7c8\1\ue81e\1\ue874"+ + "\1\ue8ca\1\ue920\1\ue976\1\ue9cc\1\uea22\1\uea78\1\ueace\1\ueb24"+ + "\1\ueb7a\1\uebd0\1\uec26\1\uec7c\1\uecd2\1\ued28\1\ued7e\1\uedd4"+ + "\1\uee2a\1\uee80\1\ueed6\1\uef2c\1\uef82\1\uefd8\1\uf02e\1\uf084"+ + "\1\uf0da\1\uf130\1\uf186\1\uf1dc\1\uf232\1\uf288\1\uf2de\1\uf334"+ + "\1\uf38a\1\uf3e0\1\uf436\1\uf48c\1\uf4e2\1\uf538\1\uf58e\1\uf5e4"+ + "\1\uf63a\1\uf690\1\uf6e6\1\uf73c\1\uf792\1\uf7e8\1\uf83e\1\uf894"+ + "\1\uf8ea\1\uf940\1\uf996\1\uf9ec\1\ufa42\1\ufa98\1\ufaee\1\ufb44"+ + "\1\ufb9a\1\ufbf0\1\ufc46\1\ufc9c\1\ufcf2\1\ufd48\1\ufd9e\1\ufdf4"+ + "\1\ufe4a\1\ufea0\1\ufef6\1\uff4c\1\uffa2\1\ufff8\2\116\2\244"+ + "\2\372\2\u0150\2\u01a6\2\u01fc\2\u0252\2\u02a8\2\u02fe\2\u0354"+ + "\2\u03aa\2\u0400\2\u0456\2\u04ac\2\u0502\2\u0558\2\u05ae\2\u0604"+ + "\2\u065a\2\u06b0\2\u0706\2\u075c\2\u07b2\2\u0808\2\u085e\2\u08b4"+ + "\2\u090a\2\u0960\2\u09b6\2\u0a0c\2\u0a62\2\u0ab8\2\u0b0e\2\u0b64"+ + "\2\u0bba\2\u0c10\2\u0c66\2\u0cbc\2\u0d12\2\u0d68\2\u0dbe\2\u0e14"+ + "\2\u0e6a\2\u0ec0\2\u0f16\2\u0f6c\2\u0fc2\2\u1018\2\u106e\2\u10c4"+ + "\2\u111a\2\u1170\2\u11c6\2\u121c\2\u1272\2\u12c8\2\u131e\2\u1374"+ + "\2\u13ca\2\u1420\2\u1476\2\u14cc\2\u1522\2\u1578\2\u15ce\2\u1624"+ + "\2\u167a\2\u16d0\2\u1726\2\u177c\2\u17d2\2\u1828\2\u187e\2\u18d4"+ + "\2\u192a\2\u1980\2\u19d6\2\u1a2c\2\u1a82\2\u1ad8\2\u1b2e\2\u1b84"+ + "\2\u1bda\2\u1c30\2\u1c86\2\u1cdc\2\u1d32\2\u1d88\2\u1dde\2\u1e34"+ + "\2\u1e8a\2\u1ee0\2\u1f36\2\u1f8c\2\u1fe2\2\u2038\2\u208e\2\u20e4"+ + "\2\u213a\2\u2190\2\u21e6\2\u223c\2\u2292\2\u22e8\2\u233e\2\u2394"+ + "\2\u23ea\2\u2440\2\u2496\2\u24ec\2\u2542\2\u2598\2\u25ee\2\u2644"+ + "\2\u269a\2\u26f0\2\u2746\2\u279c\2\u27f2\1\ua396\2\u2848\2\u289e"+ + "\2\u28f4\2\u294a\2\u29a0\2\u29f6\2\u2a4c\2\u2aa2\2\u2af8\2\u2b4e"+ + "\2\u2ba4\2\u2bfa\2\u2c50\2\u2ca6\2\u2cfc\2\u2d52\2\u2da8\2\u2dfe"+ + "\2\u2e54\2\u2eaa\2\u2f00\2\u2f56\2\u2fac\2\u3002\2\u3058\2\u30ae"+ + "\2\u3104\2\u315a\2\u31b0\2\u3206\2\u325c\2\u32b2\2\u3308\2\u335e"+ + "\2\u33b4\2\u340a\2\u3460\2\u34b6\2\u350c\2\u3562\2\u35b8\2\u360e"+ + "\2\u3664\2\u36ba\2\u3710\2\u3766\2\u37bc\2\u3812\2\u3868\2\u38be"+ + "\2\u3914\2\u396a\2\u39c0\2\u3a16\2\u3a6c\2\u3ac2\2\u3b18\2\u3b6e"+ + "\2\u3bc4\2\u3c1a\2\u3c70\2\u3cc6\2\u3d1c\2\u3d72\2\u3dc8\2\u3e1e"+ + "\2\u3e74\2\u3eca\2\u3f20\2\u3f76\2\u3fcc\2\u4022\2\u4078\2\u40ce"+ + "\2\u4124\2\u417a\2\u41d0\2\u4226\2\u427c\2\u42d2\2\u4328\2\u437e"+ + "\2\u43d4\2\u442a\2\u4480\2\u44d6\2\u452c\2\u4582\2\u45d8\2\u462e"+ + "\2\u4684\2\u46da\2\u4730\2\u4786\2\u47dc\2\u4832\2\u4888\2\u48de"+ + "\2\u4934\2\u498a\2\u49e0\2\u4a36\2\u4a8c\2\u4ae2\2\u4b38\2\u4b8e"+ + "\2\u4be4\2\u4c3a\2\u4c90\2\u4ce6\2\u4d3c\2\u4d92\2\u4de8\2\u4e3e"+ + "\2\u4e94\2\u4eea\2\u4f40\2\u4f96\2\u4fec\2\u5042\2\u5098\2\u50ee"+ + "\2\u5144\2\u519a\2\u51f0\2\u5246\2\u529c\2\u52f2\2\u5348\2\u539e"+ + "\2\u53f4\2\u544a\2\u54a0\2\u54f6\2\u554c\2\u55a2\2\u55f8\2\u564e"+ + "\2\u56a4\2\u56fa\2\u5750\2\u57a6\2\u57fc\2\u5852\2\u58a8\2\u58fe"+ + "\2\u5954\2\u59aa\2\u5a00\2\u5a56\2\u5aac\2\u5b02\2\u5b58\2\u5bae"+ + "\2\u5c04\2\u5c5a\2\u5cb0\2\u5d06\2\u5d5c\2\u5db2\2\u5e08\2\u5e5e"+ + "\2\u5eb4\2\u5f0a\2\u5f60\2\u5fb6\2\u600c\2\u6062\2\u60b8\2\u610e"+ + "\2\u6164\2\u61ba\2\u6210\2\u6266\2\u62bc\2\u6312\2\u6368\2\u63be"+ + "\2\u6414\2\u646a\2\u64c0\2\u6516\2\u656c\2\u65c2\2\u6618\2\u666e"+ + "\2\u66c4\2\u671a\2\u6770\2\u67c6\2\u681c\2\u6872\2\u68c8\2\u691e"+ + "\2\u6974\2\u69ca\2\u6a20\2\u6a76\2\u6acc\2\u6b22\2\u6b78\2\u6bce"+ + "\2\u6c24\2\u6c7a\2\u6cd0\2\u6d26\2\u6d7c\2\u6dd2\2\u6e28\2\u6e7e"+ + "\2\u6ed4\2\u6f2a\2\u6f80\2\u6fd6\2\u702c\2\u7082\2\u70d8\2\u712e"+ + "\2\u7184\2\u71da\2\u7230\2\u7286\2\u72dc\2\u7332\2\u7388\2\u73de"+ + "\2\u7434\2\u748a\2\u74e0\2\u7536\2\u758c\2\u75e2\2\u7638\2\u768e"+ + "\2\u76e4\2\u773a\2\u7790\2\u77e6\2\u783c\2\u7892\2\u78e8\2\u793e"+ + "\2\u7994\2\u79ea\2\u7a40\2\u7a96\2\u7aec\2\u7b42\2\u7b98\2\u7bee"+ + "\2\u7c44\2\u7c9a\2\u7cf0\2\u7d46\2\u7d9c\2\u7df2\2\u7e48\2\u7e9e"+ + "\2\u7ef4\2\u7f4a\2\u7fa0\2\u7ff6\2\u804c\2\u80a2\2\u80f8\2\u814e"+ + "\2\u81a4\2\u81fa\2\u8250\2\u82a6\2\u82fc\2\u8352\2\u83a8\2\u83fe"+ + "\2\u8454\2\u84aa\2\u8500\2\u8556\2\u85ac\2\u8602\2\u8658\2\u86ae"+ + "\2\u8704\2\u875a\2\u87b0\2\u8806\2\u885c\2\u88b2\2\u8908\2\u895e"+ + "\2\u89b4\2\u8a0a\2\u8a60\2\u8ab6\2\u8b0c\2\u8b62\2\u8bb8\2\u8c0e"+ + "\2\u8c64\2\u8cba\2\u8d10\2\u8d66\2\u8dbc\2\u8e12\2\u8e68\2\u8ebe"+ + "\2\u8f14\2\u8f6a\2\u8fc0\2\u9016\2\u906c\2\u90c2\2\u9118\2\u916e"+ + "\2\u91c4\2\u921a\2\u9270\2\u92c6\2\u931c\2\u9372\2\u93c8\2\u941e"+ + "\2\u9474\2\u94ca\2\u9520\2\u9576\2\u95cc\2\u9622\2\u9678\2\u96ce"+ + "\2\u9724\2\u977a\2\u97d0\2\u9826\2\u987c\2\u98d2\2\u9928\2\u997e"+ + "\2\u99d4\2\u9a2a\2\u9a80\2\u9ad6\2\u9b2c\2\u9b82\2\u9bd8\2\u9c2e"+ + "\2\u9c84\2\u9cda\2\u9d30\2\u9d86\2\u9ddc\2\u9e32\2\u9e88\2\u9ede"+ + "\2\u9f34\2\u9f8a\2\u9fe0\2\ua036\2\ua08c\2\ua0e2\2\ua138\2\ua18e"+ + "\2\ua1e4\2\ua23a"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[2058]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\10\2\11\1\12\1\13\1\12\1\14\1\12\1\15"+ + "\1\16\1\10\1\17\1\20\1\21\1\22\1\10\1\11"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\11"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\1\42\1\43\1\44\1\45\1\46\1\47\1\50\1\51"+ + "\1\26\1\52\1\26\1\53\1\54\1\53\1\55\1\11"+ + "\1\56\1\57\1\60\1\11\1\61\1\62\1\63\1\64"+ + "\1\65\1\66\1\11\1\67\1\11\2\45\1\70\1\11"+ + "\1\71\1\72\1\11\1\73\1\74\1\75\1\76\1\77"+ + "\1\100\1\101\1\102\1\11\1\103\1\104\1\105\1\106"+ + "\2\12\2\11\15\107\1\110\3\107\1\111\2\107\1\112"+ + "\32\107\1\113\10\107\1\114\35\107\15\115\1\116\3\115"+ + "\1\117\2\115\1\120\22\115\1\121\7\115\1\122\10\115"+ + "\1\123\5\115\1\124\1\115\1\125\25\115\15\126\1\127"+ + "\3\126\1\130\35\126\1\131\10\126\1\132\35\126\12\133"+ + "\1\134\1\135\4\133\1\136\1\137\104\133\10\140\1\141"+ + "\1\140\1\142\6\140\1\143\104\140\12\133\1\144\1\145"+ + "\4\133\1\136\1\146\104\133\10\10\1\0\2\10\1\0"+ + "\2\10\1\0\2\10\4\0\6\10\2\0\6\10\14\0"+ + "\17\10\2\0\27\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\2\150\1\151\3\12"+ + "\1\150\1\12\1\0\2\150\1\0\1\150\1\152\1\0"+ + "\2\150\4\0\1\153\3\150\1\152\1\154\1\0\1\155"+ + "\2\150\1\154\1\150\1\153\1\150\14\0\2\150\1\152"+ + "\5\150\1\152\6\150\2\0\22\150\2\12\4\150\1\156"+ + "\1\157\2\160\1\150\1\160\1\0\2\150\1\0\1\150"+ + "\1\152\1\0\2\150\4\0\1\153\2\161\1\162\1\152"+ + "\1\154\1\0\1\155\2\150\1\154\1\150\1\153\1\150"+ + "\14\0\2\150\1\152\2\150\1\162\2\150\1\152\6\150"+ + "\2\0\22\150\2\160\2\150\1\10\7\11\1\0\1\163"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\164\1\165\1\11\14\0\1\166\1\167"+ + "\15\11\2\0\1\10\25\11\10\170\1\171\1\170\1\172"+ + "\6\170\1\173\104\170\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\174\14\0\17\11\2\0\1\10\25\11\13\0"+ + "\1\175\112\0\1\10\7\11\1\0\1\176\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\177\1\200\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\201\1\202"+ + "\1\11\14\0\1\11\1\203\4\11\1\204\10\11\2\0"+ + "\1\10\25\11\150\0\1\24\103\0\12\205\1\206\10\205"+ + "\1\207\1\210\23\205\1\211\55\205\50\0\1\53\55\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\212\4\11\1\213\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\214\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\215\2\11\14\0"+ + "\1\11\1\216\4\11\1\217\5\11\1\220\2\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\221\4\11\14\0\1\11\1\222\12\11\1\223\2\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\224\1\11\14\0\1\11\1\225\4\11\1\226"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\227\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\230\4\11\14\0\5\11\1\231"+ + "\1\11\1\232\2\11\1\233\4\11\2\0\1\10\13\11"+ + "\1\234\11\11\33\0\1\53\14\0\1\53\60\0\3\155"+ + "\1\0\1\155\112\0\2\155\2\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\235\1\236\3\11\14\0\1\237"+ + "\1\240\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\241\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\242\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\243\1\244\1\11\14\0\5\11\1\245\4\11"+ + "\1\246\4\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\247\1\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\250\3\11\2\0\5\11\1\251\14\0"+ + "\2\11\1\252\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\253\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\254\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\255\1\11\1\256\1\11\1\257\1\11\14\0\1\260"+ + "\2\11\1\261\5\11\1\262\2\11\1\263\2\11\2\0"+ + "\1\10\25\11\23\0\1\264\150\0\1\53\1\0\1\53"+ + "\124\0\1\265\1\53\120\0\1\53\4\0\1\53\125\0"+ + "\1\53\1\0\1\266\123\0\1\53\4\0\1\53\50\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\267\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\270\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\271\3\11\14\0\1\11\1\272"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\273"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\274\1\11\1\275\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\276\1\277\1\11\14\0\1\300\1\301\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\302\1\303\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\304\4\11\1\305\14\0\2\11\1\306\4\11"+ + "\1\307\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\310\3\11\14\0\6\11\1\311"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\312"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\313\1\314\2\11\14\0\1\11\1\315"+ + "\4\11\1\316\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\317\5\11\1\320"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\321\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\322"+ + "\1\323\3\11\14\0\1\11\1\324\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\325\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\326"+ + "\1\327\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\2\330\3\10\1\330\1\10\1\0\1\330\1\10\1\0"+ + "\2\330\1\0\1\10\1\330\4\0\6\330\2\0\6\330"+ + "\14\0\17\330\2\0\1\10\21\330\2\10\2\330\1\10"+ + "\7\11\1\0\1\331\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\2\11\1\332\3\11\2\0\1\11\1\333"+ + "\3\11\1\334\14\0\3\11\1\335\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\336\1\11"+ + "\1\337\3\11\14\0\1\340\1\341\1\11\1\342\1\343"+ + "\1\11\1\344\5\11\1\345\2\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\346\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\347\3\11"+ + "\1\350\1\11\14\0\2\11\1\351\14\11\2\0\1\10"+ + "\13\11\1\352\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\353\4\11\14\0\1\354\1\355\4\11\1\356"+ + "\5\11\1\357\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\360\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\5\11\1\361\1\362\16\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\363\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\364\3\11\14\0\1\11\1\365\4\11\1\366\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\367\2\11\14\0\6\11\1\370\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\371\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\372\1\373\2\11\14\0\1\11\1\374\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\375\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\2\11\1\376\3\11"+ + "\2\0\6\11\14\0\3\11\1\377\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0100\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0101"+ + "\1\11\1\u0102\2\11\14\0\6\11\1\u0103\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0104\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0105\1\u0106\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\u0107\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\15\107\1\0\3\107\1\0\2\107\1\0\32\107\1\0"+ + "\10\107\1\0\35\107\35\0\1\u0108\27\0\1\u0109\63\0"+ + "\1\u010a\137\0\1\u010b\160\0\1\u010c\35\0\15\115\1\0"+ + "\3\115\1\0\2\115\1\0\22\115\1\0\7\115\1\0"+ + "\10\115\1\0\5\115\1\0\1\115\1\0\25\115\35\0"+ + "\1\u010d\27\0\1\u010e\63\0\1\u010f\103\0\1\u0110\4\0"+ + "\1\u0110\2\0\1\u0110\2\0\2\u0110\5\0\1\u0111\1\0"+ + "\6\u0110\2\0\6\u0110\7\0\1\u0112\4\0\17\u0110\3\0"+ + "\21\u0110\2\0\2\u0110\35\0\1\u0113\160\0\1\u0114\135\0"+ + "\1\u0115\62\0\1\u0116\1\u0117\1\u0118\1\u0119\1\0\1\u011a"+ + "\15\0\1\u011b\1\u011c\1\u011d\1\u011e\1\0\1\u011f\3\0"+ + "\1\u0120\34\0\15\126\1\0\3\126\1\0\35\126\1\0"+ + "\10\126\1\0\35\126\35\0\1\u0121\27\0\1\u0122\75\0"+ + "\1\u0123\160\0\1\u0124\35\0\12\133\2\0\4\133\2\0"+ + "\104\133\21\u0125\1\0\104\u0125\13\0\1\u0126\113\0\2\u0127"+ + "\3\0\1\u0127\2\0\1\u0127\2\0\2\u0127\2\0\1\u0127"+ + "\4\0\6\u0127\2\0\6\u0127\14\0\17\u0127\1\u0128\2\0"+ + "\21\u0127\2\0\2\u0127\10\140\1\0\1\140\1\0\6\140"+ + "\1\0\104\140\10\0\1\u0129\115\0\21\u012a\1\0\104\u012a"+ + "\21\u012b\1\0\104\u012b\10\10\1\0\1\u012c\1\10\1\0"+ + "\2\10\1\0\2\10\4\0\6\10\2\0\6\10\14\0"+ + "\17\10\2\0\26\10\10\150\1\0\2\150\1\0\2\150"+ + "\1\0\2\150\4\0\6\150\2\0\6\150\14\0\17\150"+ + "\2\0\30\150\1\151\3\u012d\1\150\1\u012d\1\0\2\150"+ + "\1\0\2\150\1\0\2\150\4\0\6\150\2\0\6\150"+ + "\14\0\17\150\2\0\22\150\2\u012d\5\150\3\u012e\1\150"+ + "\1\u012e\1\0\2\150\1\0\2\150\1\0\2\150\4\0"+ + "\6\150\1\u012f\1\0\6\150\3\0\1\u012f\10\0\17\150"+ + "\2\0\22\150\2\u012e\5\150\3\155\1\150\1\155\1\0"+ + "\2\150\1\0\1\150\1\152\1\0\2\150\4\0\4\150"+ + "\1\152\1\154\2\0\2\150\1\154\3\150\14\0\2\150"+ + "\1\152\5\150\1\152\6\150\2\0\22\150\2\155\4\150"+ + "\1\156\1\150\2\u0130\1\150\1\u0130\1\0\2\150\1\0"+ + "\2\150\1\0\2\150\4\0\6\150\2\0\6\150\14\0"+ + "\17\150\2\0\22\150\2\u0130\5\150\3\157\1\150\1\157"+ + "\1\0\2\150\1\0\1\150\1\152\1\0\2\150\4\0"+ + "\4\150\1\152\1\154\1\0\1\155\2\150\1\154\3\150"+ + "\14\0\2\150\1\152\5\150\1\152\6\150\2\0\22\150"+ + "\2\157\4\150\1\156\1\157\2\160\1\150\1\160\1\0"+ + "\2\150\1\0\1\150\1\152\1\0\2\150\4\0\1\u0131"+ + "\3\150\1\152\1\154\1\0\1\155\2\150\1\154\1\150"+ + "\1\u0131\1\150\14\0\2\150\1\152\5\150\1\152\6\150"+ + "\2\0\22\150\2\160\6\150\2\u0132\2\150\1\0\2\150"+ + "\1\0\2\150\1\0\2\150\4\0\6\150\2\0\6\150"+ + "\14\0\17\150\2\0\31\150\5\u0133\1\0\2\150\1\0"+ + "\1\150\1\u0133\1\0\2\150\4\0\1\150\2\u0133\1\150"+ + "\2\u0133\2\0\2\150\2\u0133\2\150\14\0\2\150\1\u0133"+ + "\1\150\1\u0133\3\150\1\u0133\6\150\2\0\2\150\1\u0133"+ + "\17\150\2\u0133\2\150\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0134\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0135\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0136\2\11\14\0\1\11\1\u0137"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0138\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0139"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u013a\1\11\14\0\7\11\1\u013b\7\11\2\0\1\10"+ + "\25\11\10\170\1\u013c\1\170\1\172\6\170\1\173\104\170"+ + "\10\0\1\u013d\115\0\4\u013e\2\170\1\u013e\1\170\1\u013f"+ + "\1\u0140\4\170\3\u013e\1\0\5\u013e\1\170\5\u013e\2\170"+ + "\63\u013e\2\170\2\u013e\10\173\1\u013c\1\173\1\u0141\113\173"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0142\3\11"+ + "\14\0\6\11\1\u0143\10\11\2\0\1\10\25\11\13\0"+ + "\1\u0144\112\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0145\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\303"+ + "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0146\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0147\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0148\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\303\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0149\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\12\205\1\206\10\205\1\u014a\123\205"+ + "\1\0\104\205\24\0\1\u014b\101\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u014c\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u014d\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u014e\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u014f\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u0150"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0151\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0152\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0153\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0154\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0155\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0156\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0157\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0158\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u0159\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u015a\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u015b\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u015c\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u015d\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u015e"+ + "\5\11\14\0\4\11\1\u015f\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u0160\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0161\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\4\11\1\u0162\1\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u0163\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0164\2\11\14\0"+ + "\14\11\1\303\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0165\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0166\4\11\14\0\6\11\1\u0167\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\2\11\1\u0168\22\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0169\4\11\1\u016a\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u016b\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u016c\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u016d\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u016e\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u016f\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\u0142\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u0170\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\1\11\1\u0171\4\11\2\0"+ + "\5\11\1\u0172\14\0\17\11\2\0\1\10\5\11\1\u0173"+ + "\17\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u0174\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0175\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0176\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0177\1\11\1\u0178"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0179\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\322\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u017a"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u017b\2\11\1\u017c\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u017d\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u017e\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\12\205\1\206\10\205\2\0"+ + "\101\205\50\0\1\53\1\0\1\26\53\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u017f\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u0180\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\11\1\u0181\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0182\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u0183\3\11\2\0\1\u0184\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u0185\4\11\1\u0186\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u0187\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0188\4\11\1\u016d"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0189\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u018a\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u018b\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u018c\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u018d\4\11\1\u018e\14\0\12\11\1\u018f"+ + "\4\11\2\0\1\10\14\11\1\u0190\10\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0191\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u0192\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0193\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\3\11\1\u0194\13\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0195"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\5\11\1\u0196\11\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u0197\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\3\11\1\u0198\21\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0199\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u019a\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u019b\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u019c\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u019d\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u019e\1\11\14\0\6\11\1\u019f\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0180"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u01a0\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u01a1"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u01a2\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u01a3\1\11\1\u01a4\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u01a5\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\330\1\0\1\330"+ + "\1\u01a6\1\0\2\330\1\0\1\10\1\330\4\0\6\330"+ + "\2\0\6\330\14\0\17\330\2\0\1\10\25\330\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u01a7\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u01a8\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u01a9\4\11\14\0"+ + "\6\11\1\u01aa\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u01ab\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u01ac\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u01ad\1\11\1\u01ae"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0142\1\u01af\4\11\14\0\4\11"+ + "\1\u01b0\12\11\2\0\1\10\3\11\1\u01b1\21\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u01b2"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u01b3\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u01b4"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u01b5\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u01b6\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u01b7\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u01b8"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u01b9\4\11\1\u01ba\14\0\1\u01bb\1\11"+ + "\1\u01bc\1\u01bd\1\u01be\5\11\1\u01bf\4\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u01c0"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u01c1\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u01c2\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\5\11\1\u01c3\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u01c4\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u01c5"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u01c6\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u01c7\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u01c8\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u01c9\14\0\4\11\1\u01ca\11\11"+ + "\1\u01cb\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\4\11"+ + "\1\u01cc\1\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\4\11\1\u01cd\20\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u01ce\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u01cf\4\11\14\0\4\11\1\u01d0\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u01d1\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u01d2\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u019d\5\11\14\0\3\11\1\u01d3\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u01d4"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u01d5\1\11\14\0\7\11\1\u01d6"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u01d7\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\12\11\1\u01d8\4\11\2\0\1\10\25\11\1\10\5\11"+ + "\1\u01d9\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u01da\5\11\14\0"+ + "\17\11\2\0\1\10\2\11\1\u01db\22\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u01dc\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u01dd\14\0\17\11\2\0\1\10\14\11\1\u01de\10\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u01df\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u01e0\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u01e1\4\11\1\u01e2\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u01e3"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u01e4\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u01e5"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u01e6\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u01e7\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0198\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\62\0\1\u01e8\104\0"+ + "\1\u01e9\121\0\1\u01ea\160\0\1\u01eb\117\0\1\u01ec\104\0"+ + "\1\u01ed\64\0\52\u0110\1\u0112\53\u0110\1\0\1\u0110\4\0"+ + "\1\u0110\2\0\1\u0110\2\0\2\u0110\7\0\6\u0110\2\0"+ + "\6\u0110\7\0\1\u0112\4\0\17\u0110\3\0\21\u0110\2\0"+ + "\2\u0110\35\0\1\u01ee\160\0\1\u01ef\76\0\1\u01f0\17\0"+ + "\1\u01f1\1\0\1\u01f2\1\0\1\u01f3\3\0\1\u01f4\45\0"+ + "\1\u01f5\45\0\1\u01f6\1\u01f7\104\0\1\u01f8\152\0\1\u01f9"+ + "\52\0\1\u01fa\153\0\1\u01fb\25\0\1\u01fc\67\0\1\u01fd"+ + "\135\0\1\u01fe\126\0\1\u01ff\125\0\1\u0200\101\0\1\u0201"+ + "\150\0\1\u0202\150\0\1\u0203\104\0\1\u0204\121\0\1\u0205"+ + "\160\0\1\u0206\50\0\1\u0207\113\0\7\u0127\1\0\1\u0127"+ + "\1\u0208\1\0\2\u0127\2\0\1\u0127\4\0\6\u0127\2\0"+ + "\6\u0127\14\0\17\u0127\3\0\25\u0127\77\u0209\1\0\26\u0209"+ + "\10\0\1\u020a\115\0\3\10\5\u020b\1\0\2\10\1\0"+ + "\1\10\1\u020b\1\0\2\10\4\0\1\10\2\u020b\1\10"+ + "\2\u020b\2\0\2\10\2\u020b\2\10\14\0\2\10\1\u020b"+ + "\1\10\1\u020b\3\10\1\u020b\6\10\2\0\2\10\1\u020b"+ + "\17\10\2\u020b\2\10\2\150\1\151\3\u012d\1\150\1\u012d"+ + "\1\0\2\150\1\0\2\150\1\0\2\150\4\0\1\153"+ + "\5\150\2\0\4\150\1\153\1\150\14\0\17\150\2\0"+ + "\22\150\2\u012d\5\150\3\u012e\1\150\1\u012e\1\0\2\150"+ + "\1\0\1\150\1\152\1\0\2\150\4\0\4\150\1\152"+ + "\1\150\2\0\6\150\14\0\2\150\1\152\5\150\1\152"+ + "\6\150\2\0\22\150\2\u012e\2\150\3\0\3\u012e\1\0"+ + "\1\u012e\112\0\2\u012e\2\0\2\150\1\156\1\150\2\u0130"+ + "\1\150\1\u0130\1\0\2\150\1\0\2\150\1\0\2\150"+ + "\4\0\1\u0131\5\150\2\0\4\150\1\u0131\1\150\14\0"+ + "\17\150\2\0\22\150\2\u0130\4\150\1\u020c\1\150\2\u0132"+ + "\2\150\1\0\2\150\1\0\2\150\1\0\2\150\4\0"+ + "\6\150\2\0\6\150\14\0\17\150\2\0\30\150\1\u020d"+ + "\5\u0133\1\0\2\150\1\0\1\150\1\u0133\1\0\2\150"+ + "\4\0\1\u0131\2\u0133\1\150\2\u0133\2\0\2\150\2\u0133"+ + "\1\u0131\1\150\14\0\2\150\1\u0133\1\150\1\u0133\3\150"+ + "\1\u0133\6\150\2\0\2\150\1\u0133\17\150\2\u0133\2\150"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u020e\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u020f\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u0210\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0211\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0212\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0213\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0214\14\0"+ + "\4\11\1\u0215\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u0216\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u0217\13\11\2\0\1\10\25\11"+ + "\10\u013e\1\u0218\10\u013e\1\0\107\u013e\5\u0219\1\u0218\4\u013e"+ + "\1\u0219\3\u013e\1\0\4\u013e\2\u0219\1\u013e\2\u0219\4\u013e"+ + "\2\u0219\20\u013e\1\u0219\1\u013e\1\u0219\3\u013e\1\u0219\12\u013e"+ + "\1\u0219\17\u013e\2\u0219\2\u013e\4\0\2\173\1\0\2\173"+ + "\1\u021a\4\173\11\0\1\173\5\0\2\173\63\0\2\173"+ + "\2\0\1\10\7\11\1\0\1\11\1\147\1\0\1\u021b"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\303\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u021c\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0163\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u021d\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u021e\2\11"+ + "\14\0\2\11\1\u021f\14\11\2\0\1\10\25\11\23\0"+ + "\1\u0220\102\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u0221\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0222\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0223\3\11\14\0\16\11\1\u0224\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0225"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\11\1\u0226\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0227\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0228\3\11\1\u0229\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u022a\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u022b\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u022c\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u022d\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u022e"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u022f\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0230\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0231"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0232\1\11\1\u0233\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u0234\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0235"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0236\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0237"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0238\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0239\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u023b\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u023c\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\303\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u023d"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\303\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u023e\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u023f"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\3\11\1\u0240"+ + "\13\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\303\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u0241\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\303\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0242\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\247\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0243\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0244\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0245\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\14\11\1\u0246\2\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\2\11\1\u0247\22\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u022e\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\203"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0248\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0249\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\11\11\1\u024a\13\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u021d\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u024b\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0230\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0188\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u024c"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\15\11\1\u024d"+ + "\7\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\3\11\1\u0142\13\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u024e\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u024f"+ + "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0249\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\11"+ + "\1\u0230\23\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0250"+ + "\5\11\14\0\3\11\1\u0251\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0252\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\12\11\1\u0253\4\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\16\11\1\u0254\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0255\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0167\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u022e\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0256\4\11\1\u0165"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u0190\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0257\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0258\5\11\14\0\3\11"+ + "\1\u0190\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0259\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u025a\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u025b\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u025c\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u025d"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u025e\1\11\14\0\1\11\1\u0245"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u025f\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0260\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u0261\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0262\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0142\1\u0263\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\2\11"+ + "\1\u0264\3\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0265\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u016d\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\u0142\16\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0266\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\303\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\1\11\1\u0230\7\11\1\u0267\3\11\1\u0268"+ + "\7\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\303\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0269\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u026a\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u026b\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u026c\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u026d\14\11\2\0"+ + "\1\10\25\11\10\10\1\0\1\u026e\1\10\1\0\2\10"+ + "\1\0\2\10\4\0\6\10\2\0\6\10\14\0\17\10"+ + "\2\0\27\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u026f\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0270\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0271\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0272\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0273\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0274\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0275\3\11\14\0\6\11\1\u0276"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u0277\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0278\3\11\1\u0279\4\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\u027a\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u027b\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0230\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u027c\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u027d"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u027e\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u027f\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0280\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0281"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0282\3\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u0283\22\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0284\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0285"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0286\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0287\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0288\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0289\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u028a\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u028b\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u028c\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u028d\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\230\4\11\14\0"+ + "\5\11\1\u028e\11\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u028f\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0290\3\11\14\0\1\11\1\u0291\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\11\11\1\u0292\13\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0293\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0294\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0295\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0296"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\u0297\16\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0298\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\10\11\1\u0299\6\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\10\11\1\u0142\6\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u029a"+ + "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u029b\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u015d\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0142\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u029c"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\1\0\1\u029d\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u029e\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u029f\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u02a0"+ + "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u02a1\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u02a2\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u02a3\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\1\11\1\u02a4\1\u02a5\22\11\1\10\7\11\1\0"+ + "\1\u02a6\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u02a7\13\11\2\0\1\10\13\11\1\u02a8\11\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u02a9\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02aa\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u02ab\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\u02ac\16\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u02ad\1\u02ae\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u02af\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u02b0\5\11\1\u02b1\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\16\11"+ + "\1\u02b2\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02b3\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\13\11\1\u02b4\3\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u02b5\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\16\11\1\u02b6\2\0\1\10\25\11\56\0\1\u02b7"+ + "\106\0\1\u01e8\150\0\1\u02b8\77\0\1\u02b9\147\0\1\u02ba"+ + "\106\0\1\u01ec\150\0\1\u02bb\77\0\1\u02bc\156\0\1\u02bd"+ + "\120\0\1\u02be\125\0\1\u02bf\61\0\1\u02c0\151\0\1\u02c1"+ + "\122\0\1\u02c2\126\0\1\u02c3\150\0\1\u02c4\101\0\1\u02c5"+ + "\130\0\1\u02c6\22\0\1\u02c7\77\0\1\u02c8\126\0\1\u02c9"+ + "\1\u02ca\102\0\1\u02cb\153\0\1\u02cc\145\0\1\u02cd\101\0"+ + "\1\u02ce\124\0\1\u02cf\125\0\1\u02d0\23\0\1\u02d1\102\0"+ + "\1\u02d2\145\0\1\u02d3\106\0\1\u0203\150\0\1\u02d4\77\0"+ + "\1\u02d5\102\0\1\u02d6\114\0\77\u0209\1\u02d7\26\u0209\3\10"+ + "\5\u02d8\1\0\2\10\1\0\1\10\1\u02d8\1\0\2\10"+ + "\4\0\1\10\2\u02d8\1\10\2\u02d8\2\0\2\10\2\u02d8"+ + "\2\10\14\0\2\10\1\u02d8\1\10\1\u02d8\3\10\1\u02d8"+ + "\6\10\2\0\2\10\1\u02d8\17\10\2\u02d8\2\10\2\150"+ + "\1\u020d\5\u0133\1\0\2\150\1\0\1\150\1\u0133\1\0"+ + "\2\150\4\0\1\150\2\u0133\1\150\2\u0133\2\0\2\150"+ + "\2\u0133\2\150\14\0\2\150\1\u0133\1\150\1\u0133\3\150"+ + "\1\u0133\6\150\2\0\2\150\1\u0133\17\150\2\u0133\2\150"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u02d9\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u02da\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u02db"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u02dc\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0269\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u02dd\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u02de"+ + "\2\11\14\0\17\11\2\0\1\10\1\11\1\u02df\1\u02e0"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u02e1\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\u02e2\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u02e3"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u01c0\2\11\14\0\6\11"+ + "\1\u02e4\10\11\2\0\1\10\25\11\3\u013e\5\u02e5\1\u0218"+ + "\4\u013e\1\u02e5\3\u013e\1\0\4\u013e\2\u02e5\1\u013e\2\u02e5"+ + "\4\u013e\2\u02e5\20\u013e\1\u02e5\1\u013e\1\u02e5\3\u013e\1\u02e5"+ + "\12\u013e\1\u02e5\17\u013e\2\u02e5\2\u013e\3\0\5\u02e6\5\0"+ + "\1\u02e6\10\0\2\u02e6\1\0\2\u02e6\4\0\2\u02e6\20\0"+ + "\1\u02e6\1\0\1\u02e6\3\0\1\u02e6\12\0\1\u02e6\17\0"+ + "\2\u02e6\2\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\303\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\12\11\1\u016d"+ + "\4\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u022e\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u02e7\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u02e8\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\1\11\1\u02e9\2\11\1\u02ea\20\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u0283\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u02eb\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\12\11\1\u02ec\12\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02ed\1\u02ee\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\15\11\1\u02ef\1\11\2\0\1\10\4\11\1\u02f0"+ + "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u02f1"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\21\11\1\u02f2\3\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u02f3\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u02f4\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0230\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\1\11\1\u02f5\23\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\16\11\1\303\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u02f6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\u0269\16\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0142\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u02f7\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02f8\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u02f9"+ + "\1\11\1\0\1\10\1\11\4\0\4\11\1\u02fa\1\11"+ + "\2\0\6\11\14\0\10\11\1\u02fb\4\11\1\u02fc\1\11"+ + "\2\0\1\10\4\11\1\u02fd\5\11\1\u02fe\1\u02ff\1\11"+ + "\1\u0300\1\11\1\u0301\5\11\1\10\5\11\1\u0302\1\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0303\3\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u022a\6\11\1\u0304\13\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0142\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0305\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\3\11\1\u0306\13\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\14\11\1\u0307\2\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0308\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\5\11\1\u028e"+ + "\11\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0309\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\11\11"+ + "\1\u030a\5\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u030b\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u030c\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u030d"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\17\11\1\u030e"+ + "\5\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u030f"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u0310\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0311\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0165\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0262\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u0312\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0313\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0314\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\310\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u0315\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u0316"+ + "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0317\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0318\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0157\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0319"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u031a\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u031b\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u031c\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u031d\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\303\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u031e\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u031f\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0320\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\16\11\1\u0321\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u0230\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u01d0\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u0262\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0322\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0323\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u0324\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\303\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0325\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0142\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\4\11\1\u0326\6\11\1\u0327"+ + "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0328"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0329\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\317\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u032a\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u032b\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u032c"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u032d\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0235\1\u032c\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u032e\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u032f\15\11\2\0\1\10"+ + "\25\11\3\10\5\u0330\1\0\2\10\1\0\1\10\1\u0330"+ + "\1\0\2\10\4\0\1\10\2\u0330\1\10\2\u0330\2\0"+ + "\2\10\2\u0330\2\10\14\0\2\10\1\u0330\1\10\1\u0330"+ + "\3\10\1\u0330\6\10\2\0\2\10\1\u0330\17\10\2\u0330"+ + "\3\10\5\11\1\u0331\1\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u0332\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\14\11\1\u0333\2\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\u0334\16\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0335\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0336\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0337\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0338"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0339\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\16\11\1\u033a"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u033b\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u033c\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u033d\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u033e\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u033f\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0340\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0341\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0342\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u0343\1\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0344\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0345\4\11\14\0\13\11\1\u0341\3\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0346\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0347\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0348\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\5\11\1\u0349"+ + "\11\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u034a\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u034b\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u034c\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u034d\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u034e"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u034f\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0350\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0351\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\2\11\1\u022a\6\11\1\u0304"+ + "\13\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0352"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\11\11\1\u0269\5\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0353\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0354\4\11"+ + "\14\0\17\11\2\0\1\10\23\11\1\u0355\1\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\12\11\1\u0356\12\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0357\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0358\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0359\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u035a\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u035b\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0269\5\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u022a\6\11\1\u0304\13\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\11\1\u035c\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\u035d\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\32\0\1\u035e\73\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u035f\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\15\11\1\u0360\7\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0361\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0362\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\13\11\1\u0363\3\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0364\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u0365\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0366\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0367\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0368\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u0369\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u036a"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u036b\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u036c\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\2\11\1\u036d\3\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u036e\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u036f\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0370\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0371\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0372\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0373\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0374\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0375"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0376\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\7\11\1\u0377\15\11\23\0\1\u0378"+ + "\144\0\1\u01e8\13\0\1\u02b7\50\0\1\u02b9\1\u0379\5\u02b9"+ + "\1\u0379\1\u02b9\2\0\2\u02b9\1\0\1\u0379\1\u02b9\2\0"+ + "\1\u02b9\1\u0379\6\u02b9\2\u0379\6\u02b9\4\u0379\1\0\1\u0379"+ + "\2\0\4\u0379\17\u02b9\2\0\1\u0379\25\u02b9\23\0\1\u037a"+ + "\144\0\1\u01ec\13\0\1\u02ba\50\0\1\u02bc\1\u037b\5\u02bc"+ + "\1\u037b\1\u02bc\2\0\2\u02bc\1\0\1\u037b\1\u02bc\2\0"+ + "\1\u02bc\1\u037b\6\u02bc\2\u037b\6\u02bc\4\u037b\1\0\1\u037b"+ + "\2\0\4\u037b\17\u02bc\2\0\1\u037b\25\u02bc\14\0\1\u037c"+ + "\20\0\1\u037d\153\0\1\u037e\123\0\1\u037f\123\0\1\u0380"+ + "\107\0\1\u0381\144\0\1\u0382\104\0\1\u0383\20\0\1\u0384"+ + "\125\0\1\u02ca\56\0\1\u0385\202\0\1\u0386\76\0\1\u0387"+ + "\1\0\1\u0388\143\0\1\u0389\133\0\1\u038a\123\0\1\u038b"+ + "\122\0\1\u038c\103\0\1\u038d\127\0\1\u038e\124\0\1\u038f"+ + "\125\0\1\u0390\125\0\1\u0391\130\0\1\u0392\106\0\1\u0393"+ + "\144\0\1\u0203\13\0\1\u02d3\50\0\1\u02d5\1\u0394\5\u02d5"+ + "\1\u0394\1\u02d5\2\0\2\u02d5\1\0\1\u0394\1\u02d5\2\0"+ + "\1\u02d5\1\u0394\6\u02d5\2\u0394\6\u02d5\4\u0394\1\0\1\u0394"+ + "\2\0\4\u0394\17\u02d5\2\0\1\u0394\25\u02d5\3\0\5\u0395"+ + "\5\0\1\u0395\10\0\2\u0395\1\0\2\u0395\4\0\2\u0395"+ + "\20\0\1\u0395\1\0\1\u0395\3\0\1\u0395\12\0\1\u0395"+ + "\17\0\2\u0395\2\0\3\10\5\u0396\1\0\2\10\1\0"+ + "\1\10\1\u0396\1\0\2\10\4\0\1\10\2\u0396\1\10"+ + "\2\u0396\2\0\2\10\2\u0396\2\10\14\0\2\10\1\u0396"+ + "\1\10\1\u0396\3\10\1\u0396\6\10\2\0\2\10\1\u0396"+ + "\17\10\2\u0396\3\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0397\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u0398\14\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u0399\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u039a\3\11\1\u039b\1\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\10\11\1\u039c\1\11\1\u02fe\12\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u032c\2\11\14\0"+ + "\17\11\2\0\1\10\12\11\1\u039d\12\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u039e\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u039f\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u03a0\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u03a1\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0262\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u03a2\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u03a3\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0341"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\3\u013e\5\u03a4"+ + "\1\u0218\4\u013e\1\u03a4\3\u013e\1\0\4\u013e\2\u03a4\1\u013e"+ + "\2\u03a4\4\u013e\2\u03a4\20\u013e\1\u03a4\1\u013e\1\u03a4\3\u013e"+ + "\1\u03a4\12\u013e\1\u03a4\17\u013e\2\u03a4\2\u013e\3\0\5\u03a5"+ + "\5\0\1\u03a5\10\0\2\u03a5\1\0\2\u03a5\4\0\2\u03a5"+ + "\20\0\1\u03a5\1\0\1\u03a5\3\0\1\u03a5\12\0\1\u03a5"+ + "\17\0\2\u03a5\2\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03a6\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u03a7\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u03a8\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u03a9\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u03aa\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u03ab\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u03ac\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u03ad\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u03ae\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u03af\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u01e4"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\22\11\1\u03b0\2\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u03b1\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u03b2\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u03b3\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u03b4"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u03b5\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0374\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u03b6\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u03b7\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u03b8"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u03b9\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u03ba\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03bb"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u03bc"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u03bd\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u03be\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u03bf\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u03c0\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0180\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u03c1\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u03c2\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u03c3\22\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u03c4\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\13\11\1\u03c5\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u03c6\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u03c7\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u03c8\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03c9"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u03ca\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0167\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u03cb\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0229\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u03cc\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u03cd\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\303\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u03ce\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u03cf"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u03d0\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u0165\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u03d1\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u03d2\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\11\1\u0142\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03b2\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u016d\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u016d\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03d3"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u03d4\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03d5"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u03d6\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u03d7\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u03d8"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u03d9\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u03da\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u03db\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u03dc\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0221\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u03dd\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u03de\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u03df\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\2\11\1\u02e1\3\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\7\11\1\u03e0\7\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u03e1\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u03e2"+ + "\7\11\2\0\1\10\25\11\3\10\5\u03e3\1\0\2\10"+ + "\1\0\1\10\1\u03e3\1\0\2\10\4\0\1\10\2\u03e3"+ + "\1\10\2\u03e3\2\0\2\10\2\u03e3\2\10\14\0\2\10"+ + "\1\u03e3\1\10\1\u03e3\3\10\1\u03e3\6\10\2\0\2\10"+ + "\1\u03e3\17\10\2\u03e3\3\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03e4\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u03e5\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u03e6\5\11\2\0\5\11\1\u0142\14\0\10\11\1\u03e7"+ + "\6\11\2\0\1\10\2\11\1\u03e8\1\11\1\u03e9\20\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u03ea\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u03eb\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u0269\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\7\11\1\u03ec\7\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u03ed\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u03ee\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\5\11\1\u03ef"+ + "\5\11\1\u03f0\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03f1\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u03f2\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u03f3\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u03f4\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u028f\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u03f5\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0235\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u03f6\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u03f7\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0142"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u03f8\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u03f9\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u03fa\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u03fb\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u03fc\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\13\11\1\u03fd\11\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u03fe\6\11\1\u03ff\13\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0400\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0401\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u02e1\3\11\2\0\1\u015d\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0402\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0403"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0404\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0405\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u0406\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0407\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\5\11\1\u0408\17\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0409\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u040a\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u040b\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u040c\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u040d\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\u040e"+ + "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u040f\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\u0410\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0411\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\14\0\1\u0412\111\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0413\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0414\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0415\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u0416\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0417\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u0418\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0419\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u041a\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\u041b\16\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u041c\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\11\11\1\u041d\13\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\12\11\1\u026b"+ + "\4\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u041e\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u041f\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0420\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0421"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0422\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\2\11\1\u0423\14\11\1\u0301"+ + "\5\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0424\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0425\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u0262\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\15\11\1\u02fc"+ + "\1\11\2\0\1\10\4\11\1\u02fd\6\11\1\u02ff\3\11"+ + "\1\u0301\5\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0426\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0142\4\11\14\0"+ + "\17\11\2\0\1\10\1\11\1\u0427\23\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0428\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\23\0\1\u02b9\125\0\1\u02bc\177\0"+ + "\1\u0429\67\0\1\u042a\162\0\1\u042b\70\0\1\u0429\125\0"+ + "\1\u042c\77\0\1\u037f\152\0\1\u042d\127\0\1\u042e\155\0"+ + "\1\u042f\73\0\1\u0430\151\0\1\u0431\125\0\1\u0432\54\0"+ + "\1\u0433\174\0\1\u0434\105\0\1\u0435\124\0\1\u02ca\127\0"+ + "\1\u0436\123\0\1\u0437\154\0\1\u02ca\131\0\1\u0438\71\0"+ + "\1\u0439\153\0\1\u02ca\126\0\1\u043a\63\0\1\u02d5\105\0"+ + "\5\u043b\5\0\1\u043b\10\0\2\u043b\1\0\2\u043b\4\0"+ + "\2\u043b\20\0\1\u043b\1\0\1\u043b\3\0\1\u043b\12\0"+ + "\1\u043b\17\0\2\u043b\2\0\3\10\5\11\1\0\2\10"+ + "\1\0\1\10\1\11\1\0\2\10\4\0\1\10\2\11"+ + "\1\10\2\11\2\0\2\10\2\11\2\10\14\0\2\10"+ + "\1\11\1\10\1\11\3\10\1\11\6\10\2\0\2\10"+ + "\1\11\17\10\2\11\3\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\247\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u043c\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u043d\2\11\14\0\6\11\1\u043e"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u03b9\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u043f\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0440\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u0441\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0442\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0443\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0444\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\3\11"+ + "\1\u0445\21\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0446\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0447\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\3\u013e\5\170\1\u0218\4\u013e\1\170"+ + "\3\u013e\1\0\4\u013e\2\170\1\u013e\2\170\4\u013e\2\170"+ + "\20\u013e\1\170\1\u013e\1\170\3\u013e\1\170\12\u013e\1\170"+ + "\17\u013e\2\170\2\u013e\3\0\5\u0448\5\0\1\u0448\10\0"+ + "\2\u0448\1\0\2\u0448\4\0\2\u0448\20\0\1\u0448\1\0"+ + "\1\u0448\3\0\1\u0448\12\0\1\u0448\17\0\2\u0448\2\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\303\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u0449\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0142"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u044a\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\1\0"+ + "\1\u044b\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u044c"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\1\u03e6"+ + "\5\11\2\0\6\11\14\0\17\11\2\0\1\10\7\11"+ + "\1\u044d\15\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0410\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u044e\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\1\0"+ + "\1\u044f\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0450\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u0142\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0451\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u022e\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u0452\1\11\2\0"+ + "\1\u0453\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0454"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0455\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0456"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0457\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0458\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0459\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u03ba\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u045a\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0455\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u045b"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u045c\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u045d\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u045e"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u045f\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0460\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\2\11\1\u0461\3\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0462\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0463\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0464\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0465\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u0165\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0466\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u0467\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\11"+ + "\1\u0142\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0468\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0469\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u046a\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u03a6\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u016d\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u046b\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u046c"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\11\11\1\u046d"+ + "\13\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\247\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u046e\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u046f\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0470\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0471\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u03db\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0472\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0473"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\3\11\1\u0474\13\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0475\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u0476\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\11"+ + "\1\u0477\23\11\3\10\5\u0478\1\0\2\10\1\0\1\10"+ + "\1\u0478\1\0\2\10\4\0\1\10\2\u0478\1\10\2\u0478"+ + "\2\0\2\10\2\u0478\2\10\14\0\2\10\1\u0478\1\10"+ + "\1\u0478\3\10\1\u0478\6\10\2\0\2\10\1\u0478\17\10"+ + "\2\u0478\3\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0479\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u047a\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u047b\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\313\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u047c\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u047d"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u047e\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u047f\10\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u0480\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\5\11\1\u0481\17\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\11\1\u0482\4\11\2\0\6\11\14\0\15\11"+ + "\1\u02fc\1\11\2\0\1\10\4\11\1\u03e9\1\u0481\11\11"+ + "\1\u0301\4\11\1\u0483\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\11\11\1\u0484\13\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0485\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\12\11\1\u0486\4\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0487\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0488\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0489\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u048a\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u048b\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\5\11\1\u048c\17\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u048d"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u048e\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u048f\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\u0490\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0491\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0492\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0493\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0494\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0495\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0496\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0497\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0498"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0499\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u049a\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\3\11\1\u045c\13\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\1\u049b\5\11\1\0"+ + "\1\u049c\6\11\14\0\10\11\1\u049d\6\11\2\0\1\10"+ + "\16\11\1\u049e\6\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\14\11\1\u049f\2\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u04a0\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0262\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u04a1\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u04a2\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u04a3\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\16\11\1\u04a4\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u04a5\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u04a6\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\5\11\1\u04a7"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u04a8\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\35\0\1\u04a9\70\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\13\11\1\u04aa"+ + "\3\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u04ab\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u04ac\1\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\12\11\1\u04ad\4\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u04ae"+ + "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u04af\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u04b0\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u04b1\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\4\11\1\u04b2\1\u04b3\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\11\11\1\u04b4\13\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u04b5\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u04b6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0142\14\0\17\11"+ + "\2\0\1\10\2\11\1\u04b7\1\11\1\u04b8\6\11\1\u04b9"+ + "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u04ba"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u04bb\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u04bc\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u04bd\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u04be\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u04bf\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u04c0\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u04c1\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\2\11\1\u04c2\3\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u04c3\14\0\17\11\2\0\1\10\25\11\77\u0429\1\u02ca"+ + "\26\u0429\36\0\1\u04c4\147\0\1\u04c5\103\0\1\u04c6\154\0"+ + "\1\u04c7\121\0\1\u04c8\106\0\1\u02ca\77\0\1\u02ca\152\0"+ + "\1\u038b\121\0\1\u0392\151\0\1\u038b\102\0\1\u02ca\130\0"+ + "\1\u04c9\123\0\1\u04ca\151\0\1\u04cb\122\0\1\u04cc\61\0"+ + "\1\u04c7\171\0\1\u0430\50\0\5\u04cd\5\0\1\u04cd\10\0"+ + "\2\u04cd\1\0\2\u04cd\4\0\2\u04cd\20\0\1\u04cd\1\0"+ + "\1\u04cd\3\0\1\u04cd\12\0\1\u04cd\17\0\2\u04cd\2\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u04ce\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u04cf\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u04d0"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u04d1\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u0198\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u04d2\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\12\11\1\u04d3\4\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04d4"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u04d5\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u04d6\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u04d7\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u04d8\10\11\2\0\1\10\25\11"+ + "\3\0\5\173\5\0\1\173\10\0\2\173\1\0\2\173"+ + "\4\0\2\173\20\0\1\173\1\0\1\173\3\0\1\173"+ + "\12\0\1\173\17\0\2\173\2\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u04d9\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04da"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\6\0\1\u04db"+ + "\16\0\1\u04dc\1\u04dd\2\0\1\u04de\74\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u04df\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u04e0\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u04e1\15\11\2\0\1\10\25\11\32\0\1\u04e2\34\0"+ + "\1\u04e3\36\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u04e4\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u04e5\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u04e6\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04e7"+ + "\1\u04e8\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u04e9\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0341\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u04ea\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0341\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u04eb\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\4\11\1\u04ec\1\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u04ed\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u04ee\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u04ef\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u04f0\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u04f1\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u04f2"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u04f3\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\14\11\1\u0190\10\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0165\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u0142\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u04f4\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u04f5\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u04f6\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\3\11\1\303\13\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u04f7\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u04f8\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u019f\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u016d\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u04f9\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u04fa\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u04fb\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u04fc\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u04fd\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u04fe\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u016f\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u0324\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\15\11"+ + "\1\u04ff\7\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0500\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\15\11\1\u0300\7\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0501\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0502\12\11\2\0\1\10\25\11\3\10"+ + "\5\330\1\0\2\10\1\0\1\10\1\330\1\0\2\10"+ + "\4\0\1\10\2\330\1\10\2\330\2\0\2\10\2\330"+ + "\2\10\14\0\2\10\1\330\1\10\1\330\3\10\1\330"+ + "\6\10\2\0\2\10\1\330\17\10\2\330\3\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0212\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0503"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0230\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0504\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u01bc"+ + "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0505\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0506\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0507\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0508\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u0509\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u050a\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\320\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u050b\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u050c"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\1\u050d\24\11\1\10\5\11\1\u050e\1\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\1\u039a"+ + "\5\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\u050f\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0510\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0511\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0512"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0513\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0410"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\3\11\1\u0514\13\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0515\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0516\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0517\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0518"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0519\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u051a\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u051b\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u051c\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\13\11"+ + "\1\u051d\1\11\1\u051e\7\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u051f\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u0520\1\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\1\11\1\u0521\1\u0522"+ + "\2\11\1\u0523\3\11\1\u0524\13\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\14\11\1\u02b6\2\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0525\15\11\2\0\1\10\25\11\103\0"+ + "\1\u0526\3\0\1\u0527\16\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0484\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0528"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\u0529\5\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u052a\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\15\11\1\u052b\7\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u052c\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u052d"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u052e\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u052f\1\u04a7\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\230\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\11\11\1\u0530\13\11"+ + "\36\0\1\u0531\67\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u0532"+ + "\1\11\2\0\6\11\14\0\15\11\1\u0533\1\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0534\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0535\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0536\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u01c4\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\10\11\1\u0537\6\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\12\11\1\u0538\4\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0539\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u053a\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u053b"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u053c\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u053d\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u053e"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u053f\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0540\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u0541"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u0542\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\16\11\1\u0543\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0544\5\11\1\u0545\2\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\1\11\1\u0546\4\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0547\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\14\11\1\u0548\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\12\11\1\u0549\4\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u054a\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u054b\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\u054c\16\11\2\0\1\10"+ + "\25\11\40\0\1\u054d\145\0\1\u054e\132\0\1\u054f\100\0"+ + "\1\u0550\127\0\1\u0551\114\0\1\u0552\35\0\1\u0553\73\0"+ + "\1\u038b\130\0\1\u0554\123\0\1\u0555\72\0\5\u0127\5\0"+ + "\1\u0127\10\0\2\u0127\1\0\2\u0127\4\0\2\u0127\20\0"+ + "\1\u0127\1\0\1\u0127\3\0\1\u0127\12\0\1\u0127\17\0"+ + "\2\u0127\2\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\1\0\1\u0556"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0162\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0557\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0558"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0559"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u055a"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u055b\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\14\11\1\u055c\2\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u055d\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u055e\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u055f\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\4\11\1\u0560\20\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\5\11\1\u0561\11\11\2\0\1\10\25\11"+ + "\40\0\1\u0562\125\0\1\u0563\76\0\1\u0564\201\0\1\u0565"+ + "\40\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0566"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0567\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0568\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\14\0\1\u0569\150\0"+ + "\1\u0569\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u056a\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\14\11\1\u056b"+ + "\2\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u056c\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u056d"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u056e\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u02fa"+ + "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u056f\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0570\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0571\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0572\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0573\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0574"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0575\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0576"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0577\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0578"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\5\11\1\u0579\17\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\4\11\1\u057a\20\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u057b\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u057c\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u03d7\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u057d"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u057e\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0167\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0142\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u057f\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0580\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0581"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0582\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\1\11\1\u0583"+ + "\4\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u0584\12\11\2\0\1\10\25\11\1\10\5\11\1\u0585"+ + "\1\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\1\u03e6\5\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u0586\6\11\1\u0587\6\11\1\106"+ + "\4\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0538"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0588\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u0410\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0589\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\16\11\1\u058a\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u058b"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u058c\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u027e\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u058d\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u058e\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u058f\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0590\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\11\11\1\u0591\13\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\4\11"+ + "\1\u02fd\20\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0592"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\7\11\1\u0593\7\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0594\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0595\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0596\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0597"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u0598\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\13\11\1\u0599\11\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u059a\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\7\11\1\u059b\7\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u059c\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u059d\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\2\11"+ + "\1\u059e\3\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u059f"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u05a0\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u05a1\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u05a2\4\11"+ + "\14\0\4\11\1\u05a3\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u05a4\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\u05a5\16\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u05a6"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u05a7\12\11\2\0\1\10"+ + "\25\11\35\0\1\u05a8\104\0\1\u05a9\111\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05aa\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u05ab\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\16\11"+ + "\1\u0142\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u05ac\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u05ad\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u05ae\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u05af\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u05b0"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u05b1\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\73\0\1\u05b2\32\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u05b3\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05b4"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u05b5\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u05b6\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\1\11\1\u05b7\23\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u05b8\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0162"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u05b9\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u05ba\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05bb\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u05bc\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u05bd"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05be\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u05bf\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u05c0\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u05c1\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\1\u05c2\5\11\2\0\6\11"+ + "\14\0\10\11\1\u05c3\6\11\2\0\1\10\4\11\1\u05c4"+ + "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\15\11\1\u02fc\1\11\2\0\1\10\4\11\1\u02fd\20\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u04fc\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\15\11\1\u02ef\1\11\2\0"+ + "\1\10\15\11\1\u0300\7\11\1\10\7\11\1\0\1\u05c5"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u05c6\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\20\11\1\106"+ + "\4\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05c7"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u05c8\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u05c9\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\11\11\1\u0304\13\11\41\0\1\u0429\121\0\1\u0429"+ + "\125\0\1\u05ca\131\0\1\u02ca\124\0\1\u05cb\152\0\1\u05cc"+ + "\100\0\1\u05cd\122\0\1\u05ce\163\0\1\u02ca\60\0\1\u04dd"+ + "\77\0\1\10\7\11\1\0\1\u05cf\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u05d0\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u05d1\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u05d2\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\1\0\1\u05d3\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\15\11\1\u02fc\1\11\2\0"+ + "\1\10\17\11\1\u0301\5\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u05d4\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u05d5\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u05d6\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u05d7\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\10\11\1\u05d8"+ + "\2\11\1\u03ce\11\11\35\0\1\u05d9\104\0\1\u05da\176\0"+ + "\1\u05db\101\0\1\u05dc\64\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0543\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u028f\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u05dd\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\63\0\1\u05de\42\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\11\11"+ + "\1\u05df\13\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\4\11\1\u02fd\6\11\1\u02ff"+ + "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\13\11\1\u05e0\3\11\2\0\1\10\25\11\1\10\5\11"+ + "\1\u05e1\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u05e2\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u05e3\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u05e4\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\2\11\1\u0423\22\11\1\10\7\11\1\0\1\u05e5\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u05e6\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u05e7\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03b2"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\1\u0269\24\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\4\11\1\u05e8\20\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\16\11\1\u0162\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05e9"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0142\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u05ea\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\u05eb"+ + "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\1\u046a\24\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\303"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u05ec\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\4\11\1\u05ed\1\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u05ee\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u05ef"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\u05f0\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f1"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05f2\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u05f3\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f4\1\u05f5"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u0162\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u05f6\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f7\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u05f8\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0457"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u05f9\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\11\1\u05fa\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\2\11\1\u05fb\3\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u05fc\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u05fd\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u05fe\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u05ff\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u0162"+ + "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0600\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\14\11\1\u0601\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0602\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0603\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\11\1\u0604\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0605\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0606\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\2\11\1\u0607\3\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0608\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\14\11\1\u0609\10\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u060a\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\1\u060b\5\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u060c\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u060d\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u060e"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u060f\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0610"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0611\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u03a8\2\11\14\0\17\11\2\0\1\10\25\11\40\0"+ + "\1\u0612\150\0\1\u0613\42\0\1\10\7\11\1\0\1\u0180"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0614\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0615\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0616\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0617\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\4\11\1\u0618\20\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0619\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u061a\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u061b"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u061c\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u061d\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u061e"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u061f\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\11"+ + "\1\u0620\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u0621\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0622\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0623"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u0624\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0625\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u035c\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0626\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u0627\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0628\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03c7"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0629\2\11\14\0\1\11\1\u062a\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u0230\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u062b"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0344\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\4\11\1\u062c\20\11\1\10\5\11"+ + "\1\u062d\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0513\5\11\14\0\17\11\2\0\1\10\25\11\67\0"+ + "\1\u062e\53\0\1\u062f\147\0\1\u0630\123\0\1\u0631\127\0"+ + "\1\u0632\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0633\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0410\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u0634\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0635\14\0"+ + "\17\11\2\0\1\10\25\11\103\0\1\u0636\3\0\1\u0637"+ + "\16\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u0262\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\11\11\1\u0638\13\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0639\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u063a\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\37\0\1\u063b\160\0"+ + "\1\u063c\74\0\1\u063d\121\0\1\u063e\70\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u063f\12\11"+ + "\2\0\1\10\25\11\60\0\1\u063d\45\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u05f4\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u0640\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u0641\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\26\0\1\u0642\77\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0643\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u01d0\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0594"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u04ef\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0644"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0645\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0646"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0647\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0648\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u01d1\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u0649\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u064a\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u0544\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u064b\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u064c\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u064d\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0142\5\11\14\0\17\11"+ + "\2\0\1\10\3\11\1\u064e\21\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u064f\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"; + + private static final String ZZ_TRANS_PACKED_1 = + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\3\11\1\u0650\13\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\u0651\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0652"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0653\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\5\11\1\u0654\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u0655\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u0656\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u0657"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u0658\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0659\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\23\11"+ + "\1\u0355\1\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u065a\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\2\11\1\u065b\22\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u065c\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u065d"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\11\1\u065e\4\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u065f\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0660\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0661\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0662"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0663\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0664\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0665"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\u0666\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u05bb\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0667\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0538\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0668\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0669\10\11\2\0\1\10\25\11\35\0"+ + "\1\u066a\130\0\1\u066b\65\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u066c\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0623\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\2\11\1\u066d\14\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u066e\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\13\11\1\u0162\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u066f\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u0670"+ + "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\u0671\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0672\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0162\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u04cf\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0673\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\4\11\1\u0674\1\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\1\u0675\24\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\352\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0676\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0622\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0677\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0678\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0679\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u067a\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u067b\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u032c\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u067c\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u067d"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u067e\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\60\0\1\u067f\104\0\1\u0680\127\0"+ + "\1\u0632\124\0\1\u02ca\146\0\1\u02ca\44\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0681\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u04c2\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0682\10\11\2\0\1\10\25\11\11\0\1\u0683\130\0"+ + "\1\u0684\111\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0685\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0686\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0687\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\72\0\1\u0688\44\0\1\u0689\175\0\1\u068a\103\0"+ + "\1\u068b\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u068c\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u068d\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u068e\15\11\2\0\1\10"+ + "\25\11\65\0\1\u068f\40\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\4\11"+ + "\1\u0690\1\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0294\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\4\11"+ + "\1\u0691\20\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0692\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0693\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\7\11\1\u0694"+ + "\15\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0695"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0696\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0697\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0698\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0699\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u069a\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u069b\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u069c\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u05c9\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u069d\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u069e\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u069f\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u06a0\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u06a1\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u06a2\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u06a3\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\1\0\1\u06a4\5\11\1\u06a5\14\0\15\11\1\u06a6\1\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\5\11\1\u023a"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\4\11\1\u0618"+ + "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u06a7\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u06a8\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\5\11\1\u06a9\17\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u06aa"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\15\11\1\u02fc\1\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u06ab\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u06ac\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u0162\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u04cf"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u06ad\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u06ae\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u06af\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u06b0\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u06b1\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u06b2\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\37\0\1\u05b2\77\0\1\u06b3\114\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u06b4\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\5\11\1\u06b5\1\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\5\11"+ + "\1\u06b6\2\0\6\11\14\0\17\11\2\0\1\10\13\11"+ + "\1\u06b7\11\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\1\u06b8\5\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u06b9\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u06ba\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u06bb\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\u06bc\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u06bd\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u06be\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u06bf\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u04cf\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u06c0\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u06c1\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u06c2\5\11\1\u06c3\14\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u06c4\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0162\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u06c5\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u06c6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u06c7\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\63\0\1\u0429\77\0\1\u0555"+ + "\70\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06c8"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u06c9\15\11"+ + "\2\0\1\10\25\11\27\0\1\u06ca\163\0\1\u06cb\40\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u06cc\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\5\11\1\u06cd\11\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0544\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\60\0\1\u04a9\105\0"+ + "\1\u06ce\124\0\1\u06cf\124\0\1\u06d0\67\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\11\1\u06d1\4\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u06d2\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0513\14\0"+ + "\17\11\2\0\1\10\25\11\72\0\1\u06d3\33\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u06d4\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u06d5\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u06d6\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\5\11\1\u0142\11\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u06d7\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u06d8"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u06d9\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u06da"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\4\11\1\u06db\1\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u06dc\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u06dd\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u06de\15\11\2\0"+ + "\1\10\25\11\103\0\1\u06df\22\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\u0341"+ + "\24\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u06e0"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\11\11\1\u0410\5\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\15\11\1\u0300\7\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\13\11"+ + "\1\u06e1\3\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\13\11\1\u0341\3\11\2\0"+ + "\1\10\25\11\114\0\1\u06e2\11\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\1\0\1\u06e3\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u06e4"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u06e5\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\352\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\u06e6\16\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u06e7\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\u0162\16\11\2\0"+ + "\1\10\25\11\1\10\5\11\1\u06e8\1\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u06e9\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u06ea\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u06eb\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\352\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u06ec\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u06ed\15\11"+ + "\2\0\1\10\25\11\72\0\1\u06ee\33\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u06ef\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u06f0\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u06f1\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u06f2\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u06f3\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u06f4\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03ad"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u06f5\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06f6"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\14\11\1\u06f7\2\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u06f8\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u06ea\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\17\11\1\u0301\5\11"+ + "\1\10\5\11\1\u06f9\1\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\4\11\1\u06fa\1\u023a"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u06fb\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u06fc\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u06fd\22\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u06fe\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u06ff\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0700\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0701\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0162"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\42\0\1\u0702\146\0"+ + "\1\u0703\42\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0704\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\13\11\1\u03ce\11\11\72\0\1\u0705\71\0\1\u05b2"+ + "\154\0\1\u0706\40\0\1\10\7\11\1\0\1\u0707\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0708\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\67\0\1\u0709\36\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u070a\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u070b\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\15\11\1\u070c\7\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u052a\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u070d"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u070e\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u070f\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u02e1"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u045c\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0710"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0410\14\11\2\0"+ + "\1\10\25\11\65\0\1\u0711\40\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\7\11\1\u0712\7\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0713\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\15\0\1\u0714\212\0"+ + "\1\u0715\23\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0716\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0717\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0718\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0719\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u071a\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u071b\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0538\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\5\11\1\u071c\1\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ + "\1\u023a\2\0\6\11\14\0\17\11\2\0\1\10\15\11"+ + "\1\u071e\1\11\1\u071f\5\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0522"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06ec"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\57\0\1\u0720"+ + "\46\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0721"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0722\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u0723\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0724\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0725\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\5\11\1\u02dd\1\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ + "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\1\11\1\u0726\15\11\1\u071f\5\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u0538"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0727"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u06de"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u03d9\1\11\14\0\1\11\1\u0728"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0729\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u072a"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u072b\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u072c\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u072d\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u072e\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u072f"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u035c\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\37\0\1\u0730\146\0\1\u0731\45\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\11\1\u0732\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\37\0\1\u0733\102\0\1\u0734\111\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0735\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\12\11\1\u0736\4\11\2\0\1\10\25\11"+ + "\37\0\1\u0737\66\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u04fc\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0738\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0739\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u073a\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\14\11\1\u073b\2\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\1\0\1\u073c"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u073d\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\66\0\1\u073e\37\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u05c4\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u073f\4\11\14\0\17\11\2\0\1\10\25\11\25\0"+ + "\1\u0740\41\0\1\u0741\15\0\1\u0742\10\0\1\u0743\36\0"+ + "\1\u0744\76\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0745\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0746"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0747\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u0662\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0748\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u0749\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u074a\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u074b\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u074c\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u074d"+ + "\10\11\2\0\1\10\25\11\35\0\1\u074e\70\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0662\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u074f\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0750\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u0751\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\16\11\1\u0410\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u05a2\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u0752\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0753\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0754\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0755"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0756\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0757\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u0758\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0759\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u075a\14\11\2\0\1\10\25\11\35\0\1\u05b2\151\0"+ + "\1\u075b\44\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u075c\10\11\2\0\1\10\25\11\74\0"+ + "\1\u075d\123\0\1\u075e\33\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\2\11\1\u02e1\14\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u075f"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\63\0\1\u0760"+ + "\42\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0761\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0762\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ + "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\10\11\1\u05d8\14\11\6\0\1\u0763\117\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0764\10\11\2\0\1\10\25\11\62\0\1\u0765\43\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0335\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\60\0\1\u0766\125\0"+ + "\1\u0767\61\0\1\u0730\147\0\1\u0768\131\0\1\u0769\63\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0344\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u076a\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u076b"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u076c\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u076d\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0442\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u076e\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u076f\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0770\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u0771"+ + "\14\11\2\0\1\10\25\11\32\0\1\u0772\73\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0773\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0774\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0775\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\u0538"+ + "\24\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0776"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u01d1\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0777\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u03c0"+ + "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0778\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\74\0\1\u0779\31\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u077a\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0235"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\37\0\1\u077b"+ + "\66\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u0751\12\11\2\0\1\10\25\11\40\0\1\u077c"+ + "\177\0\1\u077d\13\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u077e\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\65\0\1\u077f\40\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0780\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\5\11"+ + "\1\247\11\11\2\0\1\10\25\11\60\0\1\u0781\45\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0782\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\41\0\1\u0783\100\0"+ + "\1\u0784\122\0\1\u0785\201\0\1\u0786\75\0\1\u0787\70\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0788\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\2\11\1\u0789\14\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u078a"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u04a6\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u078b"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\13\11\1\u0662\3\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u078c\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u06ab\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\64\0\1\u078d\41\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\10\11\1\u078e\14\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u078f\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0635\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0790\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\7\11\1\u0791\7\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0792\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\37\0\1\u0793\66\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0794\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\26\0\1\u0795\54\0\1\u0796\36\0"+ + "\1\u0797\171\0\1\u0798\45\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0799\14\0\17\11\2\0\1\10\25\11"+ + "\66\0\1\u079a\37\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u079b\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\14\0\1\u079c\111\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u079d\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\37\0\1\u079e\160\0\1\u05b2\62\0\1\u079f\164\0\1\u07a0"+ + "\75\0\1\u07a1\67\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u07a2\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\1\u049b\5\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\5\11\1\u07a3\1\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\15\11\1\u07a4\7\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u05d2\10\11"+ + "\2\0\1\10\25\11\63\0\1\u07a5\42\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u07a6\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u07a7\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u07a8\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\1\0\1\u07a9\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u07aa\7\11\2\0\1\10\25\11\61\0\1\u07ab\44\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u07ac\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\41\0\1\u07ad\147\0\1\u07ae"+ + "\134\0\1\u066a\114\0\1\u066a\44\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u07af\10\11\2\0"+ + "\1\10\25\11\40\0\1\u07b0\65\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u07b1\10\11\2\0"+ + "\1\10\25\11\35\0\1\u07b2\70\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u03e6\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\32\0\1\u035e\52\0\1\u07b3\61\0\1\u066a\151\0"+ + "\1\u07b4\100\0\1\u07b5\65\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u04fc\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u07b6\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u07b7\15\11\2\0"+ + "\1\10\25\11\37\0\1\u07b8\66\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u07b9\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u0162\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u07ba\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\117\0\1\u07bb\6\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\1\0\1\u07bc\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\65\0\1\u07bd\154\0\1\u07be\71\0\1\u07bf"+ + "\103\0\1\u07c0\67\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u07c1\15\11\2\0\1\10\25\11"+ + "\41\0\1\u07c2\64\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\1\u07c3\24\11\36\0"+ + "\1\u07c4\155\0\1\u07c5\74\0\1\u07c6\153\0\1\u07c7\42\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u07c8\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u0676\10\11\2\0"+ + "\1\10\25\11\62\0\1\u07c9\43\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u03eb\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u04fc\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\37\0\1\u07ca\204\0"+ + "\1\u07cb\45\0\1\u07cc\104\0\1\u07cd\173\0\1\u07ce\127\0"+ + "\1\u07cf\40\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u07d0\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\25\0\1\u07d1"+ + "\100\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u07d2"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\60\0\1\u07d3"+ + "\133\0\1\u07d4\124\0\1\u07d5\75\0\1\u07d6\70\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u02ee\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\35\0\1\u07d7\125\0\1\u07d8\101\0"+ + "\1\u07ca\153\0\1\u07d9\113\0\1\u0740\41\0\1\u0741\15\0"+ + "\1\u0742\115\0\1\u05b2\112\0\1\u0730\43\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\11\11\1\u03ff\13\11\40\0\1\u07da\65\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0410\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\41\0\1\u05b2\75\0\1\u07db\205\0"+ + "\1\u066a\61\0\1\u07dc\41\0\1\u07dd\13\0\1\u07de\1\0"+ + "\1\u07df\105\0\1\u07e0\71\0\1\u07e1\157\0\1\u07e2\135\0"+ + "\1\u07e3\67\0\1\u07e4\150\0\1\u07e5\125\0\1\u07e6\127\0"+ + "\1\u07e7\57\0\1\u07e8\171\0\1\u07e9\132\0\1\u07ea\75\0"+ + "\1\u07eb\150\0\1\u07ec\105\0\1\u07ed\101\0\1\u07ee\122\0"+ + "\1\u07ef\155\0\1\u07f0\121\0\1\u07f1\104\0\1\u07f2\150\0"+ + "\1\u07f3\122\0\1\u07f4\102\0\1\u07f5\143\0\1\u07f6\170\0"+ + "\1\u07f1\62\0\1\u07f7\163\0\1\u07f8\143\0\1\u07de\132\0"+ + "\1\u07f9\56\0\1\u07fa\172\0\1\u07fb\54\0\1\u07fc\131\0"+ + "\1\u07fd\125\0\1\u07fe\121\0\1\u07ff\130\0\1\u0800\146\0"+ + "\1\u05b2\137\0\1\u0801\63\0\1\u0802\133\0\1\u029d\125\0"+ + "\1\u07f1\125\0\1\u0803\102\0\1\u0804\173\0\1\u066a\123\0"+ + "\1\u0805\103\0\1\u0806\150\0\1\u0807\102\0\1\u0808\127\0"+ + "\1\u0809\126\0\1\u068a\152\0\1\u05b2\74\0\1\u080a\150\0"+ + "\1\u06cf\45\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[172688]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, 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; + } + + + /* 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; + + /* 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 = + "\4\0\2\1\1\0\12\1\2\11\21\1\2\11\4\1"+ + "\1\11\35\1\1\11\5\1\1\11\10\1\1\11\6\1"+ + "\1\11\3\1\1\11\1\1\2\11\24\1\1\0\1\1"+ + "\1\0\7\1\2\0\1\11\54\1\2\0\122\1\2\0"+ + "\1\11\4\0\1\11\2\0\1\11\22\0\1\11\1\0"+ + "\1\1\2\0\2\11\3\1\1\0\14\1\2\11\3\1"+ + "\1\0\2\1\1\11\5\1\1\11\235\1\37\0\1\11"+ + "\2\0\1\11\15\1\1\11\1\1\1\0\5\1\1\11"+ + "\174\1\1\0\31\1\2\0\1\1\2\0\1\1\15\0"+ + "\1\11\12\0\1\1\1\0\1\11\16\1\1\0\167\1"+ + "\1\0\31\1\36\0\17\1\1\0\154\1\1\0\26\1"+ + "\23\0\14\1\1\0\2\1\1\0\3\1\1\0\114\1"+ + "\1\0\14\1\1\0\32\1\5\0\1\1\4\0\15\1"+ + "\4\0\3\1\2\0\102\1\2\0\11\1\1\0\33\1"+ + "\12\0\13\1\4\0\3\1\1\0\76\1\2\0\10\1"+ + "\1\11\27\1\5\0\4\1\1\0\5\1\4\0\1\1"+ + "\1\0\3\1\1\0\57\1\2\0\32\1\5\0\3\1"+ + "\2\0\3\1\4\0\3\1\1\0\47\1\2\0\23\1"+ + "\2\0\2\1\2\0\3\1\4\0\3\1\1\0\14\1"+ + "\1\0\7\1\1\0\16\1\1\0\26\1\2\0\2\1"+ + "\3\0\2\1\1\0\13\1\1\0\2\1\2\0\12\1"+ + "\1\0\23\1\2\0\1\1\2\0\2\1\1\0\7\1"+ + "\1\0\2\1\2\0\12\1\1\0\17\1\2\0\1\1"+ + "\2\0\2\1\1\0\4\1\1\0\1\1\1\0\1\1"+ + "\5\0\11\1\1\0\11\1\1\0\2\1\1\0\1\1"+ + "\2\0\1\1\1\0\2\1\1\0\1\1\5\0\10\1"+ + "\1\0\6\1\1\0\1\1\3\0\1\1\1\0\1\1"+ + "\1\0\1\1\5\0\5\1\1\0\5\1\1\0\1\1"+ + "\4\0\1\1\1\0\1\1\1\0\1\1\4\0\3\1"+ + "\1\0\3\1\1\0\1\1\4\0\1\1\1\0\1\1"+ + "\4\0\2\1\1\0\2\1\6\0\1\1\1\0\1\1"+ + "\4\0\1\1\7\0\1\1\1\0\1\1\30\0\1\1"+ + "\37\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[2058]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public GroovyTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = MULTILINE_STRING_SINGLE; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public GroovyTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public GroovyTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 200) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 21: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 49: break; + case 3: + { addToken(Token.IDENTIFIER); + } + case 50: break; + case 43: + { addToken(Token.LITERAL_BOOLEAN); + } + case 51: break; + case 6: + { start = zzMarkedPos-1; yybegin(STRING_DOUBLE); + } + case 52: break; + case 36: + { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); + } + case 53: break; + case 13: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 54: break; + case 35: + { addToken(Token.ERROR_CHAR); + } + case 55: break; + case 22: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 56: break; + case 5: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 57: break; + case 11: + { addToken(Token.ANNOTATION); + } + case 58: break; + case 29: + { addToken(Token.FUNCTION); + } + case 59: break; + case 34: + { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_SINGLE); + } + case 60: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 61: break; + case 37: + { boolean highlightedAsRegex = false; + if (zzBuffer[zzStartRead]=='~' || firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 62: break; + case 41: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_CHAR); + } + case 63: break; + case 46: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 64: break; + case 32: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; + } + case 65: break; + case 45: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 66: break; + case 15: + { /* Skip escaped chars, handles case: '\"""'. */ + } + case 67: break; + case 25: + { addToken(Token.LITERAL_CHAR); + } + case 68: break; + case 19: + { /* Skip escaped chars. */ + } + case 69: break; + case 40: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 70: break; + case 24: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 71: break; + case 27: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 72: break; + case 8: + { addToken(Token.WHITESPACE); + } + case 73: break; + case 31: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); + } + case 74: break; + case 39: + { addToken(Token.DATA_TYPE); + } + case 75: break; + case 30: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 76: break; + case 4: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 77: break; + case 33: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 78: break; + case 20: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 79: break; + case 17: + { /* Skip escaped chars, handles case: "\'''". */ + } + case 80: break; + case 38: + { start = zzMarkedPos-3; yybegin(DOCCOMMENT); + } + case 81: break; + case 28: + { addToken(Token.RESERVED_WORD); + } + case 82: break; + case 44: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 83: break; + case 48: + { addToken(Token.RESERVED_WORD_2); + } + case 84: break; + case 14: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 85: break; + case 10: + { addToken(Token.SEPARATOR); + } + case 86: break; + case 7: + { addNullToken(); return firstToken; + } + case 87: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 88: break; + case 9: + { addToken(Token.OPERATOR); + } + case 89: break; + case 18: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 90: break; + case 23: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 91: break; + case 47: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 92: break; + case 42: + { addToken(Token.COMMENT_MULTILINE); + } + case 93: break; + case 26: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 94: break; + case 1: + { + } + case 95: break; + case 16: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 96: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 2059: break; + case MULTILINE_STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 2060: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 2061: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 2062: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 2063: break; + case STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; + } + case 2064: break; + case MULTILINE_STRING_SINGLE: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 2065: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex new file mode 100644 index 0000000..e531436 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex @@ -0,0 +1,1349 @@ +/* + * 01/24/2005 + * + * HTMLTokenMaker.java - Generates tokens for HTML syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for HTML 5 files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated HTMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class HTMLTokenMaker +%extends AbstractMarkupTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + public static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <style> tag. + */ + public static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in JavaScript. + */ + public static final int INTERNAL_IN_JS = -10; + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + public static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_VALID = -13; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_VALID = -15; + + /** + * Internal type denoting a line ending in CSS. + */ + public static final int INTERNAL_CSS = -16; + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -17; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -18; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether closing markup tags are automatically completed for HTML. + */ + private static boolean completeCloseTags; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HTMLTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * Returns Token.MARKUP_TAG_NAME. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.PREPROCESSOR: + state = PI; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_CSS; + } + else { + state = Token.NULL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +// HTML-specific stuff. +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) +Identifier = ([^ \t\n<&]+) +EntityReference = ([&][^; \t]*[;]?) +InTagIdentifier = ([^ \t\n\"\'/=>]+) +EndScriptTag = ("") +EndStyleTag = ("") + +// General stuff. +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrUnderscore = ({Letter}|[_]) +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + + +// JavaScript stuff. +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) + +JS_TemplateLiteralExprStart = ("${") + +// CSS stuff. +CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) +CSS_AtKeyword = ("@"{CSS_SelectorPiece}) +CSS_Id = ("#"{CSS_SelectorPiece}) +CSS_Separator = ([;\(\)\[\]]) +CSS_MlcStart = ({JS_MLCBegin}) +CSS_MlcEnd = ({JS_MLCEnd}) +CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) +CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) +CSS_Value = ({CSS_ValueChar}*) +CSS_Function = ({CSS_Value}\() +CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) +CSS_Hex = ("#"[0-9a-fA-F]+) +CSS_Number = ({CSS_Digits}|{CSS_Hex}) + + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state COMMENT +%state PI +%state DTD +%state INTAG +%state INTAG_CHECK_TAG_NAME +%state INATTR_DOUBLE +%state INATTR_SINGLE +%state INTAG_SCRIPT +%state INATTR_DOUBLE_SCRIPT +%state INATTR_SINGLE_SCRIPT +%state INTAG_STYLE +%state INATTR_DOUBLE_STYLE +%state INATTR_SINGLE_STYLE +%state JAVASCRIPT +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_EOL_COMMENT +%state CSS +%state CSS_PROPERTY +%state CSS_VALUE +%state CSS_STRING +%state CSS_CHAR_LITERAL +%state CSS_C_STYLE_COMMENT +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR + + +%% + + { + "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } + "-" {} + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } +} + + { + [^\n\?]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n>]+ {} + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } +} + + { + [Aa] | + [aA][bB][bB][rR] | + [aA][cC][rR][oO][nN][yY][mM] | + [aA][dD][dD][rR][eE][sS][sS] | + [aA][pP][pP][lL][eE][tT] | + [aA][rR][eE][aA] | + [aA][rR][tT][iI][cC][lL][eE] | + [aA][sS][iI][dD][eE] | + [aA][uU][dD][iI][oO] | + [bB] | + [bB][aA][sS][eE] | + [bB][aA][sS][eE][fF][oO][nN][tT] | + [bB][dD][oO] | + [bB][gG][sS][oO][uU][nN][dD] | + [bB][iI][gG] | + [bB][lL][iI][nN][kK] | + [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] | + [bB][oO][dD][yY] | + [bB][rR] | + [bB][uU][tT][tT][oO][nN] | + [cC][aA][nN][vV][aA][sS] | + [cC][aA][pP][tT][iI][oO][nN] | + [cC][eE][nN][tT][eE][rR] | + [cC][iI][tT][eE] | + [cC][oO][dD][eE] | + [cC][oO][lL] | + [cC][oO][lL][gG][rR][oO][uU][pP] | + [cC][oO][mM][mM][aA][nN][dD] | + [cC][oO][mM][mM][eE][nN][tT] | + [dD][dD] | + [dD][aA][tT][aA][gG][rR][iI][dD] | + [dD][aA][tT][aA][lL][iI][sS][tT] | + [dD][aA][tT][aA][tT][eE][mM][pP][lL][aA][tT][eE] | + [dD][eE][lL] | + [dD][eE][tT][aA][iI][lL][sS] | + [dD][fF][nN] | + [dD][iI][aA][lL][oO][gG] | + [dD][iI][rR] | + [dD][iI][vV] | + [dD][lL] | + [dD][tT] | + [eE][mM] | + [eE][mM][bB][eE][dD] | + [eE][vV][eE][nN][tT][sS][oO][uU][rR][cC][eE] | + [fF][iI][eE][lL][dD][sS][eE][tT] | + [fF][iI][gG][uU][rR][eE] | + [fF][oO][nN][tT] | + [fF][oO][oO][tT][eE][rR] | + [fF][oO][rR][mM] | + [fF][rR][aA][mM][eE] | + [fF][rR][aA][mM][eE][sS][eE][tT] | + [hH][123456] | + [hH][eE][aA][dD] | + [hH][eE][aA][dD][eE][rR] | + [hH][rR] | + [hH][tT][mM][lL] | + [iI] | + [iI][fF][rR][aA][mM][eE] | + [iI][lL][aA][yY][eE][rR] | + [iI][mM][gG] | + [iI][nN][pP][uU][tT] | + [iI][nN][sS] | + [iI][sS][iI][nN][dD][eE][xX] | + [kK][bB][dD] | + [kK][eE][yY][gG][eE][nN] | + [lL][aA][bB][eE][lL] | + [lL][aA][yY][eE][rR] | + [lL][eE][gG][eE][nN][dD] | + [lL][iI] | + [lL][iI][nN][kK] | + [mM][aA][pP] | + [mM][aA][rR][kK] | + [mM][aA][rR][qQ][uU][eE][eE] | + [mM][eE][nN][uU] | + [mM][eE][tT][aA] | + [mM][eE][tT][eE][rR] | + [mM][uU][lL][tT][iI][cC][oO][lL] | + [nN][aA][vV] | + [nN][eE][sS][tT] | + [nN][oO][bB][rR] | + [nN][oO][eE][mM][bB][eE][dD] | + [nN][oO][fF][rR][aA][mM][eE][sS] | + [nN][oO][lL][aA][yY][eE][rR] | + [nN][oO][sS][cC][rR][iI][pP][tT] | + [oO][bB][jJ][eE][cC][tT] | + [oO][lL] | + [oO][pP][tT][gG][rR][oO][uU][pP] | + [oO][pP][tT][iI][oO][nN] | + [oO][uU][tT][pP][uU][tT] | + [pP] | + [pP][aA][rR][aA][mM] | + [pP][lL][aA][iI][nN][tT][eE][xX][tT] | + [pP][rR][eE] | + [pP][rR][oO][gG][rR][eE][sS][sS] | + [qQ] | + [rR][uU][lL][eE] | + [sS] | + [sS][aA][mM][pP] | + [sS][cC][rR][iI][pP][tT] | + [sS][eE][cC][tT][iI][oO][nN] | + [sS][eE][lL][eE][cC][tT] | + [sS][eE][rR][vV][eE][rR] | + [sS][mM][aA][lL][lL] | + [sS][oO][uU][rR][cC][eE] | + [sS][pP][aA][cC][eE][rR] | + [sS][pP][aA][nN] | + [sS][tT][rR][iI][kK][eE] | + [sS][tT][rR][oO][nN][gG] | + [sS][tT][yY][lL][eE] | + [sS][uU][bB] | + [sS][uU][pP] | + [tT][aA][bB][lL][eE] | + [tT][bB][oO][dD][yY] | + [tT][dD] | + [tT][eE][xX][tT][aA][rR][eE][aA] | + [tT][fF][oO][oO][tT] | + [tT][hH] | + [tT][hH][eE][aA][dD] | + [tT][iI][mM][eE] | + [tT][iI][tT][lL][eE] | + [tT][rR] | + [tT][tT] | + [uU] | + [uU][lL] | + [vV][aA][rR] | + [vV][iI][dD][eE][oO] { addToken(Token.MARKUP_TAG_NAME); } + {InTagIdentifier} { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } + . { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} + + { + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } +} + + { + + {EndScriptTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + + // ECMA 3+ keywords. + "break" | + "continue" | + "delete" | + "else" | + "for" | + "function" | + "if" | + "in" | + "new" | + "this" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //JavaScript 1.6 + "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + + // Reserved (but not yet used) ECMA keywords. + "abstract" { addToken(Token.RESERVED_WORD); } + "boolean" { addToken(Token.DATA_TYPE); } + "byte" { addToken(Token.DATA_TYPE); } + "case" { addToken(Token.RESERVED_WORD); } + "catch" { addToken(Token.RESERVED_WORD); } + "char" { addToken(Token.DATA_TYPE); } + "class" { addToken(Token.RESERVED_WORD); } + "const" { addToken(Token.RESERVED_WORD); } + "debugger" { addToken(Token.RESERVED_WORD); } + "default" { addToken(Token.RESERVED_WORD); } + "do" { addToken(Token.RESERVED_WORD); } + "double" { addToken(Token.DATA_TYPE); } + "enum" { addToken(Token.RESERVED_WORD); } + "export" { addToken(Token.RESERVED_WORD); } + "extends" { addToken(Token.RESERVED_WORD); } + "final" { addToken(Token.RESERVED_WORD); } + "finally" { addToken(Token.RESERVED_WORD); } + "float" { addToken(Token.DATA_TYPE); } + "goto" { addToken(Token.RESERVED_WORD); } + "implements" { addToken(Token.RESERVED_WORD); } + "import" { addToken(Token.RESERVED_WORD); } + "instanceof" { addToken(Token.RESERVED_WORD); } + "int" { addToken(Token.DATA_TYPE); } + "interface" { addToken(Token.RESERVED_WORD); } + "long" { addToken(Token.DATA_TYPE); } + "native" { addToken(Token.RESERVED_WORD); } + "package" { addToken(Token.RESERVED_WORD); } + "private" { addToken(Token.RESERVED_WORD); } + "protected" { addToken(Token.RESERVED_WORD); } + "public" { addToken(Token.RESERVED_WORD); } + "short" { addToken(Token.DATA_TYPE); } + "static" { addToken(Token.RESERVED_WORD); } + "super" { addToken(Token.RESERVED_WORD); } + "switch" { addToken(Token.RESERVED_WORD); } + "synchronized" { addToken(Token.RESERVED_WORD); } + "throw" { addToken(Token.RESERVED_WORD); } + "throws" { addToken(Token.RESERVED_WORD); } + "transient" { addToken(Token.RESERVED_WORD); } + "try" { addToken(Token.RESERVED_WORD); } + "volatile" { addToken(Token.RESERVED_WORD); } + "null" { addToken(Token.RESERVED_WORD); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addEndToken(INTERNAL_IN_JS); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf<\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf<\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtKeyword} { addToken(Token.REGEX); } + {CSS_Id} { addToken(Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Property} { addToken(Token.RESERVED_WORD); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.ANNOTATION); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped chars. */ } + \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {CSS_MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java new file mode 100644 index 0000000..cb3d106 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java @@ -0,0 +1,3236 @@ +/* The following code was generated by JFlex 1.4.1 on 12/30/16 12:26 AM */ + +/* + * 01/24/2005 + * + * HTMLTokenMaker.java - Generates tokens for HTML syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.util.Stack; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.HtmlOccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.OccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for HTML 5 files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated HTMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ + +public class HTMLTokenMaker extends AbstractMarkupTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INATTR_SINGLE_SCRIPT = 10; + public static final int JS_CHAR = 16; + public static final int CSS_STRING = 22; + public static final int JS_MLC = 17; + public static final int CSS_CHAR_LITERAL = 23; + public static final int INTAG_SCRIPT = 8; + public static final int JS_TEMPLATE_LITERAL_EXPR = 26; + public static final int CSS_PROPERTY = 20; + public static final int CSS_C_STYLE_COMMENT = 24; + public static final int CSS = 19; + public static final int CSS_VALUE = 21; + public static final int COMMENT = 1; + public static final int INATTR_DOUBLE_SCRIPT = 9; + public static final int PI = 2; + public static final int JAVASCRIPT = 14; + public static final int INTAG = 4; + public static final int INTAG_CHECK_TAG_NAME = 5; + public static final int INATTR_SINGLE_STYLE = 13; + public static final int DTD = 3; + public static final int JS_EOL_COMMENT = 18; + public static final int INATTR_DOUBLE_STYLE = 12; + public static final int INATTR_SINGLE = 7; + public static final int JS_TEMPLATE_LITERAL = 25; + public static final int YYINITIAL = 0; + public static final int INATTR_DOUBLE = 6; + public static final int JS_STRING = 15; + public static final int INTAG_STYLE = 11; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\2\1\0\1\1\1\33\22\0\1\4\1\51\1\7"+ + "\1\34\1\36\1\50\1\5\1\110\1\105\1\104\1\37\1\42\1\45"+ + "\1\31\1\43\1\10\1\25\6\125\1\27\2\24\1\53\1\6\1\3"+ + "\1\46\1\17\1\52\1\103\1\112\1\26\1\12\1\116\1\22\1\41"+ + "\1\120\1\124\1\14\1\126\1\121\1\21\1\115\1\114\1\113\1\15"+ + "\1\122\1\13\1\11\1\16\1\117\1\123\1\23\1\40\1\20\1\23"+ + "\1\107\1\35\1\107\1\47\1\30\1\130\1\71\1\102\1\66\1\70"+ + "\1\76\1\73\1\57\1\65\1\56\1\126\1\100\1\67\1\77\1\64"+ + "\1\62\1\75\1\122\1\61\1\72\1\63\1\32\1\101\1\111\1\106"+ + "\1\74\1\127\1\60\1\55\1\44\1\54\uff81\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 = + "\6\0\2\1\1\0\2\1\1\0\2\1\7\0\1\2"+ + "\5\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ + "\5\1\1\10\2\1\1\11\1\12\2\13\1\14\1\15"+ + "\1\16\1\17\1\20\1\21\1\22\1\23\2\21\2\23"+ + "\3\21\2\23\5\21\1\23\3\21\1\23\1\1\1\24"+ + "\1\1\1\25\1\15\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\1\36\2\17\1\2\1\37\1\17"+ + "\2\2\1\17\2\40\1\17\1\2\1\35\2\17\1\2"+ + "\1\41\1\35\17\2\1\42\2\2\1\43\1\1\1\44"+ + "\1\45\1\46\1\1\1\47\1\50\1\51\1\1\1\52"+ + "\6\1\1\53\4\1\1\54\1\55\1\54\1\56\1\54"+ + "\1\57\1\54\1\60\1\61\1\54\1\62\1\63\1\64"+ + "\2\63\1\65\1\63\1\66\1\67\1\70\1\71\1\70"+ + "\1\72\2\2\1\40\1\2\2\70\1\73\1\74\1\75"+ + "\1\76\1\77\1\100\1\101\1\1\1\102\2\1\1\103"+ + "\1\104\1\105\1\106\1\1\1\107\1\1\1\110\1\4"+ + "\2\111\1\112\1\113\1\6\5\0\1\114\31\21\1\23"+ + "\1\21\1\23\2\21\1\23\44\21\1\115\3\0\1\116"+ + "\1\0\1\117\1\17\1\35\1\2\1\17\1\120\1\40"+ + "\1\120\2\121\1\120\1\122\1\120\1\2\1\65\1\2"+ + "\1\65\17\2\1\65\34\2\1\123\1\124\1\125\1\0"+ + "\1\126\12\0\1\127\1\130\15\0\1\131\1\40\5\0"+ + "\1\40\1\0\1\77\1\132\1\133\1\134\1\135\2\111"+ + "\1\0\1\136\4\0\13\21\1\23\64\21\1\0\1\137"+ + "\1\0\1\35\1\2\1\121\1\0\2\122\1\2\1\57"+ + "\23\2\1\140\40\2\41\0\2\111\1\141\2\0\1\142"+ + "\22\21\1\23\5\21\1\23\12\21\1\0\1\143\1\35"+ + "\10\2\1\144\6\2\1\57\16\2\1\145\1\2\1\146"+ + "\4\2\1\0\1\1\3\0\1\147\3\0\1\150\6\0"+ + "\1\65\15\0\2\111\2\0\11\21\1\23\12\21\1\0"+ + "\1\35\7\2\1\65\10\2\1\65\6\2\24\0\1\111"+ + "\1\151\12\21\1\0\1\35\5\2\1\152\12\2\14\0"+ + "\1\153\3\21\1\0\10\2\10\0\1\21\1\0\3\2"+ + "\2\0\1\154\4\0\1\21\1\155\1\2\1\156\1\157"+ + "\6\0\1\160"; + + private static int [] zzUnpackAction() { + int [] result = new int[819]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\131\0\262\0\u010b\0\u0164\0\u01bd\0\u0216\0\u026f"+ + "\0\u02c8\0\u0321\0\u037a\0\u03d3\0\u042c\0\u0485\0\u04de\0\u0537"+ + "\0\u0590\0\u05e9\0\u0642\0\u069b\0\u06f4\0\u074d\0\u07a6\0\u07ff"+ + "\0\u0858\0\u08b1\0\u090a\0\u0963\0\u09bc\0\u0a15\0\u0a6e\0\u0ac7"+ + "\0\u0b20\0\u0b79\0\u0a15\0\u0bd2\0\u0c2b\0\u0c84\0\u0cdd\0\u0d36"+ + "\0\u0a15\0\u0d8f\0\u0de8\0\u0a15\0\u0a15\0\u0e41\0\u0e9a\0\u0a15"+ + "\0\u0ef3\0\u0a15\0\u0a15\0\u0a15\0\u0f4c\0\u0a15\0\u0fa5\0\u0ffe"+ + "\0\u1057\0\u10b0\0\u1109\0\u1162\0\u11bb\0\u1214\0\u126d\0\u12c6"+ + "\0\u131f\0\u1378\0\u13d1\0\u142a\0\u1483\0\u14dc\0\u1535\0\u158e"+ + "\0\u15e7\0\u0f4c\0\u1640\0\u0a15\0\u1699\0\u0a15\0\u16f2\0\u0a15"+ + "\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u174b\0\u0a15"+ + "\0\u17a4\0\u17fd\0\u0a15\0\u0a15\0\u1856\0\u18af\0\u1908\0\u1961"+ + "\0\u19ba\0\u1a13\0\u1a6c\0\u1ac5\0\u0a15\0\u1b1e\0\u1b77\0\u1bd0"+ + "\0\u0a15\0\u1c29\0\u1c82\0\u1cdb\0\u1d34\0\u1d8d\0\u1de6\0\u1e3f"+ + "\0\u1e98\0\u1ef1\0\u1f4a\0\u1fa3\0\u1ffc\0\u2055\0\u20ae\0\u2107"+ + "\0\u2160\0\u0a15\0\u21b9\0\u2212\0\u0a15\0\u226b\0\u0a15\0\u0a15"+ + "\0\u22c4\0\u231d\0\u0a15\0\u22c4\0\u0a15\0\u2376\0\u0a15\0\u23cf"+ + "\0\u2428\0\u2481\0\u24da\0\u2533\0\u258c\0\u0a15\0\u25e5\0\u263e"+ + "\0\u2697\0\u26f0\0\u0a15\0\u0a15\0\u2749\0\u0a15\0\u27a2\0\u27fb"+ + "\0\u2854\0\u28ad\0\u0a15\0\u2906\0\u0a15\0\u0a15\0\u0a15\0\u2749"+ + "\0\u27a2\0\u295f\0\u29b8\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u2749"+ + "\0\u0a15\0\u2a11\0\u2a6a\0\u2ac3\0\u2b1c\0\u2b75\0\u2bce\0\u0a15"+ + "\0\u0a15\0\u0a15\0\u0a15\0\u2c27\0\u0a15\0\u0a15\0\u2c80\0\u0a15"+ + "\0\u2cd9\0\u2d32\0\u0a15\0\u22c4\0\u2d8b\0\u0a15\0\u2de4\0\u0a15"+ + "\0\u2e3d\0\u0a15\0\u2e96\0\u2eef\0\u2f48\0\u2fa1\0\u0a15\0\u0a15"+ + "\0\u2ffa\0\u3053\0\u30ac\0\u3105\0\u315e\0\u0a15\0\u31b7\0\u3210"+ + "\0\u3269\0\u32c2\0\u331b\0\u3374\0\u33cd\0\u3426\0\u347f\0\u34d8"+ + "\0\u3531\0\u358a\0\u35e3\0\u363c\0\u3695\0\u36ee\0\u3747\0\u37a0"+ + "\0\u37f9\0\u3852\0\u38ab\0\u3904\0\u395d\0\u39b6\0\u3a0f\0\u3a68"+ + "\0\u3ac1\0\u3b1a\0\u3b73\0\u3bcc\0\u3c25\0\u3c7e\0\u3cd7\0\u3d30"+ + "\0\u3d89\0\u3de2\0\u3e3b\0\u3e94\0\u3eed\0\u3f46\0\u3f9f\0\u3ff8"+ + "\0\u4051\0\u40aa\0\u4103\0\u415c\0\u41b5\0\u420e\0\u4267\0\u42c0"+ + "\0\u4319\0\u4372\0\u43cb\0\u4424\0\u447d\0\u44d6\0\u452f\0\u4588"+ + "\0\u45e1\0\u463a\0\u4693\0\u46ec\0\u4745\0\u479e\0\u47f7\0\u4850"+ + "\0\u48a9\0\u0a15\0\u1b1e\0\u4902\0\u495b\0\u0a15\0\u49b4\0\u4a0d"+ + "\0\u495b\0\u4a66\0\u4abf\0\u4b18\0\u4b71\0\u4b71\0\u4bca\0\u4b71"+ + "\0\u4c23\0\u4c7c\0\u4cd5\0\u4d2e\0\u4d87\0\u4de0\0\u4e39\0\u18af"+ + "\0\u4e92\0\u4eeb\0\u4f44\0\u4f9d\0\u4ff6\0\u504f\0\u50a8\0\u5101"+ + "\0\u515a\0\u51b3\0\u520c\0\u5265\0\u52be\0\u5317\0\u5370\0\u53c9"+ + "\0\u5422\0\u547b\0\u54d4\0\u552d\0\u5586\0\u55df\0\u5638\0\u5691"+ + "\0\u56ea\0\u5743\0\u579c\0\u57f5\0\u584e\0\u58a7\0\u5900\0\u5959"+ + "\0\u59b2\0\u5a0b\0\u5a64\0\u5abd\0\u5b16\0\u5b6f\0\u5bc8\0\u5c21"+ + "\0\u5c7a\0\u5cd3\0\u5d2c\0\u5d85\0\u0a15\0\u5dde\0\u5e37\0\u5e90"+ + "\0\u0a15\0\u5ee9\0\u5f42\0\u5f9b\0\u5ff4\0\u604d\0\u60a6\0\u60ff"+ + "\0\u6158\0\u61b1\0\u620a\0\u0a15\0\u6263\0\u62bc\0\u6315\0\u636e"+ + "\0\u63c7\0\u6420\0\u6479\0\u64d2\0\u652b\0\u6584\0\u65dd\0\u6636"+ + "\0\u668f\0\u66e8\0\u6741\0\u0a15\0\u679a\0\u67f3\0\u684c\0\u68a5"+ + "\0\u68fe\0\u2b75\0\u6957\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u2e96"+ + "\0\u69b0\0\u6a09\0\u6a62\0\u0a15\0\u6abb\0\u6b14\0\u6b6d\0\u6bc6"+ + "\0\u6c1f\0\u6c78\0\u6cd1\0\u6d2a\0\u6d83\0\u6ddc\0\u6e35\0\u6e8e"+ + "\0\u6ee7\0\u6f40\0\u6f99\0\u6ff2\0\u704b\0\u70a4\0\u70fd\0\u7156"+ + "\0\u71af\0\u7208\0\u7261\0\u72ba\0\u7313\0\u736c\0\u73c5\0\u741e"+ + "\0\u7477\0\u74d0\0\u7529\0\u7582\0\u75db\0\u7634\0\u3b1a\0\u768d"+ + "\0\u76e6\0\u773f\0\u7798\0\u77f1\0\u784a\0\u78a3\0\u78fc\0\u7955"+ + "\0\u79ae\0\u7a07\0\u7a60\0\u7ab9\0\u7b12\0\u7b6b\0\u12c6\0\u7bc4"+ + "\0\u7c1d\0\u7c76\0\u7ccf\0\u7d28\0\u7d81\0\u7dda\0\u7e33\0\u7e8c"+ + "\0\u7ee5\0\u7f3e\0\u7f97\0\u7ff0\0\u8049\0\u80a2\0\u80fb\0\u8154"+ + "\0\u81ad\0\u8206\0\u825f\0\u82b8\0\u8311\0\u836a\0\u83c3\0\u4b71"+ + "\0\u841c\0\u8475\0\u84ce\0\u8527\0\u8580\0\u85d9\0\u8632\0\u868b"+ + "\0\u86e4\0\u873d\0\u8796\0\u87ef\0\u8848\0\u88a1\0\u88fa\0\u8953"+ + "\0\u89ac\0\u8a05\0\u8a5e\0\u8ab7\0\u8b10\0\u8b69\0\u18af\0\u8bc2"+ + "\0\u8c1b\0\u8c74\0\u8ccd\0\u8d26\0\u8d7f\0\u8dd8\0\u8e31\0\u8e8a"+ + "\0\u8ee3\0\u8f3c\0\u8f95\0\u8fee\0\u9047\0\u90a0\0\u90f9\0\u9152"+ + "\0\u91ab\0\u9204\0\u925d\0\u92b6\0\u930f\0\u9368\0\u93c1\0\u941a"+ + "\0\u9473\0\u94cc\0\u9525\0\u957e\0\u95d7\0\u9630\0\u9689\0\u96e2"+ + "\0\u973b\0\u9794\0\u97ed\0\u9846\0\u989f\0\u98f8\0\u9951\0\u99aa"+ + "\0\u9a03\0\u9a5c\0\u9ab5\0\u9b0e\0\u9b67\0\u9bc0\0\u9c19\0\u9c72"+ + "\0\u9ccb\0\u9d24\0\u9d7d\0\u9dd6\0\u9e2f\0\u9e88\0\u9ee1\0\u9f3a"+ + "\0\u9f93\0\u9fec\0\ua045\0\ua09e\0\ua0f7\0\ua150\0\ua1a9\0\ua202"+ + "\0\ua25b\0\ua2b4\0\u0a15\0\ua30d\0\ua366\0\ua3bf\0\ua418\0\ua471"+ + "\0\ua4ca\0\ua523\0\ua57c\0\ua5d5\0\ua62e\0\ua687\0\ua6e0\0\ua739"+ + "\0\ua792\0\ua7eb\0\ua844\0\ua89d\0\ua8f6\0\ua94f\0\ua9a8\0\uaa01"+ + "\0\uaa5a\0\uaab3\0\uab0c\0\uab65\0\u3c25\0\uabbe\0\u7529\0\uac17"+ + "\0\uac70\0\uacc9\0\uad22\0\uad7b\0\uadd4\0\uae2d\0\uae86\0\uaedf"+ + "\0\uaf38\0\uaf91\0\u0a15\0\uafea\0\ub043\0\ub09c\0\ub0f5\0\ub14e"+ + "\0\ub1a7\0\ub200\0\ub259\0\ub2b2\0\u18af\0\ub30b\0\ub364\0\ub3bd"+ + "\0\ub416\0\ub46f\0\ub4c8\0\u18af\0\ub521\0\ub57a\0\ub5d3\0\ub62c"+ + "\0\ub685\0\ub6de\0\ub737\0\ub790\0\ub7e9\0\ub842\0\ub89b\0\ub8f4"+ + "\0\ub94d\0\ub9a6\0\u18af\0\ub9ff\0\u18af\0\uba58\0\ubab1\0\ubb0a"+ + "\0\ubb63\0\u5e37\0\u0a15\0\ubbbc\0\ubc15\0\ubc6e\0\ubcc7\0\ubd20"+ + "\0\ubd79\0\ubdd2\0\ube2b\0\ube84\0\ubedd\0\ubf36\0\ubf8f\0\ubfe8"+ + "\0\uc041\0\u0a15\0\uc09a\0\uc0f3\0\uc14c\0\uc1a5\0\uc1fe\0\uc257"+ + "\0\uc2b0\0\uc309\0\uc362\0\uc3bb\0\uc414\0\uc46d\0\uc4c6\0\uc51f"+ + "\0\uc578\0\uc5d1\0\ua3bf\0\uc62a\0\uc683\0\uc6dc\0\uc735\0\uc78e"+ + "\0\uc7e7\0\uc840\0\uc899\0\uc8f2\0\uc94b\0\uc94b\0\uc9a4\0\uc9fd"+ + "\0\uca56\0\ucaaf\0\ucb08\0\ucb61\0\ucbba\0\ucc13\0\ucc6c\0\uccc5"+ + "\0\ucd1e\0\ucd77\0\ucdd0\0\uce29\0\uce82\0\ucedb\0\ucf34\0\ucf8d"+ + "\0\u87ef\0\ucfe6\0\ud03f\0\ud098\0\ud0f1\0\ud14a\0\ud1a3\0\ud1fc"+ + "\0\ud255\0\ud2ae\0\ud307\0\ud360\0\ud3b9\0\ud412\0\ud46b\0\ud4c4"+ + "\0\ud51d\0\ud576\0\ubcc7\0\ud5cf\0\ud628\0\ube2b\0\ud681\0\ud6da"+ + "\0\ud733\0\ud78c\0\ud7e5\0\ud83e\0\ud897\0\ud8f0\0\ud949\0\ud9a2"+ + "\0\ud9fb\0\uda54\0\udaad\0\udb06\0\udb5f\0\u2f48\0\udbb8\0\udc11"+ + "\0\udc6a\0\udcc3\0\udd1c\0\udd75\0\uddce\0\ude27\0\ude80\0\uded9"+ + "\0\udf32\0\udf8b\0\udfe4\0\ue03d\0\ue096\0\ue0ef\0\ue148\0\u18af"+ + "\0\ue1a1\0\ue1fa\0\ue253\0\ue2ac\0\ue305\0\ue35e\0\ue3b7\0\ue410"+ + "\0\ue469\0\ue4c2\0\ue51b\0\ue574\0\ue5cd\0\ue626\0\ue67f\0\ue6d8"+ + "\0\ue731\0\ue78a\0\ue7e3\0\ue83c\0\ue895\0\ue8ee\0\u2f48\0\ue947"+ + "\0\ue9a0\0\ue9f9\0\uea52\0\ueaab\0\ueb04\0\ueb5d\0\uebb6\0\uec0f"+ + "\0\uec68\0\uecc1\0\ued1a\0\ued73\0\uedcc\0\uee25\0\uee7e\0\ueed7"+ + "\0\uef30\0\uef89\0\uefe2\0\uf03b\0\uf094\0\uf0ed\0\uf146\0\uf19f"+ + "\0\uf1f8\0\uf251\0\u0a15\0\uf2aa\0\uf303\0\uf35c\0\uf3b5\0\uf40e"+ + "\0\u0a15\0\uf467\0\u0a15\0\u0a15\0\uf4c0\0\uf519\0\uf572\0\uf5cb"+ + "\0\uf624\0\uf67d\0\u0a15"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[819]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\34\1\35\1\36\1\37\1\40\1\41\123\34\2\42"+ + "\1\43\26\42\1\44\33\42\1\45\5\42\1\46\15\42"+ + "\1\47\17\42\2\50\1\51\47\50\1\52\56\50\2\53"+ + "\1\54\14\53\1\55\111\53\1\56\1\57\1\0\1\56"+ + "\1\40\2\56\1\60\1\61\6\56\1\62\26\56\1\63"+ + "\41\56\1\64\20\56\2\65\1\0\1\65\1\66\2\65"+ + "\2\66\1\67\1\70\1\71\1\72\1\73\1\74\1\66"+ + "\1\65\1\75\1\76\3\65\1\77\3\65\1\100\6\65"+ + "\1\101\4\65\1\66\7\65\1\72\2\65\1\71\1\102"+ + "\1\74\1\103\1\104\1\70\1\75\1\105\1\106\1\67"+ + "\1\101\1\65\1\73\1\76\1\107\1\110\1\111\1\77"+ + "\5\65\1\66\1\65\1\106\1\102\1\103\1\107\1\105"+ + "\1\100\1\65\1\110\1\112\1\111\1\104\4\65\7\113"+ + "\1\114\121\113\110\115\1\114\20\115\1\56\1\57\1\0"+ + "\1\56\1\40\2\56\1\116\1\117\6\56\1\120\26\56"+ + "\1\63\41\56\1\121\20\56\7\113\1\122\121\113\110\115"+ + "\1\122\20\115\1\56\1\57\1\0\1\56\1\40\2\56"+ + "\1\123\1\117\6\56\1\124\26\56\1\63\41\56\1\125"+ + "\20\56\7\113\1\126\121\113\110\115\1\126\20\115\1\127"+ + "\1\40\1\130\1\131\1\40\1\132\1\133\1\134\1\135"+ + "\3\136\1\137\2\136\1\140\4\136\1\141\1\142\1\136"+ + "\1\141\1\136\1\143\1\144\1\145\2\127\1\136\1\146"+ + "\2\136\1\147\1\150\1\151\1\133\4\146\3\63\1\152"+ + "\1\153\1\154\1\151\1\155\1\136\1\156\1\157\1\136"+ + "\1\160\1\161\1\162\1\163\1\164\1\165\1\136\1\166"+ + "\1\167\2\136\1\170\1\171\1\127\2\151\1\136\1\151"+ + "\1\172\1\173\2\136\1\174\10\136\1\141\2\136\1\175"+ + "\2\176\1\177\4\176\1\200\25\176\1\201\73\176\2\202"+ + "\1\203\32\202\1\204\52\202\1\205\20\202\2\206\1\207"+ + "\1\210\33\206\1\211\25\206\1\212\5\206\1\213\15\206"+ + "\1\214\17\206\2\215\1\216\1\217\61\215\1\220\5\215"+ + "\1\221\15\215\1\222\17\215\1\223\1\40\1\224\1\225"+ + "\1\40\1\223\1\151\1\226\1\227\6\230\1\63\4\230"+ + "\2\223\1\230\1\223\3\230\1\223\1\231\1\223\1\63"+ + "\3\230\1\63\1\230\1\223\1\133\2\63\3\223\1\232"+ + "\2\63\2\230\1\233\22\230\1\234\2\151\1\230\1\151"+ + "\1\235\14\230\1\223\2\230\1\223\1\236\1\40\1\237"+ + "\1\240\1\40\3\236\1\241\6\242\1\236\4\242\2\236"+ + "\1\242\1\236\3\242\4\236\1\243\2\242\2\236\1\244"+ + "\6\236\1\245\2\236\2\242\1\236\22\242\3\236\1\242"+ + "\2\236\14\242\1\236\2\242\1\236\1\246\1\40\1\247"+ + "\1\250\1\40\1\246\1\251\1\226\1\252\6\253\1\246"+ + "\4\253\2\254\1\253\1\254\1\253\1\255\1\253\1\246"+ + "\1\256\1\253\2\246\2\253\1\246\1\133\1\244\1\133"+ + "\3\246\1\257\4\246\2\253\1\246\22\253\1\246\1\260"+ + "\1\261\1\253\1\246\1\235\14\253\1\254\2\253\1\246"+ + "\2\176\1\262\4\176\1\263\25\176\1\264\73\176\2\202"+ + "\1\265\32\202\1\264\52\202\1\266\20\202\2\267\1\270"+ + "\34\267\1\271\25\267\1\212\5\267\1\213\15\267\1\214"+ + "\17\267\2\272\1\273\32\272\1\274\1\275\71\272\1\276"+ + "\2\277\1\300\33\277\1\301\5\277\1\302\64\277\2\34"+ + "\4\0\124\34\1\35\2\0\1\40\1\0\123\34\141\0"+ + "\1\303\1\304\5\305\1\0\10\305\2\0\1\305\5\0"+ + "\2\305\7\0\1\306\1\307\3\0\2\305\1\0\11\305"+ + "\1\304\10\305\3\0\1\305\2\0\17\305\2\0\1\40"+ + "\2\0\1\40\124\0\4\41\1\0\1\41\1\310\122\41"+ + "\2\42\1\0\26\42\1\0\33\42\1\0\5\42\1\0"+ + "\15\42\1\0\17\42\31\0\1\311\162\0\1\312\123\0"+ + "\1\313\4\0\1\314\156\0\1\315\17\0\2\50\1\0"+ + "\47\50\1\0\56\50\17\0\1\316\111\0\2\53\1\0"+ + "\14\53\1\0\111\53\2\56\1\0\1\56\1\0\2\56"+ + "\2\0\6\56\1\0\26\56\1\0\41\56\1\0\21\56"+ + "\1\57\1\0\1\56\1\40\2\56\2\0\6\56\1\0"+ + "\26\56\1\0\41\56\1\0\20\56\17\0\1\62\111\0"+ + "\2\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\41\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\1\65\1\317\2\65\1\320\1\321\1\0"+ + "\2\65\1\322\7\65\1\323\13\65\1\0\13\65\1\324"+ + "\1\321\2\65\1\317\2\65\1\325\3\65\1\320\1\322"+ + "\1\326\10\65\1\0\1\65\1\325\1\324\1\65\1\326"+ + "\1\65\1\323\13\65\1\0\1\65\1\0\2\65\2\0"+ + "\3\65\1\327\2\65\1\0\2\65\1\330\23\65\1\0"+ + "\7\65\1\327\3\65\1\331\6\65\1\332\4\65\1\330"+ + "\11\65\1\0\1\65\1\332\1\331\17\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\12\65\1\333\13\65"+ + "\1\0\41\65\1\0\6\65\1\333\13\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\334\5\65\1\0\1\65\1\335"+ + "\17\65\1\336\4\65\1\0\15\65\1\337\2\65\1\335"+ + "\2\65\1\334\1\336\3\65\1\340\10\65\1\0\3\65"+ + "\1\337\1\340\15\65\1\0\1\65\1\0\2\65\2\0"+ + "\2\65\1\341\3\65\1\0\1\65\1\342\24\65\1\0"+ + "\12\65\1\341\5\65\1\342\1\65\1\343\16\65\1\0"+ + "\1\65\1\343\20\65\1\0\1\65\1\0\2\65\2\0"+ + "\2\65\1\112\1\344\1\65\1\112\1\0\2\65\1\345"+ + "\3\65\1\346\12\65\1\347\4\65\1\0\7\65\1\344"+ + "\2\65\1\112\1\65\1\112\1\65\1\350\2\65\1\112"+ + "\1\351\1\65\1\347\2\65\1\345\3\65\1\346\5\65"+ + "\1\0\1\65\1\351\3\65\1\112\5\65\1\350\6\65"+ + "\1\0\1\65\1\0\2\65\2\0\3\65\1\352\2\65"+ + "\1\0\2\65\1\353\23\65\1\0\7\65\1\352\12\65"+ + "\1\354\4\65\1\353\11\65\1\0\1\65\1\354\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\30\65\1\355\1\65\1\356\6\65\1\0\4\65"+ + "\1\355\5\65\1\356\7\65\1\0\1\65\1\0\2\65"+ + "\2\0\2\65\1\112\1\340\2\65\1\0\1\65\1\357"+ + "\10\65\1\360\13\65\1\0\7\65\1\340\1\361\1\65"+ + "\1\112\1\362\4\65\1\357\1\363\1\364\16\65\1\0"+ + "\1\65\1\364\1\362\2\65\1\363\1\360\1\361\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\1\65"+ + "\1\112\24\65\1\0\20\65\1\112\20\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\365\1\366"+ + "\2\65\1\0\26\65\1\0\7\65\1\366\2\65\1\365"+ + "\1\367\25\65\1\0\2\65\1\367\17\65\1\0\1\65"+ + "\1\0\2\65\2\0\4\65\1\370\1\65\1\0\1\65"+ + "\1\112\4\65\1\371\3\65\1\372\13\65\1\0\20\65"+ + "\1\112\5\65\1\370\4\65\1\371\5\65\1\0\6\65"+ + "\1\372\13\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\373\23\65\1\0\13\65\1\374\6\65"+ + "\1\375\4\65\1\373\11\65\1\0\1\65\1\375\1\374"+ + "\17\65\1\0\1\65\1\0\2\65\2\0\2\65\1\112"+ + "\2\65\1\376\1\0\2\65\1\377\23\65\1\0\12\65"+ + "\1\112\1\65\1\376\12\65\1\377\11\65\1\0\14\65"+ + "\1\112\5\65\1\0\1\65\1\0\2\65\2\0\3\65"+ + "\1\u0100\1\65\1\112\1\0\1\65\1\112\1\u0101\16\65"+ + "\1\u0102\4\65\1\0\7\65\1\u0100\4\65\1\112\3\65"+ + "\2\112\1\u0103\1\65\1\u0102\2\65\1\u0101\11\65\1\0"+ + "\1\65\1\u0103\3\65\1\112\14\65\1\0\1\65\1\0"+ + "\2\65\2\0\1\u0104\1\u0105\1\u0106\1\65\1\u0107\1\65"+ + "\1\0\6\65\1\u0108\3\65\1\u0109\13\65\1\0\12\65"+ + "\1\u0106\4\65\1\u0105\1\65\1\u010a\1\65\1\u0104\2\65"+ + "\1\u0107\4\65\1\u0108\5\65\1\0\5\65\1\u010a\1\u0109"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u010b\7\65\1\u010c\13\65\1\0\22\65\1\u010d"+ + "\4\65\1\u010b\11\65\1\0\1\65\1\u010d\4\65\1\u010c"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u010e\3\65\1\u010f\17\65\1\0\27\65\1\u010e"+ + "\3\65\1\u010f\5\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\3\65\1\u0110\2\65\1\0\26\65\1\0"+ + "\7\65\1\u0110\12\65\1\u0111\16\65\1\0\1\65\1\u0111"+ + "\16\65\7\113\1\0\121\113\110\115\1\0\20\115\17\0"+ + "\1\u0112\111\0\1\127\10\0\6\127\1\0\11\127\1\0"+ + "\1\127\1\0\3\127\1\0\2\127\14\0\2\127\1\0"+ + "\23\127\2\0\1\127\2\0\17\127\4\0\1\u0113\4\0"+ + "\1\u0114\35\0\1\63\67\0\1\63\40\0\1\63\62\0"+ + "\10\u0115\1\u0116\24\u0115\1\u0117\1\u0115\1\u0118\6\u0115\1\u0119"+ + "\62\u0115\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u011b\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\20\0\1\u011c\26\0\1\63\62\0\1\u011d\10\0\6\u011d"+ + "\1\0\1\u011d\1\u011e\1\u011f\1\u011d\2\141\1\u011d\1\141"+ + "\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u0120"+ + "\1\0\1\u0121\12\0\2\u011d\1\0\6\u011d\1\u011e\1\u0120"+ + "\2\u011d\1\u0120\2\u011d\1\u011f\5\u011d\2\0\1\u011d\2\0"+ + "\5\u011d\1\u0120\6\u011d\1\141\2\u011d\1\0\1\u011d\10\0"+ + "\6\u011d\1\0\1\u011d\1\u011e\1\u011f\1\u011d\1\u0122\1\u0123"+ + "\1\u011d\1\u0123\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0"+ + "\1\u0124\1\u0120\1\0\1\u0121\12\0\2\u011d\1\0\6\u011d"+ + "\1\u011e\1\u0120\2\u011d\1\u0120\2\u011d\1\u011f\5\u011d\2\0"+ + "\1\u0124\2\0\5\u011d\1\u0120\6\u011d\1\u0123\2\u011d\32\0"+ + "\1\63\14\0\1\63\62\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\3\136\1\u0125\16\136\1\127"+ + "\2\0\1\136\2\0\17\136\47\0\1\63\124\0\1\63"+ + "\3\0\1\63\106\0\2\u0121\1\0\1\u0121\75\0\1\u0121"+ + "\51\0\1\63\6\0\1\63\53\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u0126\5\136"+ + "\1\u0127\1\u0128\3\136\1\u0129\3\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u012a\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\15\136\1\u012b\4\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\1\u012c\3\136\1\u012d"+ + "\6\136\1\u012e\6\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u012f"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\10\136\1\u0130\4\136\1\u0131\4\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\1\136\1\u0132\2\136\1\u0133"+ + "\1\136\1\u0134\1\136\1\u0135\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u0136\13\136\1\u0137\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\136\1\u0138"+ + "\13\136\1\u0139\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\21\136\1\u013a\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u013b"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u013c\1\136\1\u013d\6\136\1\u013e\6\136"+ + "\1\127\2\0\1\136\2\0\1\u013f\16\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\u0140\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\u0141\1\136\1\0"+ + "\1\136\1\u0142\4\136\1\u0143\1\136\1\u0144\11\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\u0145\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\1\u0146\7\136\1\u0147"+ + "\11\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u0148\2\136\1\u0149\1\136\1\u014a\1\u014b\6\136\1\u014c"+ + "\1\136\1\127\2\0\1\u014d\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\1\136"+ + "\1\u014e\6\136\1\u0142\11\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\u014f\1\u0150\11\136\1\u0151\6\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\1\u0152\1\136\1\0\4\136\1\u0153"+ + "\15\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u0154\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\2\176\1\0\4\176\1\0\25\176\1\0\73\176\2\u0155"+ + "\1\0\27\u0155\1\u0156\53\u0155\1\u0157\22\u0155\2\202\1\0"+ + "\32\202\1\0\52\202\1\0\20\202\2\206\2\0\33\206"+ + "\1\0\25\206\1\0\5\206\1\0\15\206\1\0\17\206"+ + "\10\0\1\u0158\130\0\1\u0159\203\0\1\u015a\123\0\1\u015b"+ + "\4\0\1\u015c\156\0\1\u015d\17\0\2\215\2\0\61\215"+ + "\1\0\5\215\1\0\15\215\1\0\17\215\10\0\1\u015e"+ + "\203\0\1\u015f\123\0\1\u0160\4\0\1\u0161\156\0\1\u0162"+ + "\27\0\1\u0163\157\0\1\u0164\102\0\6\230\1\0\13\230"+ + "\5\0\2\230\1\0\1\230\12\0\2\230\1\0\22\230"+ + "\3\0\1\230\2\0\17\230\12\0\6\u0165\1\0\4\u0165"+ + "\2\0\1\u0165\1\0\3\u0165\4\0\3\u0165\1\0\1\u0165"+ + "\12\0\2\u0165\1\0\22\u0165\3\0\1\u0165\2\0\14\u0165"+ + "\1\0\2\u0165\54\0\1\u0166\5\0\1\u0167\1\u0168\1\u0169"+ + "\1\u016a\1\u016b\1\u016c\1\u016d\1\u016e\1\u016f\1\0\1\u0170"+ + "\2\0\1\u0171\2\0\1\u0172\40\0\6\u0173\1\0\4\u0173"+ + "\2\0\1\u0173\1\0\3\u0173\4\0\3\u0173\1\0\1\u0173"+ + "\12\0\2\u0173\1\0\22\u0173\3\0\1\u0173\2\0\14\u0173"+ + "\1\0\2\u0173\12\0\6\242\1\0\13\242\5\0\2\242"+ + "\14\0\2\242\1\0\22\242\3\0\1\242\2\0\17\242"+ + "\12\0\6\242\1\0\4\242\2\0\1\242\1\0\3\242"+ + "\5\0\2\242\14\0\2\242\1\0\22\242\3\0\1\242"+ + "\2\0\14\242\1\0\2\242\11\0\7\253\1\0\4\253"+ + "\2\0\1\253\1\0\3\253\2\0\1\253\1\0\1\u0164"+ + "\2\253\14\0\2\253\1\0\22\253\2\0\1\261\1\253"+ + "\2\0\14\253\1\0\2\253\11\0\7\253\1\0\4\253"+ + "\2\0\1\253\1\0\3\253\2\0\1\253\2\0\2\253"+ + "\14\0\2\253\1\0\22\253\2\0\1\261\1\253\2\0"+ + "\14\253\1\0\2\253\25\0\2\254\1\0\1\254\13\0"+ + "\1\254\4\0\1\u0174\5\0\1\u0175\7\0\1\u0176\3\0"+ + "\1\u0174\2\0\1\u0177\1\u0178\1\u0179\25\0\1\254\13\0"+ + "\7\253\1\0\4\253\2\254\1\253\1\254\3\253\2\0"+ + "\1\253\2\0\2\253\14\0\2\253\1\0\22\253\2\0"+ + "\1\261\1\253\2\0\14\253\1\254\2\253\13\0\1\u017a"+ + "\7\0\1\u017a\1\0\4\u017a\11\0\1\u017a\24\0\1\u017a"+ + "\1\0\2\u017a\1\0\1\u017a\2\0\1\u017a\3\0\1\u017a"+ + "\7\0\1\u017a\3\0\1\u017a\6\0\1\u017a\61\0\1\u017b"+ + "\52\0\2\u017c\1\0\126\u017c\2\267\1\0\34\267\1\0"+ + "\25\267\1\0\5\267\1\0\15\267\1\0\17\267\10\0"+ + "\1\u017d\120\0\2\272\1\0\32\272\2\0\71\272\61\0"+ + "\1\u017e\50\0\2\277\1\0\33\277\1\0\5\277\1\0"+ + "\64\277\60\0\1\u017f\61\0\6\u0180\1\0\10\u0180\2\0"+ + "\1\u0180\5\0\2\u0180\14\0\2\u0180\1\0\22\u0180\3\0"+ + "\1\u0180\2\0\17\u0180\12\0\1\305\1\u0181\3\305\1\u0182"+ + "\1\0\10\305\2\0\1\305\5\0\2\305\14\0\2\305"+ + "\1\0\2\305\1\u0182\2\305\1\u0181\14\305\3\0\1\305"+ + "\2\0\17\305\12\0\6\305\1\0\10\305\2\0\1\305"+ + "\5\0\2\305\14\0\2\305\1\0\22\305\3\0\1\305"+ + "\2\0\17\305\32\0\1\u0183\116\0\1\u0184\174\0\1\u0185"+ + "\134\0\1\u0186\136\0\1\u0187\144\0\1\u0188\17\0\2\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u0189\3\65"+ + "\1\0\26\65\1\0\12\65\1\u0189\26\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\22\65\1\u018a\16\65\1\0\1\65\1\u018a\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u018b\3\65"+ + "\1\0\1\333\25\65\1\0\12\65\1\u018b\12\65\1\333"+ + "\13\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\1\65\1\u018c\1\u018d\3\65\1\0\1\65\1\u018e\24\65"+ + "\1\0\12\65\1\u018d\4\65\1\u018c\1\u018e\20\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\4\65\1\112"+ + "\1\65\1\0\6\65\1\112\17\65\1\0\26\65\1\112"+ + "\4\65\1\112\5\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\12\65\1\u018f\13\65\1\0"+ + "\41\65\1\0\6\65\1\u018f\13\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\30\65\1\u0190"+ + "\10\65\1\0\4\65\1\u0190\15\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\22\65\1\u0191"+ + "\16\65\1\0\1\65\1\u0191\20\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\u0192\1\0\26\65\1\0\14\65"+ + "\1\u0192\24\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\26\65\1\0\15\65\1\u0193\23\65"+ + "\1\0\3\65\1\u0193\16\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\1\65\1\u0194\24\65\1\0\20\65"+ + "\1\u0194\1\u0192\6\65\1\u0195\10\65\1\0\4\65\1\u0195"+ + "\1\u0192\14\65\1\0\1\65\1\0\2\65\2\0\4\65"+ + "\1\u018c\1\65\1\0\26\65\1\0\15\65\1\u0196\10\65"+ + "\1\u018c\12\65\1\0\3\65\1\u0196\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\1\65\1\u0192\24\65"+ + "\1\0\20\65\1\u0192\20\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\3\65\1\u0197\2\65\1\0\26\65"+ + "\1\0\7\65\1\u0197\31\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u0198\16\65\1\0\1\65\1\u0198\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\2\65\1\u0199\3\65\1\0\26\65"+ + "\1\0\12\65\1\u0199\26\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\112\3\65\1\u019a\1\65\1\0"+ + "\26\65\1\0\23\65\1\112\2\65\1\u019a\12\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\10\65\1\112\30\65\1\0\7\65\1\112"+ + "\12\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\112\23\65\1\0\13\65\1\u019b\13\65\1\112"+ + "\11\65\1\0\2\65\1\u019b\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\22\65\1\u019c"+ + "\16\65\1\0\1\65\1\u019c\20\65\1\0\1\65\1\0"+ + "\2\65\2\0\2\65\1\u019d\3\65\1\0\26\65\1\0"+ + "\12\65\1\u019d\26\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\333\1\0\26\65\1\0\14\65"+ + "\1\333\13\65\1\u0192\10\65\1\0\4\65\1\u0192\15\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\20\65"+ + "\1\u019e\5\65\1\0\37\65\1\u019e\1\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\13\65\1\362\25\65\1\0\2\65\1\362\17\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\13\65\1\u019f\25\65\1\0\2\65\1\u019f\17\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\2\65"+ + "\1\u01a0\23\65\1\0\27\65\1\u01a0\11\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\6\65"+ + "\1\333\17\65\1\0\33\65\1\333\5\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\15\65\1\u01a1\23\65\1\0\3\65\1\u01a1\16\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\10\65\1\u01a2\30\65\1\0\7\65\1\u01a2\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\1\u01a3"+ + "\5\65\1\u01a4\17\65\1\0\25\65\1\u01a3\5\65\1\u01a4"+ + "\5\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\6\65\1\u01a5\17\65\1\0\33\65\1\u01a5"+ + "\5\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\2\65\1\u01a6\23\65\1\0\27\65\1\u01a6"+ + "\11\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\3\65\1\u01a7\2\65\1\0\26\65\1\0\7\65\1\u01a7"+ + "\3\65\1\u01a8\25\65\1\0\2\65\1\u01a8\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\5\65\1\u01a9\1\0\26\65"+ + "\1\0\14\65\1\u01a9\24\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\u01aa\5\65\1\0\26\65\1\0"+ + "\23\65\1\u01aa\15\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\21\65\1\u01ab"+ + "\17\65\1\0\5\65\1\u01ab\14\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\13\65\1\112"+ + "\25\65\1\0\2\65\1\112\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\1\u01ac\5\65\1\0\26\65\1\0\23\65"+ + "\1\u01ac\15\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\26\65\1\0\22\65\1\u01ad\16\65"+ + "\1\0\1\65\1\u01ad\20\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u01ae\23\65\1\0\10\65"+ + "\1\u01af\16\65\1\u01ae\11\65\1\0\7\65\1\u01af\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u01b0\3\65"+ + "\1\0\26\65\1\0\12\65\1\u01b0\1\u0193\1\65\1\u01b1"+ + "\23\65\1\0\2\65\1\u0193\1\u01b1\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\5\65\1\u01b2\1\0\26\65\1\0"+ + "\14\65\1\u01b2\24\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\41\65\1\0"+ + "\15\65\1\u018e\4\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u01b3\1\0\26\65\1\0\14\65\1\u01b3\24\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\1\u01b1"+ + "\5\65\1\0\26\65\1\0\23\65\1\u01b1\15\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\1\u01b4\5\65"+ + "\1\0\1\65\1\335\1\u01b5\3\65\1\u0111\12\65\1\u01b6"+ + "\4\65\1\0\20\65\1\335\2\65\1\u01b4\1\u01b6\2\65"+ + "\1\u01b5\3\65\1\u0111\5\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\32\65"+ + "\1\112\6\65\1\0\12\65\1\112\7\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\30\65"+ + "\1\u01b7\10\65\1\0\4\65\1\u01b7\15\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u01b8\16\65\1\0\1\65\1\u01b8\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\2\65\1\112\3\65\1\0\26\65"+ + "\1\0\12\65\1\112\7\65\1\u01b9\7\65\1\112\6\65"+ + "\1\0\1\65\1\u01b9\10\65\1\112\7\65\1\0\1\65"+ + "\1\0\2\65\2\0\5\65\1\u01ba\1\0\1\65\1\112"+ + "\24\65\1\0\14\65\1\u01ba\3\65\1\112\20\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\15\65\1\112\23\65\1\0\3\65\1\112"+ + "\16\65\1\0\1\65\1\0\2\65\2\0\5\65\1\u01bb"+ + "\1\0\26\65\1\0\14\65\1\u01bb\24\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\3\65\1\u01bc\2\65"+ + "\1\0\26\65\1\0\7\65\1\u01bc\31\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u01bd\3\65"+ + "\1\0\26\65\1\0\12\65\1\u01bd\26\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\5\65\1\u01be\1\0"+ + "\2\65\1\u01bf\23\65\1\0\14\65\1\u01be\12\65\1\u01bf"+ + "\11\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\4\65\1\u01c0\1\65\1\0\26\65\1\0\26\65\1\u01c0"+ + "\12\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\6\65\1\u0111\17\65\1\0\33\65\1\u0111"+ + "\5\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\21\65\1\u01c1\17\65\1\0"+ + "\5\65\1\u01c1\14\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\21\65\1\u01c2\17\65\1\0"+ + "\5\65\1\u01c2\14\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u01c3\1\0\26\65\1\0\14\65\1\u01c3\1\u01c4"+ + "\23\65\1\0\3\65\1\u01c4\16\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\1\65\1\u01c5\24\65\1\0"+ + "\20\65\1\u01c5\20\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\2\65\1\u01c6\1\65\1\112\1\65\1\0"+ + "\26\65\1\0\12\65\1\u01c6\13\65\1\112\12\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\1\u01c7\25\65\1\0\25\65\1\u01c7\13\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\21\65\1\112\17\65\1\0\5\65\1\112\14\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\21\65\1\u01c8\17\65\1\0\5\65\1\u01c8\14\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\112\3\65"+ + "\1\0\26\65\1\0\12\65\1\112\26\65\1\0\20\65"+ + "\11\0\1\u01c9\60\0\1\u01c9\36\0\10\u0115\1\u01ca\24\u0115"+ + "\1\u0117\75\u0115\1\0\126\u0115\37\0\1\u01cb\71\0\1\127"+ + "\10\0\6\127\1\0\11\127\1\0\1\u01cc\1\0\3\127"+ + "\1\0\2\127\14\0\2\127\1\0\23\127\2\0\1\127"+ + "\2\0\17\127\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\12\136\1\u01cd\7\136\1\127\2\0"+ + "\1\136\2\0\17\136\20\0\1\146\26\0\1\63\62\0"+ + "\1\u011d\10\0\6\u011d\1\0\11\u011d\1\0\1\u011d\1\0"+ + "\3\u011d\1\0\2\u011d\14\0\2\u011d\1\0\23\u011d\2\0"+ + "\1\u011d\2\0\17\u011d\1\0\1\u011d\10\0\6\u011d\1\0"+ + "\4\u011d\2\u01ce\1\u011d\1\u01ce\1\u011d\1\u01cf\1\u011d\1\0"+ + "\3\u011d\1\0\2\u011d\1\u01cf\13\0\2\u011d\1\0\23\u011d"+ + "\2\0\1\u011d\2\0\14\u011d\1\u01ce\2\u011d\1\0\1\u011d"+ + "\10\0\6\u011d\1\0\2\u011d\1\u011f\1\u011d\2\u0121\1\u011d"+ + "\1\u0121\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d"+ + "\1\u0120\14\0\2\u011d\1\0\7\u011d\1\u0120\2\u011d\1\u0120"+ + "\2\u011d\1\u011f\5\u011d\2\0\1\u011d\2\0\5\u011d\1\u0120"+ + "\6\u011d\1\u0121\2\u011d\1\0\1\u011d\10\0\6\u011d\1\0"+ + "\2\u011d\1\u011f\1\u011d\2\u0122\1\u011d\1\u0122\1\u011d\1\0"+ + "\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u0120\1\0\1\u0121"+ + "\12\0\2\u011d\1\0\7\u011d\1\u0120\2\u011d\1\u0120\2\u011d"+ + "\1\u011f\5\u011d\2\0\1\u011d\2\0\5\u011d\1\u0120\6\u011d"+ + "\1\u0122\2\u011d\1\0\1\u011d\10\0\6\u011d\1\0\1\u011d"+ + "\1\u01d0\1\u011f\1\u011d\1\u0122\1\u0123\1\u011d\1\u0123\1\u011d"+ + "\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u0120\1\0"+ + "\1\u0121\12\0\2\u011d\1\0\6\u011d\1\u01d0\1\u0120\2\u011d"+ + "\1\u0120\2\u011d\1\u011f\5\u011d\2\0\1\u011d\2\0\5\u011d"+ + "\1\u0120\6\u011d\1\u0123\2\u011d\1\0\1\u011d\10\0\1\u011d"+ + "\1\u01d1\4\u011d\1\0\2\u011d\1\u01d1\1\u011d\4\u01d1\1\u011d"+ + "\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u01d1\14\0"+ + "\2\u011d\1\0\5\u011d\1\u01d1\1\u011d\2\u01d1\1\u011d\1\u01d1"+ + "\2\u011d\1\u01d1\3\u011d\1\u01d1\1\u011d\2\0\1\u011d\2\0"+ + "\1\u011d\1\u01d1\3\u011d\1\u01d1\6\u011d\1\u01d1\2\u011d\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u01d2\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u01d3\6\136\1\u01d4\10\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\1\136\1\u01d5\14\0\2\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\3\136\1\u01d6\13\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\14\136\1\u01d7"+ + "\5\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\2\136"+ + "\1\u01d8\17\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u01d9\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u01da"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\10\136\1\u01db\2\136\1\u0128\6\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u01dc\1\136\1\0\1\u01dd\21\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\14\136\1\u01de\5\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\6\136\1\u01df"+ + "\13\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\2\136"+ + "\1\u01e0\17\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\1\u0128\16\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u01e1\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\10\136\1\u01e2\11\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u01e3\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u01e4\6\136\1\u01e5\10\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\3\136\1\u01e6"+ + "\16\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\2\136"+ + "\1\u01e7\17\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\u01e8\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\6\136"+ + "\1\u01e9\3\136\1\u01ea\6\136\1\u01eb\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\11\136\1\u01ec\10\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\14\136\1\u01ed\5\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u01ee\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\136\1\u01ef"+ + "\20\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u01f0\16\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u01f1\1\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u01f2\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\3\136\1\u01f3\16\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\u0128\21\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\136\1\u01f4\20\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\6\136\1\u01f5\13\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\21\136\1\u01f6\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u01f7\1\136\1\0\1\136\1\u01f8\20\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\u01f9\4\136"+ + "\1\u01fa\14\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\u01fb\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\11\136"+ + "\1\u01e5\10\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\5\136\1\u01fc\14\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\5\136\1\u01fd\14\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u01fe\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u01ff\11\136\1\u0200\5\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\1\u0201\1\136\1\0\6\136"+ + "\1\u0202\13\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u0203\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\1\136\1\u0204\20\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u0205\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u0206\17\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u0207\1\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\22\136\1\127\2\0\1\136"+ + "\2\0\3\136\1\u0128\13\136\13\0\1\u0208\7\0\1\u0208"+ + "\1\0\4\u0208\11\0\1\u0208\24\0\1\u0208\1\0\2\u0208"+ + "\1\0\1\u0208\2\0\1\u0208\3\0\1\u0208\7\0\1\u0208"+ + "\3\0\1\u0208\6\0\1\u0208\15\0\1\u0209\7\0\1\u0209"+ + "\1\0\4\u0209\11\0\1\u0209\24\0\1\u0209\1\0\2\u0209"+ + "\1\0\1\u0209\2\0\1\u0209\3\0\1\u0209\7\0\1\u0209"+ + "\3\0\1\u0209\6\0\1\u0209\14\0\1\u020a\60\0\1\u020a"+ + "\121\0\1\u020b\134\0\1\u020c\136\0\1\u020d\144\0\1\u020e"+ + "\30\0\1\u020f\60\0\1\u020f\121\0\1\u0210\134\0\1\u0211"+ + "\136\0\1\u0212\144\0\1\u0213\30\0\1\u0214\60\0\1\u0214"+ + "\47\0\6\u0165\1\0\13\u0165\5\0\2\u0165\1\0\1\u0165"+ + "\12\0\2\u0165\1\0\22\u0165\3\0\1\u0165\2\0\17\u0165"+ + "\72\0\1\u0215\1\0\1\u0216\6\0\1\u0217\110\0\1\u0218"+ + "\132\0\1\u0219\135\0\1\u021a\121\0\1\u021b\1\u021c\127\0"+ + "\1\u021d\133\0\1\u021e\121\0\1\u021f\12\0\1\u0220\115\0"+ + "\1\u0221\140\0\1\u0222\120\0\1\u0223\3\0\1\u0224\132\0"+ + "\1\u0225\12\0\1\u0226\107\0\1\u0227\63\0\6\u0173\1\0"+ + "\13\u0173\5\0\2\u0173\1\0\1\u0173\12\0\2\u0173\1\0"+ + "\22\u0173\3\0\1\u0173\2\0\17\u0173\65\0\1\u0174\143\0"+ + "\1\u0174\114\0\1\u0174\2\0\1\u0174\17\0\1\u0174\121\0"+ + "\1\u0174\6\0\1\u0174\114\0\1\u0174\4\0\1\u0174\130\0"+ + "\1\u0228\42\0\2\305\1\u0229\3\305\1\0\10\305\2\0"+ + "\1\305\5\0\2\305\14\0\2\305\1\0\1\u0229\21\305"+ + "\3\0\1\305\2\0\17\305\12\0\6\305\1\0\1\u022a"+ + "\7\305\2\0\1\305\5\0\2\305\14\0\2\305\1\0"+ + "\13\305\1\u022a\6\305\3\0\1\305\2\0\17\305\32\0"+ + "\1\u022b\174\0\1\u022c\131\0\1\u0187\105\0\1\u022d\120\0"+ + "\1\u022e\65\0\2\65\1\0\1\65\1\0\2\65\2\0"+ + "\3\65\1\u022f\2\65\1\0\26\65\1\0\7\65\1\u022f"+ + "\31\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\1\65\1\u01a3\4\65\1\0\26\65\1\0\15\65\1\112"+ + "\1\65\1\u01a3\21\65\1\0\3\65\1\112\16\65\1\0"+ + "\1\65\1\0\2\65\2\0\3\65\1\u0230\2\65\1\0"+ + "\26\65\1\0\7\65\1\u0230\3\65\1\u0231\25\65\1\0"+ + "\2\65\1\u0231\17\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u0232\1\0\26\65\1\0\14\65\1\u0232\24\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\32\65\1\u01a3\6\65\1\0\12\65"+ + "\1\u01a3\7\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\u0233\23\65\1\0\27\65\1\u0233\11\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\2\65"+ + "\1\u0234\3\65\1\0\26\65\1\0\12\65\1\u0234\26\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\4\65"+ + "\1\112\1\65\1\0\26\65\1\0\26\65\1\112\12\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\1\65\1\u01b7\24\65\1\0\20\65\1\u01b7\20\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\112\23\65\1\0\27\65\1\112\11\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\5\65"+ + "\1\u01a3\1\0\26\65\1\0\14\65\1\u01a3\24\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\10\65\1\u0235\30\65\1\0\7\65\1\u0235"+ + "\12\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\30\65\1\u0236\10\65\1\0\4\65\1\u0236"+ + "\15\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\32\65\1\u0237\6\65\1\0\12\65\1\u0237"+ + "\7\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\15\65\1\u0238\23\65\1\0\3\65\1\u0238"+ + "\16\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\1\u01a3\25\65\1\0\25\65\1\u01a3\13\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\22\65\1\u0239\16\65\1\0\1\65\1\u0239\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\12\65"+ + "\1\u01b1\13\65\1\0\41\65\1\0\6\65\1\u01b1\13\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\10\65\1\u01c2\30\65\1\0\7\65\1\u01c2\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\3\65\1\u023a\2\65"+ + "\1\0\26\65\1\0\7\65\1\u023a\31\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\22\65\1\u01b0\16\65\1\0\1\65\1\u01b0\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\5\65\1\u023b\1\0"+ + "\26\65\1\0\14\65\1\u023b\24\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\13\65\1\u01b1\25\65\1\0\2\65\1\u01b1\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\u010f\16\65\1\0\1\65\1\u010f\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\31\65\1\112\7\65\1\0\10\65\1\112\11\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u023c"+ + "\23\65\1\0\27\65\1\u023c\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u0111"+ + "\23\65\1\0\27\65\1\u0111\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u01b7"+ + "\23\65\1\0\27\65\1\u01b7\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u010f"+ + "\23\65\1\0\27\65\1\u010f\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\15\65\1\u023d\23\65\1\0\3\65\1\u023d\16\65\1\0"+ + "\1\65\1\0\2\65\2\0\1\65\1\u023e\4\65\1\0"+ + "\26\65\1\0\17\65\1\u023e\21\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\5\65\1\u023f\1\0\26\65"+ + "\1\0\14\65\1\u023f\24\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\13\65"+ + "\1\u0240\25\65\1\0\2\65\1\u0240\17\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\1\112\25\65\1\0"+ + "\25\65\1\112\13\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\2\65\1\u0241\23\65\1\0"+ + "\27\65\1\u0241\11\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\30\65\1\u0242"+ + "\10\65\1\0\4\65\1\u0242\15\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\1\65\1\u0243\24\65\1\0"+ + "\20\65\1\u0243\20\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\12\65\1\u0244\13\65\1\0"+ + "\41\65\1\0\6\65\1\u0244\13\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\30\65\1\112"+ + "\10\65\1\0\4\65\1\112\15\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\112\1\0\26\65\1\0\14\65"+ + "\1\112\24\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\3\65\1\u023f\2\65\1\0\26\65\1\0\7\65"+ + "\1\u023f\1\u0235\30\65\1\0\7\65\1\u0235\12\65\1\0"+ + "\1\65\1\0\2\65\2\0\4\65\1\u019a\1\65\1\0"+ + "\26\65\1\0\26\65\1\u019a\12\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\1\65\1\317\4\65\1\0"+ + "\26\65\1\0\17\65\1\317\21\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\30\65\1\u0245\10\65\1\0\4\65\1\u0245\15\65\1\0"+ + "\1\65\1\0\2\65\2\0\2\65\1\u0246\3\65\1\0"+ + "\26\65\1\0\12\65\1\u0246\26\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\21\65\1\u0247\17\65\1\0\5\65\1\u0247\14\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\1\65\1\u0248"+ + "\24\65\1\0\20\65\1\u0248\20\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\u0249\16\65\1\0\1\65\1\u0249\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\u024a\16\65\1\0\1\65\1\u024a\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\21\65\1\u0192\17\65\1\0\5\65\1\u0192\14\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\13\65\1\u024b\25\65\1\0\2\65\1\u024b\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\3\65\1\u024c\2\65\1\0"+ + "\26\65\1\0\7\65\1\u024c\31\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\112\16\65\1\0\1\65\1\112\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\1\65\1\u024d"+ + "\24\65\1\0\20\65\1\u024d\20\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\3\65\1\363\2\65\1\0"+ + "\26\65\1\0\7\65\1\363\31\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\2\65\1\u024e\3\65\1\0"+ + "\26\65\1\0\12\65\1\u024e\26\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u0111"+ + "\23\65\1\0\22\65\1\112\4\65\1\u0111\11\65\1\0"+ + "\1\65\1\112\20\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\12\65\1\112\13\65\1\0\41\65\1\0"+ + "\6\65\1\112\13\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u024f\1\0\26\65\1\0\14\65\1\u024f\24\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\31\65\1\112\7\65\1\0\10\65"+ + "\1\112\1\u0250\10\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\10\65\1\u0251\30\65\1\0"+ + "\7\65\1\u0251\12\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\2\65\1\363\23\65\1\0\27\65\1\363"+ + "\11\65\1\0\20\65\12\0\1\u0252\53\0\1\u0252\120\0"+ + "\2\u01ca\17\0\1\u01ca\41\0\1\u0253\120\0\1\127\10\0"+ + "\1\127\1\u0254\4\127\1\0\2\127\1\u0254\1\127\4\u0254"+ + "\1\127\1\0\1\127\1\0\3\127\1\0\1\127\1\u0254"+ + "\14\0\2\127\1\0\5\127\1\u0254\1\127\2\u0254\1\127"+ + "\1\u0254\2\127\1\u0254\3\127\1\u0254\1\127\2\0\1\127"+ + "\2\0\1\127\1\u0254\3\127\1\u0254\6\127\1\u0254\2\127"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u0255"+ + "\1\136\1\0\22\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\u011d\10\0\6\u011d\1\0\4\u011d\2\u01ce\1\u011d"+ + "\1\u01ce\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d"+ + "\1\u0120\14\0\2\u011d\1\0\7\u011d\1\u0120\2\u011d\1\u0120"+ + "\10\u011d\2\0\1\u011d\2\0\5\u011d\1\u0120\6\u011d\1\u01ce"+ + "\2\u011d\25\0\2\u01ce\1\0\1\u01ce\75\0\1\u01ce\3\0"+ + "\1\u011d\10\0\1\u011d\1\u01d1\4\u011d\1\0\1\u011d\1\u01d0"+ + "\1\u01d1\1\u011d\4\u01d1\1\u011d\1\0\1\u011d\1\0\3\u011d"+ + "\1\0\1\u011d\1\u01d1\14\0\2\u011d\1\0\5\u011d\1\u01d1"+ + "\1\u01d0\2\u01d1\1\u011d\1\u01d1\2\u011d\1\u01d1\3\u011d\1\u01d1"+ + "\1\u011d\2\0\1\u011d\2\0\1\u011d\1\u01d1\3\u011d\1\u01d1"+ + "\6\u011d\1\u01d1\2\u011d\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\11\136\1\u014b\10\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\15\136\1\u0256\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\2\136\1\u0257"+ + "\17\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\u0258\1\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u0259\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\1\136\1\u025a\4\136\1\u025b\13\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u0128\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\u025c\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\22\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\15\136\1\u025d\4\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\3\136\1\u025e\16\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\11\136\1\u0128\10\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\136\1\u025f"+ + "\20\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\15\136"+ + "\1\u0260\4\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\6\136\1\u0128\13\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u0261"+ + "\1\136\1\0\22\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u0262\6\136\1\u0263\10\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\1\u0264\21\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\11\136\1\u01dc\10\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\5\136\1\u0206\14\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\15\136\1\u0128"+ + "\4\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\136\1\u0264\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\21\136"+ + "\1\u0265\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\15\136"+ + "\1\u0266\4\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\10\136\1\u0267\11\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u0268"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u0269\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\15\136\1\u0142\4\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u026a\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\u026b\21\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\5\136\1\u026c\14\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u01e4\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\5\136\1\u026d\14\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\10\136\1\u026e"+ + "\11\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u026b\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\11\136\1\u01da\10\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u026a\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\20\136\1\u026f\1\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u0270\17\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\11\136\1\u0271\10\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\17\136\1\u0272\2\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\16\136\1\u0128"+ + "\3\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\4\136"+ + "\1\u0273\15\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\10\136\1\u0274\11\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u0275\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\15\136\1\u0276\4\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u025a\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\7\136\1\u0128\12\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u0277\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\10\136\1\u0278"+ + "\11\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\6\136"+ + "\1\u0279\13\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u0264\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\4\136\1\u0128\15\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\6\136\1\u01e5\13\136\1\127\2\0\1\136"+ + "\2\0\17\136\13\0\1\u027a\7\0\1\u027a\1\0\4\u027a"+ + "\11\0\1\u027a\24\0\1\u027a\1\0\2\u027a\1\0\1\u027a"+ + "\2\0\1\u027a\3\0\1\u027a\7\0\1\u027a\3\0\1\u027a"+ + "\6\0\1\u027a\15\0\1\u027b\7\0\1\u027b\1\0\4\u027b"+ + "\11\0\1\u027b\24\0\1\u027b\1\0\2\u027b\1\0\1\u027b"+ + "\2\0\1\u027b\3\0\1\u027b\7\0\1\u027b\3\0\1\u027b"+ + "\6\0\1\u027b\15\0\1\u027c\53\0\1\u027c\137\0\1\u027d"+ + "\131\0\1\u020d\105\0\1\u027e\120\0\1\u027f\77\0\1\u0280"+ + "\53\0\1\u0280\137\0\1\u0281\131\0\1\u0212\105\0\1\u0282"+ + "\120\0\1\u0283\103\0\1\u0284\44\0\1\u0284\140\0\1\u0285"+ + "\113\0\1\u0286\150\0\1\u0287\114\0\1\u021b\135\0\1\u0288"+ + "\122\0\1\u0289\132\0\1\u028a\132\0\1\u028b\144\0\1\u028c"+ + "\125\0\1\u028d\116\0\1\u028e\130\0\1\u028f\5\0\1\u0290"+ + "\130\0\1\u0225\121\0\1\u0291\126\0\1\u0292\135\0\1\u0293"+ + "\133\0\1\u0294\134\0\1\u0295\125\0\1\u0296\133\0\1\u0297"+ + "\44\0\3\305\1\u0298\2\305\1\0\10\305\2\0\1\305"+ + "\5\0\2\305\14\0\1\u0298\1\305\1\0\22\305\3\0"+ + "\1\305\2\0\17\305\12\0\6\305\1\0\1\305\1\u0299"+ + "\6\305\2\0\1\305\5\0\2\305\14\0\2\305\1\0"+ + "\6\305\1\u0299\13\305\3\0\1\305\2\0\17\305\54\0"+ + "\1\u022d\16\0\1\u0187\46\0\1\u029a\125\0\2\u029b\1\0"+ + "\7\u022e\1\0\10\u022e\2\u029b\1\u022e\1\0\1\u029b\1\0"+ + "\1\u022e\1\u029b\2\u022e\2\u029b\1\0\2\u029b\1\0\5\u029b"+ + "\1\0\2\u022e\1\0\22\u022e\3\u029b\1\u022e\2\u029b\17\u022e"+ + "\1\0\2\65\1\0\1\65\1\0\2\65\2\0\4\65"+ + "\1\u01b1\1\65\1\0\26\65\1\0\26\65\1\u01b1\12\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\31\65\1\u0192\7\65\1\0\10\65"+ + "\1\u0192\11\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\15\65\1\340\23\65\1\0\3\65"+ + "\1\340\16\65\1\0\1\65\1\0\2\65\2\0\3\65"+ + "\1\u023f\2\65\1\0\26\65\1\0\7\65\1\u023f\31\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\1\65"+ + "\1\u01b1\4\65\1\0\26\65\1\0\17\65\1\u01b1\21\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\1\65"+ + "\1\u0192\4\65\1\0\26\65\1\0\17\65\1\u0192\21\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\2\65"+ + "\1\u029c\3\65\1\0\26\65\1\0\12\65\1\u029c\26\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\u029d\23\65\1\0\22\65\1\u023c\4\65"+ + "\1\u029d\11\65\1\0\1\65\1\u023c\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u029e\16\65\1\0\1\65\1\u029e\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\21\65"+ + "\1\u029f\17\65\1\0\5\65\1\u029f\14\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\30\65"+ + "\1\u0192\10\65\1\0\4\65\1\u0192\15\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\15\65"+ + "\1\u02a0\23\65\1\0\3\65\1\u02a0\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u02a1\16\65\1\0\1\65\1\u02a1\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\15\65"+ + "\1\u010f\23\65\1\0\3\65\1\u010f\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\5\65\1\u02a2\1\0\26\65\1\0"+ + "\14\65\1\u02a2\24\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\31\65\1\u02a3"+ + "\7\65\1\0\10\65\1\u02a3\11\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\13\65\1\u0102"+ + "\25\65\1\0\2\65\1\u0102\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\12\65\1\u023c\13\65\1\0"+ + "\41\65\1\0\6\65\1\u023c\13\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\21\65\1\u02a4\4\65\1\0"+ + "\24\65\1\u02a4\14\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\2\65\1\u02a5\23\65\1\0"+ + "\27\65\1\u02a5\11\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\21\65\1\u02a6"+ + "\17\65\1\0\5\65\1\u02a6\14\65\1\0\1\65\1\0"+ + "\2\65\2\0\2\65\1\u0192\3\65\1\0\26\65\1\0"+ + "\12\65\1\u0192\26\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\22\65\1\u02a7"+ + "\16\65\1\0\1\65\1\u02a7\20\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\13\65\1\340"+ + "\25\65\1\0\2\65\1\340\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\3\65\1\u02a8\2\65\1\0\26\65\1\0"+ + "\7\65\1\u02a8\31\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\u02a9\1\0\1\65\1\u02aa\24\65"+ + "\1\0\10\65\1\u02ab\3\65\1\u02a9\3\65\1\u02aa\20\65"+ + "\1\0\7\65\1\u02ab\12\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\26\65\1\0\15\65\1\u02ac\23\65"+ + "\1\0\3\65\1\u02ac\16\65\1\0\1\65\1\0\2\65"+ + "\2\0\1\65\1\333\4\65\1\0\26\65\1\0\17\65"+ + "\1\333\21\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u01b1\23\65\1\0\27\65"+ + "\1\u01b1\11\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u02ad\23\65\1\0\27\65"+ + "\1\u02ad\11\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\3\65\1\u02ae\2\65\1\0\26\65\1\0\7\65"+ + "\1\u02ae\31\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\12\65\1\u02af\13\65\1\0\41\65"+ + "\1\0\6\65\1\u02af\13\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u0102\23\65\1\0\27\65"+ + "\1\u0102\11\65\1\0\20\65\13\0\1\u02b0\45\0\1\u02b0"+ + "\47\0\1\127\10\0\1\127\1\u02b1\4\127\1\0\2\127"+ + "\1\u02b1\1\127\4\u02b1\1\127\1\0\1\127\1\0\3\127"+ + "\1\0\1\127\1\u02b1\14\0\2\127\1\0\5\127\1\u02b1"+ + "\1\127\2\u02b1\1\127\1\u02b1\2\127\1\u02b1\3\127\1\u02b1"+ + "\1\127\2\0\1\127\2\0\1\127\1\u02b1\3\127\1\u02b1"+ + "\6\127\1\u02b1\2\127\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\3\136\1\u02b2\16\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\1\u02b3\21\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u02b4\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\3\136\1\u02b5"+ + "\16\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\3\136\1\u0275\13\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\1\u0263\21\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u02b6\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\1\u02b7\21\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\11\136\1\u02b8\10\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\22\136\1\127\2\0\1\136\2\0\1\u02b9"+ + "\16\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\136\1\u02ba\20\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\20\136\1\u01e5\1\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u02bb\1\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u0128\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\6\136\1\u0205\13\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\2\136\1\u01e5"+ + "\17\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\u02bc\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\1\136\1\u02bd\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\u02be\21\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\1\u02bf\1\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\2\136\1\u0264"+ + "\17\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\4\136"+ + "\1\u02c0\15\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u02c1\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u02c2\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u0266\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\15\136\1\u02c3\4\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\15\136\1\u02c4\4\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u02c5\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\14\136\1\u02c6"+ + "\5\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u02c7\16\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u0153\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\17\136\1\u0128\2\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\15\136\1\u02c8\4\136\1\127\2\0\1\136"+ + "\2\0\17\136\14\0\1\u02c9\45\0\1\u02c9\122\0\1\u027e"+ + "\16\0\1\u020d\46\0\1\u02ca\125\0\2\u02cb\1\0\7\u027f"+ + "\1\0\10\u027f\2\u02cb\1\u027f\1\0\1\u02cb\1\0\1\u027f"+ + "\1\u02cb\2\u027f\2\u02cb\1\0\2\u02cb\1\0\5\u02cb\1\0"+ + "\2\u027f\1\0\22\u027f\3\u02cb\1\u027f\2\u02cb\17\u027f\14\0"+ + "\1\u02cc\45\0\1\u02cc\122\0\1\u0282\16\0\1\u0212\46\0"+ + "\1\u02cd\125\0\2\u02ce\1\0\7\u0283\1\0\10\u0283\2\u02ce"+ + "\1\u0283\1\0\1\u02ce\1\0\1\u0283\1\u02ce\2\u0283\2\u02ce"+ + "\1\0\2\u02ce\1\0\5\u02ce\1\0\2\u0283\1\0\22\u0283"+ + "\3\u02ce\1\u0283\2\u02ce\17\u0283\21\0\1\u02cf\53\0\1\u02cf"+ + "\117\0\1\u028c\126\0\1\u02d0\142\0\1\u02d1\131\0\1\u02d2"+ + "\113\0\1\u02d3\102\0\1\u02d4\175\0\1\u02d5\120\0\1\u02d6"+ + "\142\0\1\u028a\107\0\1\u028a\134\0\1\u02d2\123\0\1\u02d7"+ + "\144\0\1\u0290\70\0\1\u02d8\200\0\1\u02d9\111\0\1\u02da"+ + "\123\0\1\u02db\134\0\1\u02dc\57\0\4\305\1\u02dd\1\305"+ + "\1\0\10\305\2\0\1\305\5\0\2\305\14\0\2\305"+ + "\1\0\14\305\1\u02dd\5\305\3\0\1\305\2\0\17\305"+ + "\12\0\6\305\1\0\2\305\1\u02de\5\305\2\0\1\305"+ + "\5\0\2\305\14\0\2\305\1\0\15\305\1\u02de\4\305"+ + "\3\0\1\305\2\0\17\305\11\0\1\u022e\120\0\2\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\13\65\1\u02df\25\65\1\0\2\65\1\u02df\17\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\15\65\1\u01b1\23\65\1\0\3\65\1\u01b1\16\65"+ + "\1\0\1\65\1\0\2\65\2\0\1\112\5\65\1\0"+ + "\26\65\1\0\23\65\1\112\15\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u02e0"+ + "\23\65\1\0\27\65\1\u02e0\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\5\65\1\u02e1\1\0\26\65"+ + "\1\0\14\65\1\u02e1\24\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\2\65\1\u02e2\3\65\1\0\26\65"+ + "\1\0\12\65\1\u02e2\26\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\u02e3\5\65\1\0\26\65\1\0"+ + "\23\65\1\u02e3\15\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\41\65\1\0"+ + "\11\65\1\u02e4\10\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\13\65\1\u029d\25\65\1\0"+ + "\2\65\1\u029d\17\65\1\0\1\65\1\0\2\65\2\0"+ + "\1\u024d\5\65\1\0\26\65\1\0\23\65\1\u024d\15\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\30\65\1\u02e5\10\65\1\0\4\65"+ + "\1\u02e5\15\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\1\65\1\u029e\24\65\1\0\20\65\1\u029e\20\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\u02e6\23\65\1\0\27\65\1\u02e6\11\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\3\65"+ + "\1\373\2\65\1\0\26\65\1\0\7\65\1\373\31\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\2\65"+ + "\1\u02e7\3\65\1\0\26\65\1\0\12\65\1\u02e7\26\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\1\u01b0\25\65\1\0\25\65\1\u01b0\13\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\1\u029e\5\65"+ + "\1\0\26\65\1\0\23\65\1\u029e\15\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\1\65\1\u02e8\4\65"+ + "\1\0\26\65\1\0\17\65\1\u02e8\21\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\2\65"+ + "\1\u0192\23\65\1\0\27\65\1\u0192\11\65\1\0\20\65"+ + "\14\0\1\u02e9\41\0\1\u02e9\52\0\1\127\10\0\1\127"+ + "\1\u02ea\4\127\1\0\2\127\1\u02ea\1\127\4\u02ea\1\127"+ + "\1\0\1\127\1\0\3\127\1\0\1\127\1\u02ea\14\0"+ + "\2\127\1\0\5\127\1\u02ea\1\127\2\u02ea\1\127\1\u02ea"+ + "\2\127\1\u02ea\3\127\1\u02ea\1\127\2\0\1\127\2\0"+ + "\1\127\1\u02ea\3\127\1\u02ea\6\127\1\u02ea\2\127\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u02eb\1\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\12\136\1\u02ec\7\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\3\136\1\u02ed\16\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\1\u02ee\1\136\1\0\22\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\16\136\1\u02ef\3\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\3\136\1\u02f0\16\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u02f1\1\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\12\136\1\u0128\7\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u02f2\16\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\6\136\1\u0263"+ + "\13\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\136\1\u01ed\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u02f3\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\5\136\1\u0128\14\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\1\u02f4\21\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u02f5"+ + "\1\136\1\0\22\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u02f6\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\5\136\1\u02f7\14\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\3\136\1\u02f8\2\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\1\136\1\u02f9\14\0\2\136\1\0\22\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\1\136\1\u01e5\1\0\22\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\15\136\1\u0275\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\7\136\1\u01dc"+ + "\12\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u02fa\11\136\1\127\2\0\1\136\2\0\17\136\15\0"+ + "\1\u02fb\41\0\1\u02fb\62\0\1\u027f\134\0\1\u02fc\41\0"+ + "\1\u02fc\62\0\1\u0283\141\0\1\u02fd\45\0\1\u02fd\133\0"+ + "\1\u02fe\120\0\1\u02ff\77\0\1\u0300\175\0\1\u021b\114\0"+ + "\1\u0301\3\0\1\u0302\1\u0303\122\0\1\u028a\147\0\1\u0304"+ + "\131\0\1\u0305\121\0\1\u028a\125\0\1\u0304\135\0\1\u028a"+ + "\117\0\1\u0304\126\0\1\u0306\60\0\5\305\1\u0307\1\0"+ + "\10\305\2\0\1\305\5\0\2\305\14\0\2\305\1\0"+ + "\2\305\1\u0307\17\305\3\0\1\305\2\0\17\305\1\0"+ + "\2\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\12\65\1\u0190\13\65\1\0\41\65\1\0\6\65\1\u0190"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\20\65\1\112\5\65\1\0\37\65\1\112\1\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u0308\23\65\1\0\27\65\1\u0308\11\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u01bf\23\65\1\0\27\65\1\u01bf\11\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\13\65\1\324\25\65\1\0\2\65\1\324"+ + "\17\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\12\65\1\u0309\13\65\1\0\41\65\1\0\6\65\1\u0309"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u029e\23\65\1\0\27\65\1\u029e\11\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\30\65\1\u030a\10\65\1\0\4\65\1\u030a"+ + "\15\65\1\0\1\65\1\0\2\65\2\0\3\65\1\u010f"+ + "\2\65\1\0\26\65\1\0\7\65\1\u010f\31\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\13\65\1\u01b7\25\65\1\0\2\65\1\u01b7"+ + "\15\65\15\0\1\u030b\57\0\1\u030b\33\0\1\127\10\0"+ + "\1\127\1\136\4\127\1\0\2\127\1\136\1\127\4\136"+ + "\1\127\1\0\1\127\1\0\3\127\1\0\1\127\1\136"+ + "\14\0\2\127\1\0\5\127\1\136\1\127\2\136\1\127"+ + "\1\136\2\127\1\136\3\127\1\136\1\127\2\0\1\127"+ + "\2\0\1\127\1\136\3\127\1\136\6\127\1\136\2\127"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u02f6\17\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u030c\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\5\136\1\u01de\14\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u02c6\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\15\136\1\u030d\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\15\136\1\u030e"+ + "\4\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\u01e5\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\5\136\1\u0263"+ + "\14\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\1\136"+ + "\1\u030f\20\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\1\136\1\u0310\20\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\13\136\1\u0128\6\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u0311\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\3\136\1\u0312\16\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\6\136\1\u0313\13\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u0264\16\136"+ + "\1\127\2\0\1\136\2\0\17\136\16\0\1\u0314\57\0"+ + "\1\u0314\50\0\1\u0315\57\0\1\u0315\55\0\1\u0316\53\0"+ + "\1\u0316\115\0\1\u0317\126\0\1\u0305\131\0\1\u0301\3\0"+ + "\1\u0302\135\0\1\u0318\122\0\1\u0319\134\0\1\u0292\135\0"+ + "\1\u031a\130\0\1\u028a\115\0\1\u031b\45\0\2\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\20\65\1\u01b1"+ + "\5\65\1\0\37\65\1\u01b1\1\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\13\65\1\327\25\65\1\0\2\65\1\327\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\4\65\1\u031c\1\65\1\0"+ + "\26\65\1\0\26\65\1\u031c\12\65\1\0\20\65\16\0"+ + "\1\u031d\44\0\1\u031d\45\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\5\136\1\u01e5\14\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u031e\16\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\3\136\1\u0263"+ + "\16\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u031f\16\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u0128\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\15\136\1\u0201\4\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u0275\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u0320\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\17\0\1\u0321\44\0\1\u0321\63\0"+ + "\1\u0322\44\0\1\u0322\64\0\1\u0323\142\0\1\u0324\130\0"+ + "\1\u0325\155\0\1\u0326\142\0\1\u028a\131\0\1\u0327\37\0"+ + "\2\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\1\65\1\u0328\24\65\1\0\20\65\1\u0328\20\65\1\0"+ + "\20\65\17\0\1\u0329\111\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u01dc\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\1\u032a\1\136\1\0\22\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u0312\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\20\0\1\u032b\130\0"+ + "\1\u032c\200\0\1\u032d\124\0\1\u032e\134\0\1\u031a\125\0"+ + "\1\u032f\44\0\2\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\22\65\1\327\16\65\1\0"+ + "\1\65\1\327\16\65\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\22\136\1\127\2\0\1\136\2\0"+ + "\16\136\1\u0311\57\0\1\u0330\17\0\1\u0331\126\0\1\u0332"+ + "\117\0\1\u0333\131\0\1\u0305\127\0\1\u0285\142\0\1\u0305"+ + "\33\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[63190]; + 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; + } + + + /* 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; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\2\1\1\0\2\1\1\0\2\1\7\0\1\1"+ + "\5\0\2\1\1\11\4\1\1\11\5\1\1\11\2\1"+ + "\2\11\2\1\1\11\1\1\3\11\1\1\1\11\25\1"+ + "\1\11\1\1\1\11\1\1\7\11\1\1\1\11\2\1"+ + "\2\11\10\1\1\11\3\1\1\11\20\1\1\11\2\1"+ + "\1\11\1\1\2\11\2\1\1\11\1\1\1\11\1\1"+ + "\1\11\6\1\1\11\4\1\2\11\1\1\1\11\4\1"+ + "\1\11\1\1\3\11\4\1\4\11\1\1\1\11\6\1"+ + "\4\11\1\1\2\11\1\1\1\11\2\1\1\11\2\1"+ + "\1\11\1\1\1\11\1\1\1\11\4\1\2\11\5\0"+ + "\1\11\103\1\1\11\3\0\1\11\1\0\75\1\1\11"+ + "\2\1\1\0\1\11\12\0\1\11\1\1\15\0\1\1"+ + "\1\11\5\0\1\1\1\0\4\11\3\1\1\0\1\11"+ + "\4\0\100\1\1\0\1\1\1\0\3\1\1\0\70\1"+ + "\41\0\2\1\1\11\2\0\44\1\1\0\1\11\46\1"+ + "\1\0\1\11\3\0\1\1\3\0\1\1\6\0\1\11"+ + "\15\0\2\1\2\0\24\1\1\0\30\1\24\0\14\1"+ + "\1\0\21\1\14\0\4\1\1\0\10\1\10\0\1\1"+ + "\1\0\3\1\2\0\1\11\4\0\1\1\1\11\1\1"+ + "\2\11\6\0\1\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[819]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + public static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <style> tag. + */ + public static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in JavaScript. + */ + public static final int INTERNAL_IN_JS = -10; + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + public static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_VALID = -13; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_VALID = -15; + + /** + * Internal type denoting a line ending in CSS. + */ + public static final int INTERNAL_CSS = -16; + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -17; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -18; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether closing markup tags are automatically completed for HTML. + */ + private static boolean completeCloseTags; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HTMLTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * Returns Token.MARKUP_TAG_NAME. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.PREPROCESSOR: + state = PI; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_CSS; + } + else { + state = Token.NULL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public HTMLTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public HTMLTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 194) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 55: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 113: break; + case 80: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 114: break; + case 64: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 115: break; + case 23: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 116: break; + case 10: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); + } + case 117: break; + case 49: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 118: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 119: break; + case 106: + { addToken(Token.RESERVED_WORD_2); + } + case 120: break; + case 90: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 121: break; + case 87: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 122: break; + case 40: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 123: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 124: break; + case 107: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; yybegin(INTAG_SCRIPT); + } + case 125: break; + case 89: + { addToken(Token.REGEX); + } + case 126: break; + case 42: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 127: break; + case 111: + { int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 128: break; + case 102: + { addToken(Token.FUNCTION); + } + case 129: break; + case 8: + { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 130: break; + case 36: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 131: break; + case 46: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 132: break; + case 91: + { addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + case 133: break; + case 72: + { if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + case 134: break; + case 67: + { if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 135: break; + case 69: + { /* Skip valid '$' that is not part of template literal expression start */ + } + case 136: break; + case 20: + { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 137: break; + case 25: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); + } + case 138: break; + case 35: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); + } + case 139: break; + case 83: + { /* Skip all escaped chars. */ + } + case 140: break; + case 77: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 141: break; + case 28: + { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 142: break; + case 101: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 143: break; + case 96: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 144: break; + case 56: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 145: break; + case 17: + { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); + } + case 146: break; + case 26: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); + } + case 147: break; + case 65: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 148: break; + case 92: + { varDepths.push(Boolean.TRUE); + } + case 149: break; + case 27: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); + } + case 150: break; + case 7: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 151: break; + case 85: + { /* Invalid latin-1 character \xXX */ validJSString = false; + } + case 152: break; + case 24: + { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 153: break; + case 37: + { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 154: break; + case 99: + { addToken(Token.COMMENT_MULTILINE); + } + case 155: break; + case 75: + { start = zzMarkedPos-2; yybegin(PI); + } + case 156: break; + case 108: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 157: break; + case 51: + { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 158: break; + case 9: + { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 159: break; + case 73: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-1); //yypushback(count-1); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 160: break; + case 63: + { /* Skip escaped chars. */ + } + case 161: break; + case 84: + { /* Invalid Unicode character \\uXXXX */ validJSString = false; + } + case 162: break; + case 105: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-5,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; cssPrevState = zzLexicalState; yybegin(INTAG_STYLE); + } + case 163: break; + case 76: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); + } + case 164: break; + case 86: + { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 165: break; + case 30: + { addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 166: break; + case 39: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 167: break; + case 15: + { addToken(Token.OPERATOR); + } + case 168: break; + case 58: + { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); + } + case 169: break; + case 97: + { start = zzMarkedPos-4; yybegin(COMMENT); + } + case 170: break; + case 94: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); + } + case 171: break; + case 110: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 172: break; + case 88: + { addToken(Token.VARIABLE); + } + case 173: break; + case 44: + { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 174: break; + case 70: + { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 175: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 176: break; + case 103: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 177: break; + case 22: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); + } + case 178: break; + case 104: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 179: break; + case 54: + { addToken(Token.SEPARATOR); yybegin(CSS); + } + case 180: break; + case 31: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 181: break; + case 62: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 182: break; + case 52: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 183: break; + case 68: + { if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 184: break; + case 41: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 185: break; + case 34: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 186: break; + case 79: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 187: break; + case 82: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 188: break; + case 60: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 189: break; + case 112: + { addToken(Token.ANNOTATION); + } + case 190: break; + case 29: + { addToken(Token.ERROR_IDENTIFIER); + } + case 191: break; + case 57: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 192: break; + case 98: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 193: break; + case 6: + { addToken(Token.MARKUP_ENTITY_REFERENCE); + } + case 194: break; + case 100: + { addToken(Token.LITERAL_BOOLEAN); + } + case 195: break; + case 18: + { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); + } + case 196: break; + case 3: + { addNullToken(); return firstToken; + } + case 197: break; + case 45: + { addEndToken(INTERNAL_CSS); return firstToken; + } + case 198: break; + case 109: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 199: break; + case 50: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 200: break; + case 53: + { addToken(Token.RESERVED_WORD); + } + case 201: break; + case 12: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 202: break; + case 14: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 203: break; + case 47: + { addToken(Token.DATA_TYPE); + } + case 204: break; + case 33: + { addToken(Token.SEPARATOR); + } + case 205: break; + case 93: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-2); //yypushback(count-2); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 206: break; + case 61: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 207: break; + case 59: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 208: break; + case 19: + { addToken(Token.MARKUP_TAG_NAME); + } + case 209: break; + case 11: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 210: break; + case 78: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 211: break; + case 38: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 212: break; + case 81: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 213: break; + case 16: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 214: break; + case 95: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 215: break; + case 13: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 216: break; + case 66: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 217: break; + case 32: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 218: break; + case 74: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 219: break; + case 21: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 220: break; + case 43: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 221: break; + case 71: + { // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 222: break; + case 48: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 223: break; + case 1: + { + } + case 224: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INATTR_SINGLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; + } + case 820: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 821: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 822: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 823: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 824: break; + case INTAG_SCRIPT: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; + } + case 825: break; + case JS_TEMPLATE_LITERAL_EXPR: { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 826: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 827: break; + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 828: break; + case CSS: { + addEndToken(INTERNAL_CSS); return firstToken; + } + case 829: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 830: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 831: break; + case INATTR_DOUBLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; + } + case 832: break; + case PI: { + addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 833: break; + case JAVASCRIPT: { + addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 834: break; + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 835: break; + case INTAG_CHECK_TAG_NAME: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 836: break; + case INATTR_SINGLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; + } + case 837: break; + case DTD: { + addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 838: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 839: break; + case INATTR_DOUBLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; + } + case 840: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; + } + case 841: break; + case JS_TEMPLATE_LITERAL: { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 842: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 843: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; + } + case 844: break; + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 845: break; + case INTAG_STYLE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; + } + case 846: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex new file mode 100644 index 0000000..9192e43 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex @@ -0,0 +1,256 @@ +/* + * 10/17/2015 + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for hosts files.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated HostsTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class HostsTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Whether or not this is the first token on a line. + */ + private boolean first; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HostsTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type == Token.RESERVED_WORD; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + first = true; + + // Start off in the proper state. + int state = YYINITIAL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Identifier = ([^# \t\n]+) +Whitespace = ([ \t]+) +LineCommentBegin = "#" + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z0-9_\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state EOL_COMMENT + +%% + + { + {Identifier} { + addToken(first ? Token.RESERVED_WORD : Token.IDENTIFIER); + first = false; + } + {Whitespace} { addToken(Token.WHITESPACE); } + {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + \n | + <> { addNullToken(); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java new file mode 100644 index 0000000..6ef4239 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java @@ -0,0 +1,679 @@ +/* The following code was generated by JFlex 1.4.1 on 10/17/15 12:49 AM */ + +/* + * 10/17/2015 + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for hosts files.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated HostsTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class HostsTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\1\25\0\1\2\1\4\1\0\1\3\1\6\1\4"+ + "\7\4\1\4\1\21\1\5\12\6\1\17\1\4\1\0\1\4\1\0"+ + "\2\4\32\6\1\4\1\0\1\4\1\0\1\4\1\0\4\6\1\16"+ + "\1\13\1\6\1\7\1\14\2\6\1\15\3\6\1\11\2\6\1\12"+ + "\1\10\2\6\1\20\3\6\3\0\1\4\uff81\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 = + "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\3\5"+ + "\12\0\1\7\2\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[24]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\22\0\44\0\66\0\110\0\66\0\132\0\66"+ + "\0\154\0\176\0\220\0\242\0\264\0\306\0\330\0\352"+ + "\0\374\0\u010e\0\u0120\0\u0132\0\u0144\0\u0156\0\u0168\0\u0156"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[24]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\16\3\1\7\1\10\5\7"+ + "\1\11\3\7\1\12\4\7\1\13\1\7\1\3\3\0"+ + "\16\3\24\0\1\5\17\0\1\7\1\0\5\7\1\0"+ + "\3\7\1\0\4\7\1\0\1\7\10\0\1\14\21\0"+ + "\1\15\3\0\1\16\25\0\1\17\11\0\1\20\22\0"+ + "\1\21\25\0\1\22\24\0\1\23\12\0\1\24\27\0"+ + "\1\25\20\0\1\21\24\0\1\26\12\0\1\21\4\0"+ + "\1\25\7\0\1\27\17\0\2\30\12\26\1\30\1\26"+ + "\1\30\5\0\1\26\14\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[378]; + 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; + } + + + /* 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; + + /* 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 = + "\2\0\1\1\1\11\1\1\1\11\1\1\1\11\3\1"+ + "\12\0\1\1\2\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[24]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Whether or not this is the first token on a line. + */ + private boolean first; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HostsTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type == Token.RESERVED_WORD; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + first = true; + + // Start off in the proper state. + int state = YYINITIAL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public HostsTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public HostsTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 94) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: + { addNullToken(); return firstToken; + } + case 8: break; + case 7: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 9: break; + case 4: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 10: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 11: break; + case 6: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 12: break; + case 1: + { addToken(first ? Token.RESERVED_WORD : Token.IDENTIFIER); + first = false; + } + case 13: break; + case 5: + { + } + case 14: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 25: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 26: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex new file mode 100644 index 0000000..ff4e121 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex @@ -0,0 +1,500 @@ +/* + * 06/30/2013 + * + * HtaccessTokenMaker.java - Token generator for .htaccess files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for .htaccess files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated HtaccessTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.7 + * + */ +%% + +%public +%class HtaccessTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HtaccessTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns how to transform a line into a line comment. + * + * @return The line comment start and end text for .htaccess files. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + default: + state = YYINITIAL; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +NameStartChar = ([\:A-Z_a-z]) +NameChar = ({NameStartChar}|[\-\.0-9]) +TagName = ({NameStartChar}{NameChar}*) +Whitespace = ([ \t\f]+) +Identifier = ([^ \t\n<#]+) +InTagIdentifier = ([^ \t\n\"\'=>]+) +LineCommentBegin = ("#") + +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +Escape = ("\\".) +StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + +NameStartChar = ([\:A-Z_a-z]) +NameChar = ({NameStartChar}|[\-\.0-9]) +TagName = ({NameStartChar}{NameChar}*) +DirectiveStart = (("<"[/]?){TagName}) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z_0-9\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state EOL_COMMENT +%state INTAG +%state INATTR_DOUBLE +%state INATTR_SINGLE + +%% + + { + + {Whitespace} { addToken(Token.WHITESPACE); } + {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + + "<"{TagName} { + int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + "> { addNullToken(); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } + <> { addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java new file mode 100644 index 0000000..f43e76b --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java @@ -0,0 +1,1506 @@ +/* The following code was generated by JFlex 1.4.1 on 7/14/13 10:47 PM */ + +/* + * 06/30/2013 + * + * HtaccessTokenMaker.java - Token generator for .htaccess files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for .htaccess files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated HtaccessTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.7 + * + */ + +public class HtaccessTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 1; + public static final int INTAG = 2; + public static final int INATTR_DOUBLE = 3; + public static final int YYINITIAL = 0; + public static final int INATTR_SINGLE = 4; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\5\1\7\1\0\1\3\23\0\1\5\1\14\1\12\1\10"+ + "\1\21\1\14\1\14\1\16\5\14\1\2\1\33\1\13\12\20\1\15"+ + "\1\14\1\4\1\53\1\6\2\14\1\34\1\41\1\35\1\40\1\31"+ + "\1\26\1\43\1\22\1\27\1\17\1\51\1\30\1\46\1\36\1\37"+ + "\1\24\1\50\1\44\1\25\1\23\1\45\1\47\1\32\1\52\1\42"+ + "\1\17\1\14\1\11\1\14\1\0\1\1\1\0\1\34\1\41\1\35"+ + "\1\40\1\31\1\55\1\43\1\54\1\27\1\17\1\51\1\30\1\46"+ + "\1\36\1\37\1\24\1\50\1\44\1\25\1\23\1\45\1\47\1\56"+ + "\1\52\1\42\1\17\3\0\1\14\uff81\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 = + "\3\0\2\1\1\2\1\3\1\2\1\3\1\4\1\5"+ + "\21\2\1\1\1\6\6\1\2\7\1\10\1\11\1\12"+ + "\1\13\1\1\1\14\1\1\1\15\1\0\2\16\44\2"+ + "\4\1\4\0\1\17\1\16\1\20\1\16\1\21\56\2"+ + "\4\1\4\0\62\2\1\22\13\2\3\1\1\23\2\0"+ + "\104\2\1\1\2\0\1\22\12\2\1\22\31\2\1\22"+ + "\146\2\1\22\60\2\1\22\33\2\1\22\47\2\1\22"+ + "\225\2\1\22\33\2\1\22\102\2\1\22\1\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[795]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\57\0\136\0\215\0\274\0\353\0\u011a\0\u0149"+ + "\0\u0178\0\u01a7\0\u01a7\0\u01d6\0\u0205\0\u0234\0\u0263\0\u0292"+ + "\0\u02c1\0\u02f0\0\u031f\0\u034e\0\u037d\0\u03ac\0\u03db\0\u040a"+ + "\0\u0439\0\u0468\0\u0497\0\u04c6\0\u04f5\0\u01a7\0\u0524\0\u0553"+ + "\0\u0582\0\u05b1\0\u05e0\0\u060f\0\u063e\0\u066d\0\u01a7\0\u01a7"+ + "\0\u01a7\0\u01a7\0\u069c\0\u01a7\0\u06cb\0\u06fa\0\u0729\0\u0758"+ + "\0\u0787\0\u07b6\0\u07e5\0\u0814\0\u0843\0\u0872\0\u08a1\0\u08d0"+ + "\0\u08ff\0\u092e\0\u095d\0\u098c\0\u09bb\0\u09ea\0\u0a19\0\u0a48"+ + "\0\u0a77\0\u0aa6\0\u0ad5\0\u0b04\0\u0b33\0\u0b62\0\u0b91\0\u0bc0"+ + "\0\u0bef\0\u0c1e\0\u0c4d\0\u0c7c\0\u0cab\0\u0cda\0\u0d09\0\u0d38"+ + "\0\u0d67\0\u0d96\0\u0dc5\0\u0df4\0\u0e23\0\u0e52\0\u0e81\0\u0eb0"+ + "\0\u0edf\0\u0f0e\0\u0f3d\0\u0f6c\0\u0f9b\0\u0fca\0\u0ff9\0\u01a7"+ + "\0\u1028\0\u01a7\0\u1057\0\u1086\0\u10b5\0\u10e4\0\u1113\0\u1142"+ + "\0\u1171\0\u11a0\0\u11cf\0\u11fe\0\u122d\0\u125c\0\u128b\0\u12ba"+ + "\0\u12e9\0\u1318\0\u1347\0\u1376\0\u13a5\0\u13d4\0\u1403\0\u1432"+ + "\0\u1461\0\u1490\0\u14bf\0\u14ee\0\u151d\0\u154c\0\u157b\0\u15aa"+ + "\0\u15d9\0\u1608\0\u1637\0\u1666\0\u1695\0\u16c4\0\u16f3\0\u1722"+ + "\0\u1751\0\u1780\0\u17af\0\u17de\0\u180d\0\u183c\0\u186b\0\u189a"+ + "\0\u18c9\0\u18f8\0\u1927\0\u1956\0\u1985\0\u19b4\0\u19e3\0\u1a12"+ + "\0\u1a41\0\u1a70\0\u1a9f\0\u1ace\0\u1afd\0\u1b2c\0\u1b5b\0\u1b8a"+ + "\0\u1bb9\0\u1be8\0\u1c17\0\u1c46\0\u1c75\0\u1ca4\0\u1cd3\0\u1d02"+ + "\0\u1d31\0\u1d60\0\u1d8f\0\u1dbe\0\u1ded\0\u1e1c\0\u1e4b\0\u1e7a"+ + "\0\u1ea9\0\u1ed8\0\u1f07\0\u1f36\0\u1f65\0\u1f94\0\u1fc3\0\u1ff2"+ + "\0\u2021\0\u2050\0\u207f\0\u20ae\0\u20dd\0\u210c\0\u213b\0\u216a"+ + "\0\u2199\0\u21c8\0\u21f7\0\u2226\0\u2255\0\u2284\0\u22b3\0\u22e2"+ + "\0\u2311\0\u2340\0\353\0\u236f\0\u239e\0\u23cd\0\u23fc\0\u242b"+ + "\0\u245a\0\u2489\0\u24b8\0\u24e7\0\u2516\0\u2545\0\u2574\0\u25a3"+ + "\0\u25d2\0\u2601\0\u2630\0\u265f\0\u268e\0\u26bd\0\u26ec\0\u271b"+ + "\0\u274a\0\u2779\0\u27a8\0\u27d7\0\u2806\0\u2835\0\u2864\0\u2893"+ + "\0\u28c2\0\u28f1\0\u2920\0\u294f\0\u297e\0\u29ad\0\u29dc\0\u2a0b"+ + "\0\u2a3a\0\u2a69\0\u2a98\0\u2ac7\0\u2af6\0\u2b25\0\u2b54\0\u2b83"+ + "\0\u2bb2\0\u2be1\0\u2c10\0\u2c3f\0\u2c6e\0\u2c9d\0\u2ccc\0\u2cfb"+ + "\0\u2d2a\0\u2d59\0\u2d88\0\u2db7\0\u2de6\0\u2e15\0\u2e44\0\u2e73"+ + "\0\u2ea2\0\u2ed1\0\u2f00\0\u2f2f\0\u2f5e\0\u2f8d\0\u2fbc\0\u2feb"+ + "\0\u301a\0\u3049\0\u3078\0\u30a7\0\u30d6\0\u3105\0\u3134\0\u3163"+ + "\0\u3192\0\u31c1\0\u31f0\0\u321f\0\u324e\0\u327d\0\u32ac\0\u32db"+ + "\0\u330a\0\u2601\0\u3339\0\u3368\0\u3397\0\u33c6\0\u33f5\0\u3424"+ + "\0\u3453\0\u3482\0\u34b1\0\u34e0\0\u350f\0\u353e\0\u356d\0\u359c"+ + "\0\u35cb\0\u35fa\0\u3629\0\u3658\0\u3687\0\u36b6\0\u36e5\0\u3714"+ + "\0\u3743\0\u3772\0\u37a1\0\u37d0\0\u37ff\0\u382e\0\u385d\0\u388c"+ + "\0\u38bb\0\u38ea\0\u3919\0\u3948\0\u3977\0\u39a6\0\u39d5\0\u3a04"+ + "\0\u3a33\0\u3a62\0\u3a91\0\u3ac0\0\u3aef\0\u3b1e\0\u3b4d\0\u3b7c"+ + "\0\u3bab\0\u3bda\0\u3c09\0\u3c38\0\u3c67\0\u3c96\0\u3cc5\0\u3cf4"+ + "\0\u3d23\0\u3d52\0\u3d81\0\u3db0\0\u3ddf\0\u3e0e\0\u3e3d\0\u3e6c"+ + "\0\u3368\0\u3e9b\0\u3eca\0\u3ef9\0\u3f28\0\u3f57\0\u3f86\0\u3fb5"+ + "\0\u3fe4\0\u4013\0\u4042\0\u4071\0\u40a0\0\u40cf\0\u40fe\0\u412d"+ + "\0\u415c\0\u418b\0\u41ba\0\u41e9\0\u4218\0\u4247\0\u4276\0\u42a5"+ + "\0\u42d4\0\u4303\0\u4332\0\u4361\0\u4390\0\u43bf\0\u43ee\0\u441d"+ + "\0\u444c\0\u447b\0\u44aa\0\u44d9\0\u4508\0\u4537\0\u4566\0\u4595"+ + "\0\u45c4\0\u45f3\0\u4622\0\u4651\0\u4680\0\u46af\0\u46de\0\u470d"+ + "\0\u473c\0\u476b\0\u479a\0\u47c9\0\u47f8\0\u4827\0\u4856\0\u4885"+ + "\0\u48b4\0\u48e3\0\u4912\0\u4941\0\u4970\0\u499f\0\u49ce\0\u49fd"+ + "\0\u4a2c\0\u4a5b\0\u4a8a\0\u4ab9\0\u4ae8\0\u4b17\0\u4b46\0\u4b75"+ + "\0\u4ba4\0\u4bd3\0\u4c02\0\u4c31\0\u4c60\0\u4c8f\0\u4cbe\0\u4ced"+ + "\0\u4d1c\0\u4d4b\0\u4d7a\0\u4da9\0\u4dd8\0\u4e07\0\u4e36\0\u4e65"+ + "\0\u4e94\0\u4ec3\0\u4ef2\0\u4f21\0\u4f50\0\u4f7f\0\u4fae\0\u4fdd"+ + "\0\u500c\0\u503b\0\u506a\0\u5099\0\u50c8\0\u50f7\0\u5126\0\u5155"+ + "\0\u5184\0\u51b3\0\u51e2\0\u5211\0\u5240\0\u526f\0\u529e\0\u52cd"+ + "\0\u52fc\0\u532b\0\u535a\0\u5389\0\u53b8\0\u53e7\0\u5416\0\u5445"+ + "\0\u5474\0\u54a3\0\u54d2\0\u5501\0\u5530\0\u555f\0\u558e\0\u55bd"+ + "\0\u55ec\0\u561b\0\u564a\0\u5679\0\u56a8\0\u56d7\0\u5706\0\u5735"+ + "\0\u5764\0\u5793\0\u57c2\0\u57f1\0\u5820\0\u584f\0\u587e\0\u58ad"+ + "\0\u58dc\0\u590b\0\u593a\0\u5969\0\u5998\0\u59c7\0\u59f6\0\u5a25"+ + "\0\u5a54\0\u5a83\0\u5ab2\0\u5ae1\0\u5b10\0\u5b3f\0\u5b6e\0\u5b9d"+ + "\0\u5bcc\0\u5bfb\0\u5c2a\0\u5c59\0\u5c88\0\u5cb7\0\u5ce6\0\u5d15"+ + "\0\u5d44\0\u5d73\0\u5da2\0\u5dd1\0\u5e00\0\u5e2f\0\u5e5e\0\u5e8d"+ + "\0\u5ebc\0\u5eeb\0\u5f1a\0\u5f49\0\u5f78\0\u5fa7\0\u5fd6\0\u6005"+ + "\0\u6034\0\u6063\0\u6092\0\u60c1\0\u60f0\0\u611f\0\u614e\0\u617d"+ + "\0\u61ac\0\u61db\0\u620a\0\u6239\0\u6268\0\u6297\0\u62c6\0\u62f5"+ + "\0\u6324\0\u6353\0\u6382\0\u63b1\0\u63e0\0\u640f\0\u643e\0\u646d"+ + "\0\u649c\0\u64cb\0\u64fa\0\u6529\0\u6558\0\u6587\0\u65b6\0\u65e5"+ + "\0\u6614\0\u6643\0\u6672\0\u66a1\0\u66d0\0\u66ff\0\u672e\0\u675d"+ + "\0\u678c\0\u67bb\0\u67ea\0\u6819\0\u6848\0\u6877\0\u68a6\0\u68d5"+ + "\0\u6904\0\u6933\0\u6962\0\u6991\0\u69c0\0\u69ef\0\u6a1e\0\u6a4d"+ + "\0\u6a7c\0\u6aab\0\u6ada\0\u6b09\0\u6b38\0\u6b67\0\u6b96\0\u6bc5"+ + "\0\u6bf4\0\u6c23\0\u6c52\0\u6c81\0\u6cb0\0\u6cdf\0\u6d0e\0\u6d3d"+ + "\0\u6d6c\0\u6d9b\0\u6dca\0\u6df9\0\u6e28\0\u6e57\0\u6e86\0\u6eb5"+ + "\0\u6ee4\0\u6f13\0\u6f42\0\u6f71\0\u6fa0\0\u6fcf\0\u6ffe\0\u702d"+ + "\0\u705c\0\u708b\0\u70ba\0\u70e9\0\u7118\0\u7147\0\u7176\0\u71a5"+ + "\0\u71d4\0\u7203\0\u7232\0\u7261\0\u7290\0\u72bf\0\u72ee\0\u731d"+ + "\0\u734c\0\u737b\0\u73aa\0\u73d9\0\u7408\0\u7437\0\u7466\0\u7495"+ + "\0\u74c4\0\u74f3\0\u7522\0\u7551\0\u7580\0\u75af\0\u75de\0\u760d"+ + "\0\u763c\0\u766b\0\u769a\0\u76c9\0\u76f8\0\u7727\0\u7756\0\u7785"+ + "\0\u77b4\0\u77e3\0\u7812\0\u7841\0\u7870\0\u789f\0\u78ce\0\u78fd"+ + "\0\u792c\0\u795b\0\u798a\0\u79b9\0\u79e8\0\u7a17\0\u7a46\0\u7a75"+ + "\0\u7aa4\0\u7ad3\0\u7b02\0\u7b31\0\u7b60\0\u7b8f\0\u7bbe\0\u7bed"+ + "\0\u7c1c\0\u7c4b\0\u7c7a\0\u7ca9\0\u7cd8\0\u7d07\0\u7d36\0\u7d65"+ + "\0\u7d94\0\u7dc3\0\u7df2\0\u7e21\0\u7e50\0\u7e7f\0\u7eae\0\u7edd"+ + "\0\u7f0c\0\u7f3b\0\u7f6a\0\u7f99\0\u7fc8\0\u7ff7\0\u8026\0\u8055"+ + "\0\u8084\0\u80b3\0\u80e2\0\u8111\0\u8140\0\u816f\0\u819e\0\u81cd"+ + "\0\u81fc\0\u822b\0\u825a\0\u8289\0\u82b8\0\u82e7\0\u8316\0\u8345"+ + "\0\u8374\0\u83a3\0\u83d2\0\u8401\0\u8430\0\u845f\0\u848e\0\u84bd"+ + "\0\u84ec\0\u851b\0\u854a\0\u8579\0\u85a8\0\u85d7\0\u8606\0\u8635"+ + "\0\u8664\0\u8693\0\u86c2\0\u86f1\0\u8720\0\u874f\0\u877e\0\u87ad"+ + "\0\u87dc\0\u880b\0\u883a\0\u8869\0\u8898\0\u88c7\0\u88f6\0\u8925"+ + "\0\u8954\0\u8983\0\u89b2\0\u89e1\0\u8a10\0\u8a3f\0\u8a6e\0\u8a9d"+ + "\0\u8acc\0\u8afb\0\u8b2a\0\u8b59\0\u8b88\0\u8bb7\0\u8be6\0\u8c15"+ + "\0\u8c44\0\u8c73\0\u8ca2\0\u8cd1\0\u8d00\0\u8d2f\0\u8d5e\0\u8d8d"+ + "\0\u8dbc\0\u8deb\0\u8e1a\0\u8e49\0\u8e78\0\u8ea7\0\u8ed6\0\u8f05"+ + "\0\u8f34\0\u8b2a\0\u8f63"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[795]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\3\6\1\7\1\10\1\11\1\6\1\12\1\13\1\6"+ + "\1\14\7\6\1\15\1\6\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\2\6\1\24\1\25\1\6\1\26\1\27"+ + "\1\30\2\6\1\31\1\32\1\33\3\6\1\34\1\6"+ + "\1\15\1\20\1\6\7\35\1\36\12\35\1\37\3\35"+ + "\1\40\3\35\1\41\21\35\1\42\1\43\1\44\3\45"+ + "\1\46\1\45\1\11\1\47\1\0\2\45\1\50\3\45"+ + "\1\51\34\45\1\52\3\45\12\53\1\54\44\53\16\55"+ + "\1\54\40\55\4\6\2\0\1\6\2\0\51\6\1\7"+ + "\1\0\1\11\1\6\2\0\46\6\1\0\1\56\11\0"+ + "\1\57\1\0\1\56\1\0\1\56\2\0\11\56\1\0"+ + "\17\56\1\0\3\56\3\0\1\11\1\0\1\11\130\0"+ + "\4\14\2\60\1\14\1\61\1\60\1\62\1\6\44\14"+ + "\4\6\2\0\1\6\2\0\20\6\1\63\31\6\2\0"+ + "\1\6\2\0\23\6\1\64\26\6\2\0\1\6\2\0"+ + "\14\6\1\65\3\6\1\66\2\6\1\67\1\70\25\6"+ + "\2\0\1\6\2\0\16\6\1\71\7\6\1\72\23\6"+ + "\2\0\1\6\2\0\14\6\1\73\10\6\1\74\7\6"+ + "\1\75\14\6\2\0\1\6\2\0\16\6\1\76\4\6"+ + "\1\77\26\6\2\0\1\6\2\0\25\6\1\100\5\6"+ + "\1\101\5\6\1\102\10\6\2\0\1\6\2\0\17\6"+ + "\1\103\4\6\1\104\1\105\1\6\1\106\4\6\1\107"+ + "\15\6\2\0\1\6\2\0\11\6\1\110\14\6\1\111"+ + "\3\6\1\112\10\6\1\110\6\6\2\0\1\6\2\0"+ + "\13\6\1\113\17\6\1\114\16\6\2\0\1\6\2\0"+ + "\16\6\1\115\1\6\1\116\31\6\2\0\1\6\2\0"+ + "\33\6\1\117\16\6\2\0\1\6\2\0\17\6\1\120"+ + "\1\121\31\6\2\0\1\6\2\0\25\6\1\122\24\6"+ + "\2\0\1\6\2\0\20\6\1\123\13\6\1\124\15\6"+ + "\2\0\1\6\2\0\30\6\1\125\15\6\7\35\1\0"+ + "\44\35\3\0\7\35\1\0\13\35\1\126\30\35\3\0"+ + "\7\35\1\0\13\35\1\127\3\35\1\130\24\35\3\0"+ + "\7\35\1\0\22\35\1\131\21\35\2\0\1\132\23\0"+ + "\1\133\56\0\1\134\3\0\1\135\61\0\1\132\23\0"+ + "\1\132\5\45\3\0\2\45\1\0\3\45\1\0\34\45"+ + "\1\0\6\45\1\46\1\45\1\11\2\0\2\45\1\0"+ + "\3\45\1\0\34\45\1\0\3\45\12\53\1\0\44\53"+ + "\16\55\1\0\40\55\1\0\2\56\12\0\1\56\1\0"+ + "\2\56\1\0\31\56\1\0\3\56\1\0\1\136\13\0"+ + "\1\136\1\0\1\136\2\0\11\136\1\0\17\136\1\0"+ + "\3\136\7\60\1\61\1\60\1\137\1\140\44\60\11\61"+ + "\1\141\1\142\44\61\4\14\2\60\1\14\1\0\1\60"+ + "\46\14\4\6\2\0\1\6\2\0\23\6\1\143\26\6"+ + "\2\0\1\6\2\0\14\6\1\144\35\6\2\0\1\6"+ + "\2\0\16\6\1\145\1\146\32\6\2\0\1\6\2\0"+ + "\12\6\1\147\20\6\1\150\16\6\2\0\1\6\2\0"+ + "\12\6\1\151\37\6\2\0\1\6\2\0\33\6\1\152"+ + "\16\6\2\0\1\6\2\0\17\6\1\153\32\6\2\0"+ + "\1\6\2\0\33\6\1\154\16\6\2\0\1\6\2\0"+ + "\23\6\1\155\26\6\2\0\1\6\2\0\27\6\1\156"+ + "\22\6\2\0\1\6\2\0\23\6\1\157\26\6\2\0"+ + "\1\6\2\0\35\6\1\160\14\6\2\0\1\6\2\0"+ + "\25\6\1\161\24\6\2\0\1\6\2\0\23\6\1\162"+ + "\26\6\2\0\1\6\2\0\33\6\1\163\16\6\2\0"+ + "\1\6\2\0\13\6\1\164\7\6\1\165\26\6\2\0"+ + "\1\6\2\0\17\6\1\166\32\6\2\0\1\6\2\0"+ + "\12\6\1\167\11\6\1\170\25\6\2\0\1\6\2\0"+ + "\26\6\1\171\23\6\2\0\1\6\2\0\27\6\1\172"+ + "\22\6\2\0\1\6\2\0\12\6\1\173\37\6\2\0"+ + "\1\6\2\0\20\6\1\174\2\6\1\175\26\6\2\0"+ + "\1\6\2\0\25\6\1\176\1\177\23\6\2\0\1\6"+ + "\2\0\16\6\1\200\33\6\2\0\1\6\2\0\12\6"+ + "\1\201\37\6\2\0\1\6\2\0\27\6\1\202\22\6"+ + "\2\0\1\6\2\0\33\6\1\203\16\6\2\0\1\6"+ + "\2\0\15\6\1\204\7\6\1\205\16\6\1\204\5\6"+ + "\2\0\1\6\2\0\26\6\1\206\23\6\2\0\1\6"+ + "\2\0\16\6\1\207\33\6\2\0\1\6\2\0\21\6"+ + "\1\210\1\6\1\211\3\6\1\212\5\6\1\213\1\6"+ + "\1\214\5\6\1\210\4\6\2\0\1\6\2\0\14\6"+ + "\1\215\35\6\2\0\1\6\2\0\12\6\1\216\37\6"+ + "\2\0\1\6\2\0\17\6\1\217\32\6\2\0\1\6"+ + "\2\0\16\6\1\220\27\6\7\35\1\0\13\35\1\221"+ + "\30\35\3\0\7\35\1\0\14\35\1\222\27\35\3\0"+ + "\7\35\1\0\20\35\1\223\23\35\3\0\7\35\1\0"+ + "\22\35\1\224\21\35\2\0\1\225\32\0\1\225\23\0"+ + "\1\225\23\0\1\226\57\0\1\227\62\0\1\230\27\0"+ + "\2\136\12\0\1\136\1\0\2\136\1\0\31\136\1\0"+ + "\3\136\7\60\1\0\47\60\7\61\1\0\47\61\4\6"+ + "\2\0\1\6\2\0\27\6\1\231\22\6\2\0\1\6"+ + "\2\0\14\6\1\232\35\6\2\0\1\6\2\0\12\6"+ + "\1\233\5\6\1\234\31\6\2\0\1\6\2\0\13\6"+ + "\1\235\10\6\1\236\1\6\1\237\4\6\1\240\1\241"+ + "\1\6\1\242\13\6\2\0\1\6\2\0\11\6\1\243"+ + "\4\6\1\244\1\6\1\245\5\6\1\246\14\6\1\243"+ + "\6\6\2\0\1\6\2\0\36\6\1\247\13\6\2\0"+ + "\1\6\2\0\16\6\1\250\33\6\2\0\1\6\2\0"+ + "\16\6\1\251\33\6\2\0\1\6\2\0\20\6\1\252"+ + "\31\6\2\0\1\6\2\0\24\6\1\253\25\6\2\0"+ + "\1\6\2\0\13\6\1\254\36\6\2\0\1\6\2\0"+ + "\20\6\1\255\31\6\2\0\1\6\2\0\13\6\1\256"+ + "\36\6\2\0\1\6\2\0\16\6\1\257\33\6\2\0"+ + "\1\6\2\0\32\6\1\260\17\6\2\0\1\6\2\0"+ + "\30\6\1\261\21\6\2\0\1\6\2\0\26\6\1\262"+ + "\23\6\2\0\1\6\2\0\16\6\1\263\33\6\2\0"+ + "\1\6\2\0\35\6\1\264\14\6\2\0\1\6\2\0"+ + "\26\6\1\265\23\6\2\0\1\6\2\0\16\6\1\266"+ + "\33\6\2\0\1\6\2\0\20\6\1\267\31\6\2\0"+ + "\1\6\2\0\25\6\1\270\24\6\2\0\1\6\2\0"+ + "\11\6\1\243\1\271\3\6\1\272\1\273\1\274\2\6"+ + "\1\275\1\276\1\6\1\277\1\300\13\6\1\243\6\6"+ + "\2\0\1\6\2\0\11\6\1\301\31\6\1\301\6\6"+ + "\2\0\1\6\2\0\24\6\1\302\25\6\2\0\1\6"+ + "\2\0\33\6\1\303\16\6\2\0\1\6\2\0\12\6"+ + "\1\304\37\6\2\0\1\6\2\0\40\6\1\305\11\6"+ + "\2\0\1\6\2\0\35\6\1\306\14\6\2\0\1\6"+ + "\2\0\16\6\1\307\33\6\2\0\1\6\2\0\20\6"+ + "\1\310\31\6\2\0\1\6\2\0\20\6\1\311\31\6"+ + "\2\0\1\6\2\0\23\6\1\312\26\6\2\0\1\6"+ + "\2\0\31\6\1\313\20\6\2\0\1\6\2\0\21\6"+ + "\1\314\23\6\1\314\4\6\2\0\1\6\2\0\35\6"+ + "\1\315\14\6\2\0\1\6\2\0\33\6\1\316\16\6"+ + "\2\0\1\6\2\0\27\6\1\317\22\6\2\0\1\6"+ + "\2\0\16\6\1\320\33\6\2\0\1\6\2\0\26\6"+ + "\1\321\23\6\2\0\1\6\2\0\34\6\1\322\15\6"+ + "\2\0\1\6\2\0\20\6\1\323\31\6\2\0\1\6"+ + "\2\0\23\6\1\324\26\6\2\0\1\6\2\0\12\6"+ + "\1\325\37\6\2\0\1\6\2\0\12\6\1\326\33\6"+ + "\7\35\1\0\14\35\1\327\27\35\3\0\7\35\1\0"+ + "\5\35\1\330\36\35\3\0\7\35\1\0\21\35\1\222"+ + "\22\35\3\0\7\35\1\0\23\35\1\331\20\35\36\0"+ + "\1\332\47\0\1\333\47\0\1\334\72\0\1\227\25\0"+ + "\4\6\2\0\1\6\2\0\20\6\1\335\31\6\2\0"+ + "\1\6\2\0\20\6\1\336\31\6\2\0\1\6\2\0"+ + "\16\6\1\337\33\6\2\0\1\6\2\0\33\6\1\340"+ + "\16\6\2\0\1\6\2\0\33\6\1\341\16\6\2\0"+ + "\1\6\2\0\16\6\1\342\33\6\2\0\1\6\2\0"+ + "\13\6\1\113\36\6\2\0\1\6\2\0\20\6\1\343"+ + "\31\6\2\0\1\6\2\0\14\6\1\344\35\6\2\0"+ + "\1\6\2\0\20\6\1\345\31\6\2\0\1\6\2\0"+ + "\23\6\1\346\26\6\2\0\1\6\2\0\25\6\1\347"+ + "\24\6\2\0\1\6\2\0\25\6\1\350\24\6\2\0"+ + "\1\6\2\0\34\6\1\351\15\6\2\0\1\6\2\0"+ + "\20\6\1\352\31\6\2\0\1\6\2\0\14\6\1\353"+ + "\35\6\2\0\1\6\2\0\13\6\1\354\36\6\2\0"+ + "\1\6\2\0\20\6\1\355\31\6\2\0\1\6\2\0"+ + "\20\6\1\356\31\6\2\0\1\6\2\0\16\6\1\357"+ + "\33\6\2\0\1\6\2\0\41\6\1\360\10\6\2\0"+ + "\1\6\2\0\27\6\1\361\1\362\4\6\1\363\14\6"+ + "\2\0\1\6\2\0\12\6\1\364\37\6\2\0\1\6"+ + "\2\0\34\6\1\365\15\6\2\0\1\6\2\0\17\6"+ + "\1\366\32\6\2\0\1\6\2\0\33\6\1\367\16\6"+ + "\2\0\1\6\2\0\33\6\1\370\16\6\2\0\1\6"+ + "\2\0\13\6\1\371\36\6\2\0\1\6\2\0\21\6"+ + "\1\313\23\6\1\313\4\6\2\0\1\6\2\0\26\6"+ + "\1\372\23\6\2\0\1\6\2\0\13\6\1\373\36\6"+ + "\2\0\1\6\2\0\31\6\1\374\20\6\2\0\1\6"+ + "\2\0\31\6\1\375\20\6\2\0\1\6\2\0\24\6"+ + "\1\376\1\347\24\6\2\0\1\6\2\0\23\6\1\377"+ + "\26\6\2\0\1\6\2\0\25\6\1\u0100\24\6\2\0"+ + "\1\6\2\0\17\6\1\u0101\32\6\2\0\1\6\2\0"+ + "\11\6\1\u0102\31\6\1\u0102\6\6\2\0\1\6\2\0"+ + "\34\6\1\u0103\15\6\2\0\1\6\2\0\20\6\1\u0104"+ + "\31\6\2\0\1\6\2\0\12\6\1\271\4\6\1\u0105"+ + "\3\6\1\u0106\1\6\1\u0107\1\6\1\u0108\1\u0109\1\6"+ + "\1\u010a\1\6\1\u010b\15\6\2\0\1\6\2\0\40\6"+ + "\1\u010c\11\6\2\0\1\6\2\0\14\6\1\u010d\35\6"+ + "\2\0\1\6\2\0\20\6\1\u010e\31\6\2\0\1\6"+ + "\2\0\16\6\1\u010f\33\6\2\0\1\6\2\0\23\6"+ + "\1\u0110\26\6\2\0\1\6\2\0\26\6\1\u0111\23\6"+ + "\2\0\1\6\2\0\33\6\1\313\16\6\2\0\1\6"+ + "\2\0\24\6\1\u0112\25\6\2\0\1\6\2\0\34\6"+ + "\1\u0113\15\6\2\0\1\6\2\0\14\6\1\u0114\35\6"+ + "\2\0\1\6\2\0\16\6\1\u0115\33\6\2\0\1\6"+ + "\2\0\16\6\1\u0116\33\6\2\0\1\6\2\0\35\6"+ + "\1\u0117\14\6\2\0\1\6\2\0\33\6\1\u0118\16\6"+ + "\2\0\1\6\2\0\36\6\1\u0119\13\6\2\0\1\6"+ + "\2\0\16\6\1\u011a\1\6\1\u011b\31\6\2\0\1\6"+ + "\2\0\12\6\1\232\37\6\2\0\1\6\2\0\14\6"+ + "\1\u011c\1\u011d\11\6\1\u011e\14\6\1\u011d\5\6\2\0"+ + "\1\6\2\0\16\6\1\u011f\33\6\2\0\1\6\2\0"+ + "\11\6\1\u0120\31\6\1\u0120\2\6\7\35\1\0\5\35"+ + "\1\330\7\35\1\222\26\35\3\0\7\35\1\0\3\35"+ + "\1\u0121\40\35\3\0\1\35\2\331\4\35\1\0\1\331"+ + "\2\35\41\331\3\332\1\0\2\u0122\5\0\1\u0122\2\0"+ + "\1\332\3\u0122\14\332\1\u0122\17\332\1\u0122\3\332\15\0"+ + "\1\334\7\0\1\227\44\0\1\u0123\43\0\4\6\2\0"+ + "\1\6\2\0\33\6\1\u0124\16\6\2\0\1\6\2\0"+ + "\25\6\1\u0125\24\6\2\0\1\6\2\0\35\6\1\u0126"+ + "\14\6\2\0\1\6\2\0\33\6\1\u0127\16\6\2\0"+ + "\1\6\2\0\26\6\1\u0128\23\6\2\0\1\6\2\0"+ + "\13\6\1\u0129\36\6\2\0\1\6\2\0\37\6\1\u012a"+ + "\12\6\2\0\1\6\2\0\20\6\1\u012b\31\6\2\0"+ + "\1\6\2\0\33\6\1\u012c\16\6\2\0\1\6\2\0"+ + "\25\6\1\u012d\24\6\2\0\1\6\2\0\13\6\1\u012e"+ + "\36\6\2\0\1\6\2\0\36\6\1\u012f\13\6\2\0"+ + "\1\6\2\0\12\6\1\347\37\6\2\0\1\6\2\0"+ + "\33\6\1\u0130\16\6\2\0\1\6\2\0\15\6\1\205"+ + "\26\6\1\205\5\6\2\0\1\6\2\0\12\6\1\u0131"+ + "\37\6\2\0\1\6\2\0\12\6\1\u0132\37\6\2\0"+ + "\1\6\2\0\12\6\1\271\4\6\1\u0133\32\6\2\0"+ + "\1\6\2\0\15\6\1\u0134\1\6\1\u0135\3\6\1\u0136"+ + "\7\6\1\u0137\10\6\1\u0134\5\6\2\0\1\6\2\0"+ + "\16\6\1\u0138\7\6\1\u0139\23\6\2\0\1\6\2\0"+ + "\20\6\1\u013a\31\6\2\0\1\6\2\0\23\6\1\u013b"+ + "\26\6\2\0\1\6\2\0\20\6\1\u013c\31\6\2\0"+ + "\1\6\2\0\33\6\1\u013d\5\6\1\u013e\10\6\2\0"+ + "\1\6\2\0\23\6\1\u013f\26\6\2\0\1\6\2\0"+ + "\20\6\1\u0140\31\6\2\0\1\6\2\0\27\6\1\u0141"+ + "\22\6\2\0\1\6\2\0\20\6\1\u0142\31\6\2\0"+ + "\1\6\2\0\17\6\1\u0143\32\6\2\0\1\6\2\0"+ + "\25\6\1\313\24\6\2\0\1\6\2\0\12\6\1\u0144"+ + "\37\6\2\0\1\6\2\0\35\6\1\u0145\14\6\2\0"+ + "\1\6\2\0\13\6\1\u0143\36\6\2\0\1\6\2\0"+ + "\26\6\1\u0146\23\6\2\0\1\6\2\0\25\6\1\u0147"+ + "\24\6\2\0\1\6\2\0\24\6\1\u0148\25\6\2\0"+ + "\1\6\2\0\12\6\1\u0149\37\6\2\0\1\6\2\0"+ + "\23\6\1\u014a\26\6\2\0\1\6\2\0\12\6\1\u014b"+ + "\37\6\2\0\1\6\2\0\14\6\1\u014c\1\u014d\26\6"+ + "\1\u014d\5\6\2\0\1\6\2\0\27\6\1\u014e\22\6"+ + "\2\0\1\6\2\0\34\6\1\u014f\15\6\2\0\1\6"+ + "\2\0\23\6\1\u0150\26\6\2\0\1\6\2\0\16\6"+ + "\1\u0151\11\6\1\u0152\21\6\2\0\1\6\2\0\23\6"+ + "\1\u0153\26\6\2\0\1\6\2\0\33\6\1\u0154\16\6"+ + "\2\0\1\6\2\0\14\6\1\u0155\35\6\2\0\1\6"+ + "\2\0\14\6\1\u0156\35\6\2\0\1\6\2\0\20\6"+ + "\1\u0157\31\6\2\0\1\6\2\0\25\6\1\u0158\24\6"+ + "\2\0\1\6\2\0\20\6\1\u0159\31\6\2\0\1\6"+ + "\2\0\13\6\1\u015a\36\6\2\0\1\6\2\0\25\6"+ + "\1\u015b\24\6\2\0\1\6\2\0\12\6\1\u015c\37\6"+ + "\2\0\1\6\2\0\17\6\1\u015d\32\6\2\0\1\6"+ + "\2\0\20\6\1\u015e\31\6\2\0\1\6\2\0\12\6"+ + "\1\u015f\37\6\2\0\1\6\2\0\12\6\1\u0160\37\6"+ + "\2\0\1\6\2\0\20\6\1\u0161\31\6\2\0\1\6"+ + "\2\0\20\6\1\u0162\31\6\2\0\1\6\2\0\20\6"+ + "\1\u0163\31\6\2\0\1\6\2\0\33\6\1\u0143\16\6"+ + "\2\0\1\6\2\0\14\6\1\u0164\35\6\2\0\1\6"+ + "\2\0\34\6\1\u0165\15\6\2\0\1\6\2\0\16\6"+ + "\1\u0166\33\6\2\0\1\6\2\0\16\6\1\310\33\6"+ + "\2\0\1\6\2\0\36\6\1\u0167\13\6\2\0\1\6"+ + "\2\0\23\6\1\u0168\22\6\7\35\1\0\3\35\1\331"+ + "\40\35\16\0\1\332\43\0\4\6\2\0\1\6\2\0"+ + "\25\6\1\u0107\24\6\2\0\1\6\2\0\36\6\1\313"+ + "\13\6\2\0\1\6\2\0\20\6\1\u0169\31\6\2\0"+ + "\1\6\2\0\26\6\1\u016a\23\6\2\0\1\6\2\0"+ + "\41\6\1\u016b\10\6\2\0\1\6\2\0\11\6\1\u016c"+ + "\31\6\1\u016c\6\6\2\0\1\6\2\0\34\6\1\u016d"+ + "\15\6\2\0\1\6\2\0\33\6\1\u0161\16\6\2\0"+ + "\1\6\2\0\16\6\1\u016e\33\6\2\0\1\6\2\0"+ + "\27\6\1\u016f\22\6\2\0\1\6\2\0\34\6\1\u0170"+ + "\15\6\2\0\1\6\2\0\16\6\1\u0171\33\6\2\0"+ + "\1\6\2\0\14\6\1\u0172\35\6\2\0\1\6\2\0"+ + "\16\6\1\u0173\33\6\2\0\1\6\2\0\23\6\1\u0174"+ + "\26\6\2\0\1\6\2\0\23\6\1\77\26\6\2\0"+ + "\1\6\2\0\23\6\1\u0175\26\6\2\0\1\6\2\0"+ + "\26\6\1\u0176\23\6\2\0\1\6\2\0\13\6\1\u0177"+ + "\36\6\2\0\1\6\2\0\20\6\1\u0178\31\6\2\0"+ + "\1\6\2\0\32\6\1\u0179\17\6\2\0\1\6\2\0"+ + "\13\6\1\113\17\6\1\u017a\16\6\2\0\1\6\2\0"+ + "\15\6\1\u017b\26\6\1\u017b\5\6\2\0\1\6\2\0"+ + "\14\6\1\u0143\35\6\2\0\1\6\2\0\25\6\1\u017c"+ + "\24\6\2\0\1\6\2\0\20\6\1\u017d\31\6\2\0"+ + "\1\6\2\0\35\6\1\u017e\14\6\2\0\1\6\2\0"+ + "\32\6\1\u017f\17\6\2\0\1\6\2\0\14\6\1\u0180"+ + "\20\6\1\u0181\14\6\2\0\1\6\2\0\26\6\1\u0182"+ + "\23\6\2\0\1\6\2\0\14\6\1\u0183\35\6\2\0"+ + "\1\6\2\0\20\6\1\313\31\6\2\0\1\6\2\0"+ + "\13\6\1\u0184\36\6\2\0\1\6\2\0\26\6\1\u0185"+ + "\23\6\2\0\1\6\2\0\25\6\1\u0149\24\6\2\0"+ + "\1\6\2\0\32\6\1\u0186\17\6\2\0\1\6\2\0"+ + "\26\6\1\u0187\23\6\2\0\1\6\2\0\30\6\1\u0188"+ + "\21\6\2\0\1\6\2\0\33\6\1\u0189\16\6\2\0"+ + "\1\6\2\0\13\6\1\u018a\36\6\2\0\1\6\2\0"+ + "\24\6\1\u018b\25\6\2\0\1\6\2\0\23\6\1\u018c"+ + "\26\6\2\0\1\6\2\0\23\6\1\u018d\26\6\2\0"+ + "\1\6\2\0\12\6\1\u018e\37\6\2\0\1\6\2\0"+ + "\35\6\1\u0143\14\6\2\0\1\6\2\0\32\6\1\u018f"+ + "\17\6\2\0\1\6\2\0\35\6\1\u0190\14\6\2\0"+ + "\1\6\2\0\14\6\1\u0191\35\6\2\0\1\6\2\0"+ + "\26\6\1\u0192\23\6\2\0\1\6\2\0\20\6\1\u0193"+ + "\31\6\2\0\1\6\2\0\13\6\1\u0194\36\6\2\0"+ + "\1\6\2\0\12\6\1\u0195\37\6\2\0\1\6\2\0"+ + "\12\6\1\u0196\37\6\2\0\1\6\2\0\12\6\1\u0197"+ + "\1\6\1\u0198\3\6\1\u0199\4\6\1\u0107\1\6\1\u019a"+ + "\22\6\2\0\1\6\2\0\20\6\1\u019b\31\6\2\0"+ + "\1\6\2\0\14\6\1\313\35\6\2\0\1\6\2\0"+ + "\26\6\1\u019c\23\6\2\0\1\6\2\0\12\6\1\u019d"+ + "\37\6\2\0\1\6\2\0\33\6\1\u019e\16\6\2\0"+ + "\1\6\2\0\24\6\1\u019f\1\u01a0\7\6\1\u01a1\14\6"+ + "\2\0\1\6\2\0\20\6\1\u01a2\31\6\2\0\1\6"+ + "\2\0\24\6\1\u01a3\25\6\2\0\1\6\2\0\11\6"+ + "\1\243\1\271\3\6\1\244\1\273\1\274\3\6\1\276"+ + "\1\6\1\246\14\6\1\243\6\6\2\0\1\6\2\0"+ + "\12\6\1\u01a4\37\6\2\0\1\6\2\0\15\6\1\u01a5"+ + "\26\6\1\u01a5\5\6\2\0\1\6\2\0\17\6\1\u01a6"+ + "\32\6\2\0\1\6\2\0\16\6\1\u01a7\33\6\2\0"+ + "\1\6\2\0\24\6\1\u01a8\25\6\2\0\1\6\2\0"+ + "\15\6\1\u01a9\26\6\1\u01a9\5\6\2\0\1\6\2\0"+ + "\33\6\1\u01aa\16\6\2\0\1\6\2\0\31\6\1\u01ab"+ + "\20\6\2\0\1\6\2\0\20\6\1\u01ac\31\6\2\0"+ + "\1\6\2\0\16\6\1\u01ad\33\6\2\0\1\6\2\0"+ + "\15\6\1\u01ae\26\6\1\u01ae\5\6\2\0\1\6\2\0"+ + "\17\6\1\202\32\6\2\0\1\6\2\0\12\6\1\u01af"+ + "\37\6\2\0\1\6\2\0\15\6\1\u01b0\26\6\1\u01b0"+ + "\5\6\2\0\1\6\2\0\16\6\1\u01b1\33\6\2\0"+ + "\1\6\2\0\25\6\1\u01b2\24\6\2\0\1\6\2\0"+ + "\32\6\1\313\17\6\2\0\1\6\2\0\40\6\1\u01b3"+ + "\11\6\2\0\1\6\2\0\32\6\1\u01b4\17\6\2\0"+ + "\1\6\2\0\13\6\1\u01b5\36\6\2\0\1\6\2\0"+ + "\23\6\1\u01b6\26\6\2\0\1\6\2\0\25\6\1\u01b7"+ + "\24\6\2\0\1\6\2\0\27\6\1\u01b8\22\6\2\0"+ + "\1\6\2\0\23\6\1\u01b9\26\6\2\0\1\6\2\0"+ + "\34\6\1\313\15\6\2\0\1\6\2\0\37\6\1\u01ba"+ + "\12\6\2\0\1\6\2\0\17\6\1\u01bb\32\6\2\0"+ + "\1\6\2\0\20\6\1\u01bc\31\6\2\0\1\6\2\0"+ + "\20\6\1\u01bd\31\6\2\0\1\6\2\0\35\6\1\u01be"+ + "\14\6\2\0\1\6\2\0\24\6\1\u01bf\25\6\2\0"+ + "\1\6\2\0\23\6\1\u01c0\3\6\1\361\1\u01c1\21\6"+ + "\2\0\1\6\2\0\23\6\1\u01c2\26\6\2\0\1\6"+ + "\2\0\34\6\1\u01c3\15\6\2\0\1\6\2\0\34\6"+ + "\1\u01c4\15\6\2\0\1\6\2\0\27\6\1\u01c5\22\6"+ + "\2\0\1\6\2\0\31\6\1\u01c6\20\6\2\0\1\6"+ + "\2\0\14\6\1\u01c7\35\6\2\0\1\6\2\0\34\6"+ + "\1\u01c8\15\6\2\0\1\6\2\0\33\6\1\u01c9\16\6"+ + "\2\0\1\6\2\0\34\6\1\u01ca\15\6\2\0\1\6"+ + "\2\0\13\6\1\u01cb\36\6\2\0\1\6\2\0\11\6"+ + "\1\u01cc\31\6\1\u01cc\6\6\2\0\1\6\2\0\20\6"+ + "\1\u01cd\31\6\2\0\1\6\2\0\12\6\1\271\10\6"+ + "\1\u0106\6\6\1\u010a\1\6\1\u010b\15\6\2\0\1\6"+ + "\2\0\16\6\1\u01ce\33\6\2\0\1\6\2\0\34\6"+ + "\1\u01cf\15\6\2\0\1\6\2\0\33\6\1\u01d0\16\6"+ + "\2\0\1\6\2\0\20\6\1\u01d1\31\6\2\0\1\6"+ + "\2\0\14\6\1\u01d2\11\6\1\237\1\361\22\6\2\0"+ + "\1\6\2\0\27\6\1\u01d3\22\6\2\0\1\6\2\0"+ + "\33\6\1\u01d4\16\6\2\0\1\6\2\0\12\6\1\u01d5"+ + "\37\6\2\0\1\6\2\0\41\6\1\u01d6\10\6\2\0"+ + "\1\6\2\0\26\6\1\u01d7\23\6\2\0\1\6\2\0"+ + "\41\6\1\u01d8\10\6\2\0\1\6\2\0\33\6\1\u01d9"+ + "\16\6\2\0\1\6\2\0\12\6\1\271\3\6\1\u01da"+ + "\1\273\32\6\2\0\1\6\2\0\35\6\1\u01db\14\6"+ + "\2\0\1\6\2\0\13\6\1\u017c\36\6\2\0\1\6"+ + "\2\0\13\6\1\u01dc\36\6\2\0\1\6\2\0\20\6"+ + "\1\u01dd\31\6\2\0\1\6\2\0\20\6\1\u01de\3\6"+ + "\1\u01df\1\6\1\237\1\6\1\362\2\6\1\u01e0\16\6"+ + "\2\0\1\6\2\0\12\6\1\u01e1\37\6\2\0\1\6"+ + "\2\0\11\6\1\u01e2\31\6\1\u01e2\6\6\2\0\1\6"+ + "\2\0\15\6\1\u01e3\26\6\1\u01e3\5\6\2\0\1\6"+ + "\2\0\20\6\1\u015b\31\6\2\0\1\6\2\0\20\6"+ + "\1\u01e4\31\6\2\0\1\6\2\0\40\6\1\313\11\6"+ + "\2\0\1\6\2\0\26\6\1\u01e5\23\6\2\0\1\6"+ + "\2\0\35\6\1\u01e6\14\6\2\0\1\6\2\0\24\6"+ + "\1\236\11\6\1\u01e7\13\6\2\0\1\6\2\0\33\6"+ + "\1\u01e8\16\6\2\0\1\6\2\0\33\6\1\u01e9\16\6"+ + "\2\0\1\6\2\0\31\6\1\u01ea\20\6\2\0\1\6"+ + "\2\0\15\6\1\u01eb\26\6\1\u01eb\5\6\2\0\1\6"+ + "\2\0\25\6\1\u01ec\24\6\2\0\1\6\2\0\32\6"+ + "\1\u01ed\17\6\2\0\1\6\2\0\12\6\1\u01ee\37\6"+ + "\2\0\1\6\2\0\20\6\1\u01ef\31\6\2\0\1\6"+ + "\2\0\25\6\1\u01f0\24\6\2\0\1\6\2\0\20\6"+ + "\1\u01f1\31\6\2\0\1\6\2\0\27\6\1\u01f2\22\6"+ + "\2\0\1\6\2\0\26\6\1\u011a\23\6\2\0\1\6"+ + "\2\0\20\6\1\u01f3\31\6\2\0\1\6\2\0\34\6"+ + "\1\u01f4\15\6\2\0\1\6\2\0\34\6\1\u01f5\15\6"+ + "\2\0\1\6\2\0\33\6\1\u013d\16\6\2\0\1\6"+ + "\2\0\13\6\1\u01f6\36\6\2\0\1\6\2\0\25\6"+ + "\1\u01f7\24\6\2\0\1\6\2\0\23\6\1\u01f8\26\6"+ + "\2\0\1\6\2\0\34\6\1\u01f9\15\6\2\0\1\6"+ + "\2\0\24\6\1\u01fa\25\6\2\0\1\6\2\0\31\6"+ + "\1\u01fb\20\6\2\0\1\6\2\0\12\6\1\u01fc\37\6"+ + "\2\0\1\6\2\0\14\6\1\u01fd\35\6\2\0\1\6"+ + "\2\0\23\6\1\u01fe\26\6\2\0\1\6\2\0\16\6"+ + "\1\u01ff\33\6\2\0\1\6\2\0\12\6\1\271\5\6"+ + "\1\274\31\6\2\0\1\6\2\0\20\6\1\u0200\31\6"+ + "\2\0\1\6\2\0\12\6\1\u0201\37\6\2\0\1\6"+ + "\2\0\16\6\1\u0202\33\6\2\0\1\6\2\0\17\6"+ + "\1\u0203\32\6\2\0\1\6\2\0\15\6\1\u0204\2\6"+ + "\1\u0205\2\6\1\u0106\1\u0206\2\6\1\u0207\1\u0208\1\6"+ + "\1\u0209\1\u020a\1\u020b\7\6\1\u0204\5\6\2\0\1\6"+ + "\2\0\26\6\1\u020c\23\6\2\0\1\6\2\0\14\6"+ + "\1\u020d\35\6\2\0\1\6\2\0\24\6\1\u020e\25\6"+ + "\2\0\1\6\2\0\13\6\1\u01d0\36\6\2\0\1\6"+ + "\2\0\15\6\1\u020f\26\6\1\u020f\5\6\2\0\1\6"+ + "\2\0\17\6\1\u0210\32\6\2\0\1\6\2\0\26\6"+ + "\1\u0211\23\6\2\0\1\6\2\0\16\6\1\u0212\33\6"+ + "\2\0\1\6\2\0\23\6\1\u0213\26\6\2\0\1\6"+ + "\2\0\31\6\1\371\20\6\2\0\1\6\2\0\13\6"+ + "\1\u0214\36\6\2\0\1\6\2\0\35\6\1\u0215\14\6"+ + "\2\0\1\6\2\0\12\6\1\u0216\37\6\2\0\1\6"+ + "\2\0\31\6\1\u0217\20\6\2\0\1\6\2\0\24\6"+ + "\1\266\25\6\2\0\1\6\2\0\23\6\1\u0218\26\6"+ + "\2\0\1\6\2\0\33\6\1\u0219\16\6\2\0\1\6"+ + "\2\0\35\6\1\313\14\6\2\0\1\6\2\0\25\6"+ + "\1\u021a\24\6\2\0\1\6\2\0\26\6\1\u021b\23\6"+ + "\2\0\1\6\2\0\34\6\1\371\15\6\2\0\1\6"+ + "\2\0\12\6\1\u021c\1\u021d\21\6\1\u021e\14\6\2\0"+ + "\1\6\2\0\20\6\1\u021f\31\6\2\0\1\6\2\0"+ + "\16\6\1\u0220\33\6\2\0\1\6\2\0\21\6\1\u0221"+ + "\23\6\1\u0221\4\6\2\0\1\6\2\0\33\6\1\u0222"+ + "\16\6\2\0\1\6\2\0\14\6\1\u0174\35\6\2\0"+ + "\1\6\2\0\20\6\1\u0223\31\6\2\0\1\6\2\0"+ + "\14\6\1\u0224\35\6\2\0\1\6\2\0\20\6\1\u0225"+ + "\31\6\2\0\1\6\2\0\24\6\1\u0226\2\6\1\u0227"+ + "\22\6\2\0\1\6\2\0\16\6\1\u0228\33\6\2\0"+ + "\1\6\2\0\26\6\1\u0229\23\6\2\0\1\6\2\0"+ + "\25\6\1\u022a\24\6\2\0\1\6\2\0\20\6\1\u022b"+ + "\31\6\2\0\1\6\2\0\23\6\1\u022c\26\6\2\0"+ + "\1\6\2\0\26\6\1\u022d\23\6\2\0\1\6\2\0"+ + "\25\6\1\u022e\24\6\2\0\1\6\2\0\23\6\1\u022f"+ + "\26\6\2\0\1\6\2\0\33\6\1\u0230\16\6\2\0"+ + "\1\6\2\0\17\6\1\u0200\32\6\2\0\1\6\2\0"+ + "\20\6\1\u0231\31\6\2\0\1\6\2\0\33\6\1\u0232"+ + "\16\6\2\0\1\6\2\0\27\6\1\u01d0\22\6\2\0"+ + "\1\6\2\0\13\6\1\313\36\6\2\0\1\6\2\0"+ + "\35\6\1\u0233\14\6\2\0\1\6\2\0\12\6\1\u0234"+ + "\37\6\2\0\1\6\2\0\12\6\1\271\37\6\2\0"+ + "\1\6\2\0\11\6\1\u0235\31\6\1\u0235\3\6\1\u0236"+ + "\2\6\2\0\1\6\2\0\52\6\2\0\1\6\2\0"+ + "\32\6\1\u0143\17\6\2\0\1\6\2\0\25\6\1\u0174"+ + "\24\6\2\0\1\6\2\0\12\6\1\313\37\6\2\0"+ + "\1\6\2\0\15\6\1\u0237\26\6\1\u0237\5\6\2\0"+ + "\1\6\2\0\13\6\1\u0238\36\6\2\0\1\6\2\0"+ + "\12\6\1\u0239\37\6\2\0\1\6\2\0\33\6\1\u023a"+ + "\16\6\2\0\1\6\2\0\25\6\1\u023b\24\6\2\0"+ + "\1\6\2\0\26\6\1\u023c\23\6\2\0\1\6\2\0"+ + "\20\6\1\u023d\31\6\2\0\1\6\2\0\16\6\1\u023e"+ + "\33\6\2\0\1\6\2\0\33\6\1\u023f\16\6\2\0"+ + "\1\6\2\0\20\6\1\u0240\31\6\2\0\1\6\2\0"+ + "\33\6\1\u0241\16\6\2\0\1\6\2\0\33\6\1\u0242"+ + "\16\6\2\0\1\6\2\0\12\6\1\u0243\37\6\2\0"+ + "\1\6\2\0\13\6\1\u0244\7\6\1\u0106\26\6\2\0"+ + "\1\6\2\0\16\6\1\371\33\6\2\0\1\6\2\0"+ + "\17\6\1\u01c5\32\6\2\0\1\6\2\0\34\6\1\u0245"+ + "\15\6\2\0\1\6\2\0\32\6\1\u0246\17\6\2\0"+ + "\1\6\2\0\24\6\1\u0247\25\6\2\0\1\6\2\0"+ + "\16\6\1\u0248\33\6\2\0\1\6\2\0\23\6\1\u0249"+ + "\26\6\2\0\1\6\2\0\20\6\1\u024a\31\6\2\0"+ + "\1\6\2\0\14\6\1\u024b\1\6\1\u024c\33\6\2\0"+ + "\1\6\2\0\12\6\1\u024d\37\6\2\0\1\6\2\0"+ + "\26\6\1\u024e\23\6\2\0\1\6\2\0\32\6\1\u024f"+ + "\17\6\2\0\1\6\2\0\25\6\1\u0250\24\6\2\0"+ + "\1\6\2\0\20\6\1\u0251\31\6\2\0\1\6\2\0"+ + "\20\6\1\u0252\31\6\2\0\1\6\2\0\23\6\1\u0253"+ + "\26\6\2\0\1\6\2\0\23\6\1\114\26\6\2\0"+ + "\1\6\2\0\41\6\1\313\10\6\2\0\1\6\2\0"+ + "\14\6\1\u0254\35\6\2\0\1\6\2\0\35\6\1\u0255"+ + "\14\6\2\0\1\6\2\0\33\6\1\u0256\16\6\2\0"+ + "\1\6\2\0\34\6\1\u0257\15\6\2\0\1\6\2\0"+ + "\14\6\1\u0258\35\6\2\0\1\6\2\0\17\6\1\u0259"+ + "\32\6\2\0\1\6\2\0\20\6\1\u025a\31\6\2\0"+ + "\1\6\2\0\17\6\1\u025b\32\6\2\0\1\6\2\0"+ + "\24\6\1\362\25\6\2\0\1\6\2\0\23\6\1\u025c"+ + "\26\6\2\0\1\6\2\0\33\6\1\u025d\16\6\2\0"+ + "\1\6\2\0\14\6\1\u025e\35\6\2\0\1\6\2\0"+ + "\12\6\1\u025f\37\6\2\0\1\6\2\0\27\6\1\u0260"+ + "\22\6\2\0\1\6\2\0\11\6\1\u0261\31\6\1\u0261"+ + "\6\6\2\0\1\6\2\0\27\6\1\361\22\6\2\0"+ + "\1\6\2\0\14\6\1\u0262\35\6\2\0\1\6\2\0"+ + "\16\6\1\u0263\33\6\2\0\1\6\2\0\20\6\1\u0264"+ + "\31\6\2\0\1\6\2\0\16\6\1\u0265\33\6\2\0"+ + "\1\6\2\0\16\6\1\u0266\33\6\2\0\1\6\2\0"+ + "\17\6\1\u0267\3\6\1\u0106\1\6\1\u0268\7\6\1\u0269"+ + "\1\u026a\13\6\2\0\1\6\2\0\16\6\1\u026b\33\6"+ + "\2\0\1\6\2\0\12\6\1\167\37\6\2\0\1\6"+ + "\2\0\24\6\1\276\25\6\2\0\1\6\2\0\26\6"+ + "\1\u026c\23\6\2\0\1\6\2\0\23\6\1\u026d\26\6"+ + "\2\0\1\6\2\0\35\6\1\u026e\14\6\2\0\1\6"+ + "\2\0\33\6\1\u026f\16\6\2\0\1\6\2\0\25\6"+ + "\1\u0270\24\6\2\0\1\6\2\0\26\6\1\u0271\23\6"+ + "\2\0\1\6\2\0\35\6\1\u0272\14\6\2\0\1\6"+ + "\2\0\17\6\1\313\32\6\2\0\1\6\2\0\16\6"+ + "\1\u0273\33\6\2\0\1\6\2\0\15\6\1\u020f\5\6"+ + "\1\u0274\1\6\1\u0275\1\6\1\u019a\2\6\1\u010a\4\6"+ + "\1\u0276\4\6\1\u020f\5\6\2\0\1\6\2\0\33\6"+ + "\1\u0277\16\6\2\0\1\6\2\0\33\6\1\u0278\16\6"+ + "\2\0\1\6\2\0\20\6\1\u0279\31\6\2\0\1\6"+ + "\2\0\40\6\1\u01c5\11\6\2\0\1\6\2\0\33\6"+ + "\1\u01a6\16\6\2\0\1\6\2\0\16\6\1\372\33\6"+ + "\2\0\1\6\2\0\25\6\1\u027a\24\6\2\0\1\6"+ + "\2\0\17\6\1\u027b\32\6\2\0\1\6\2\0\25\6"+ + "\1\u027c\24\6\2\0\1\6\2\0\24\6\1\u027d\25\6"+ + "\2\0\1\6\2\0\24\6\1\313\25\6\2\0\1\6"+ + "\2\0\16\6\1\u027e\33\6\2\0\1\6\2\0\27\6"+ + "\1\313\22\6\2\0\1\6\2\0\35\6\1\u01f8\14\6"+ + "\2\0\1\6\2\0\33\6\1\u027f\16\6\2\0\1\6"+ + "\2\0\12\6\1\u0280\37\6\2\0\1\6\2\0\35\6"+ + "\1\u021e\14\6\2\0\1\6\2\0\23\6\1\u0200\26\6"+ + "\2\0\1\6\2\0\16\6\1\u0281\33\6\2\0\1\6"+ + "\2\0\16\6\1\u0282\33\6\2\0\1\6\2\0\14\6"+ + "\1\u0241\35\6\2\0\1\6\2\0\16\6\1\u0233\33\6"+ + "\2\0\1\6\2\0\13\6\1\u0283\36\6\2\0\1\6"+ + "\2\0\12\6\1\202\37\6\2\0\1\6\2\0\12\6"+ + "\1\u0284\37\6\2\0\1\6\2\0\13\6\1\u0285\36\6"+ + "\2\0\1\6\2\0\31\6\1\u0286\20\6\2\0\1\6"+ + "\2\0\14\6\1\u0287\35\6\2\0\1\6\2\0\17\6"+ + "\1\u0288\32\6\2\0\1\6\2\0\20\6\1\u0289\31\6"+ + "\2\0\1\6\2\0\12\6\1\u028a\37\6\2\0\1\6"+ + "\2\0\26\6\1\u028b\23\6\2\0\1\6\2\0\25\6"+ + "\1\u0200\24\6\2\0\1\6\2\0\36\6\1\u0143\13\6"+ + "\2\0\1\6\2\0\25\6\1\u028c\24\6\2\0\1\6"+ + "\2\0\26\6\1\u028d\23\6\2\0\1\6\2\0\26\6"+ + "\1\u028e\23\6\2\0\1\6\2\0\34\6\1\u028f\15\6"+ + "\2\0\1\6\2\0\20\6\1\u0290\31\6\2\0\1\6"+ + "\2\0\17\6\1\u0291\32\6\2\0\1\6\2\0\25\6"+ + "\1\u0292\24\6\2\0\1\6\2\0\30\6\1\u0293\21\6"+ + "\2\0\1\6\2\0\13\6\1\u0294\36\6\2\0\1\6"+ + "\2\0\20\6\1\u0295\31\6\2\0\1\6\2\0\27\6"+ + "\1\u0296\22\6\2\0\1\6\2\0\34\6\1\u0297\15\6"+ + "\2\0\1\6\2\0\26\6\1\u0298\23\6\2\0\1\6"+ + "\2\0\12\6\1\u0299\37\6\2\0\1\6\2\0\17\6"+ + "\1\u029a\32\6\2\0\1\6\2\0\26\6\1\u029b\23\6"+ + "\2\0\1\6\2\0\26\6\1\u01f8\23\6\2\0\1\6"+ + "\2\0\26\6\1\u029c\23\6\2\0\1\6\2\0\24\6"+ + "\1\u029d\25\6\2\0\1\6\2\0\14\6\1\u0200\35\6"+ + "\2\0\1\6\2\0\14\6\1\167\35\6\2\0\1\6"+ + "\2\0\23\6\1\u029e\26\6\2\0\1\6\2\0\27\6"+ + "\1\u029f\22\6\2\0\1\6\2\0\11\6\1\u01b0\31\6"+ + "\1\u01b0\6\6\2\0\1\6\2\0\25\6\1\u0143\24\6"+ + "\2\0\1\6\2\0\35\6\1\u02a0\14\6\2\0\1\6"+ + "\2\0\24\6\1\u02a1\25\6\2\0\1\6\2\0\15\6"+ + "\1\u02a2\26\6\1\u02a2\5\6\2\0\1\6\2\0\12\6"+ + "\1\u0143\37\6\2\0\1\6\2\0\12\6\1\u02a1\37\6"+ + "\2\0\1\6\2\0\34\6\1\u011a\15\6\2\0\1\6"+ + "\2\0\33\6\1\u02a3\16\6\2\0\1\6\2\0\25\6"+ + "\1\u024e\24\6\2\0\1\6\2\0\34\6\1\u02a4\15\6"+ + "\2\0\1\6\2\0\26\6\1\u02a5\23\6\2\0\1\6"+ + "\2\0\23\6\1\u02a6\26\6\2\0\1\6\2\0\30\6"+ + "\1\u02a7\21\6\2\0\1\6\2\0\33\6\1\u02a8\16\6"+ + "\2\0\1\6\2\0\15\6\1\u02a9\26\6\1\u02a9\5\6"+ + "\2\0\1\6\2\0\32\6\1\u02aa\17\6\2\0\1\6"+ + "\2\0\34\6\1\u02ab\15\6\2\0\1\6\2\0\14\6"+ + "\1\u02ac\35\6\2\0\1\6\2\0\33\6\1\u02ad\16\6"+ + "\2\0\1\6\2\0\12\6\1\u02ae\37\6\2\0\1\6"+ + "\2\0\12\6\1\u02af\37\6\2\0\1\6\2\0\17\6"+ + "\1\u02b0\32\6\2\0\1\6\2\0\23\6\1\u02b1\26\6"+ + "\2\0\1\6\2\0\15\6\1\u02b2\26\6\1\u02b2\5\6"+ + "\2\0\1\6\2\0\13\6\1\u02b3\13\6\1\372\22\6"+ + "\2\0\1\6\2\0\13\6\1\u02b4\36\6\2\0\1\6"+ + "\2\0\12\6\1\u02b5\37\6\2\0\1\6\2\0\23\6"+ + "\1\u01fa\26\6\2\0\1\6\2\0\32\6\1\u02b6\17\6"+ + "\2\0\1\6\2\0\25\6\1\u02b7\24\6\2\0\1\6"+ + "\2\0\36\6\1\u02b8\13\6\2\0\1\6\2\0\20\6"+ + "\1\u02b9\31\6\2\0\1\6\2\0\14\6\1\u02a1\35\6"+ + "\2\0\1\6\2\0\20\6\1\u0220\31\6\2\0\1\6"+ + "\2\0\23\6\1\u02ba\26\6\2\0\1\6\2\0\11\6"+ + "\1\313\31\6\1\313\6\6\2\0\1\6\2\0\31\6"+ + "\1\u02bb\20\6\2\0\1\6\2\0\20\6\1\u02bc\31\6"+ + "\2\0\1\6\2\0\13\6\1\u02bd\36\6\2\0\1\6"+ + "\2\0\32\6\1\u02be\17\6\2\0\1\6\2\0\27\6"+ + "\1\u02bf\22\6\2\0\1\6\2\0\26\6\1\u02c0\23\6"+ + "\2\0\1\6\2\0\16\6\1\u02c1\33\6\2\0\1\6"+ + "\2\0\26\6\1\313\23\6\2\0\1\6\2\0\20\6"+ + "\1\u02c2\31\6\2\0\1\6\2\0\14\6\1\u02c3\35\6"+ + "\2\0\1\6\2\0\12\6\1\u02c4\37\6\2\0\1\6"+ + "\2\0\16\6\1\u02c5\33\6\2\0\1\6\2\0\20\6"+ + "\1\u02c6\31\6\2\0\1\6\2\0\13\6\1\u02c7\36\6"+ + "\2\0\1\6\2\0\20\6\1\u0250\31\6\2\0\1\6"+ + "\2\0\33\6\1\u02c8\16\6\2\0\1\6\2\0\20\6"+ + "\1\u02c9\31\6\2\0\1\6\2\0\23\6\1\u02ca\26\6"+ + "\2\0\1\6\2\0\23\6\1\u02cb\26\6\2\0\1\6"+ + "\2\0\20\6\1\u02cc\31\6\2\0\1\6\2\0\26\6"+ + "\1\u02cd\23\6\2\0\1\6\2\0\24\6\1\u02ce\25\6"+ + "\2\0\1\6\2\0\16\6\1\114\33\6\2\0\1\6"+ + "\2\0\20\6\1\u0286\31\6\2\0\1\6\2\0\25\6"+ + "\1\u0233\24\6\2\0\1\6\2\0\27\6\1\u0227\22\6"+ + "\2\0\1\6\2\0\12\6\1\u02cf\37\6\2\0\1\6"+ + "\2\0\13\6\1\u02d0\36\6\2\0\1\6\2\0\12\6"+ + "\1\u02d1\37\6\2\0\1\6\2\0\30\6\1\u02d2\21\6"+ + "\2\0\1\6\2\0\27\6\1\205\22\6\2\0\1\6"+ + "\2\0\12\6\1\205\37\6\2\0\1\6\2\0\35\6"+ + "\1\u02d3\14\6\2\0\1\6\2\0\20\6\1\u02d4\31\6"+ + "\2\0\1\6\2\0\32\6\1\u02d5\17\6\2\0\1\6"+ + "\2\0\15\6\1\u02d6\26\6\1\u02d6\5\6\2\0\1\6"+ + "\2\0\33\6\1\u02d7\16\6\2\0\1\6\2\0\23\6"+ + "\1\u02d8\26\6\2\0\1\6\2\0\20\6\1\u02d9\31\6"+ + "\2\0\1\6\2\0\33\6\1\u02da\16\6\2\0\1\6"+ + "\2\0\14\6\1\u02db\35\6\2\0\1\6\2\0\12\6"+ + "\1\u02dc\37\6\2\0\1\6\2\0\34\6\1\u02dd\15\6"+ + "\2\0\1\6\2\0\33\6\1\u02de\16\6\2\0\1\6"+ + "\2\0\20\6\1\u02df\31\6\2\0\1\6\2\0\20\6"+ + "\1\u02e0\31\6\2\0\1\6\2\0\26\6\1\u02e1\23\6"+ + "\2\0\1\6\2\0\26\6\1\u02e2\23\6\2\0\1\6"+ + "\2\0\34\6\1\u02e3\15\6\2\0\1\6\2\0\23\6"+ + "\1\u02e4\26\6\2\0\1\6\2\0\33\6\1\u02e5\16\6"+ + "\2\0\1\6\2\0\16\6\1\u02e6\33\6\2\0\1\6"+ + "\2\0\31\6\1\u02aa\20\6\2\0\1\6\2\0\30\6"+ + "\1\u01c1\21\6\2\0\1\6\2\0\32\6\1\u02e7\17\6"+ + "\2\0\1\6\2\0\27\6\1\u02e8\22\6\2\0\1\6"+ + "\2\0\20\6\1\u02e9\31\6\2\0\1\6\2\0\14\6"+ + "\1\u02ea\35\6\2\0\1\6\2\0\12\6\1\u02eb\37\6"+ + "\2\0\1\6\2\0\14\6\1\u02ec\35\6\2\0\1\6"+ + "\2\0\16\6\1\u02ed\33\6\2\0\1\6\2\0\15\6"+ + "\1\u01a9\1\6\1\u02ee\24\6\1\u01a9\5\6\2\0\1\6"+ + "\2\0\33\6\1\u02ef\16\6\2\0\1\6\2\0\33\6"+ + "\1\u02f0\16\6\2\0\1\6\2\0\20\6\1\u02f1\16\6"+ + "\1\u02f2\12\6\2\0\1\6\2\0\15\6\1\u02f3\26\6"+ + "\1\u02f3\5\6\2\0\1\6\2\0\16\6\1\u0241\33\6"+ + "\2\0\1\6\2\0\16\6\1\u0250\33\6\2\0\1\6"+ + "\2\0\36\6\1\u02f4\13\6\2\0\1\6\2\0\20\6"+ + "\1\326\31\6\2\0\1\6\2\0\25\6\1\u02f5\24\6"+ + "\2\0\1\6\2\0\25\6\1\u02f6\24\6\2\0\1\6"+ + "\2\0\21\6\1\u02f7\23\6\1\u02f7\4\6\2\0\1\6"+ + "\2\0\33\6\1\u02f8\16\6\2\0\1\6\2\0\20\6"+ + "\1\u02f9\31\6\2\0\1\6\2\0\12\6\1\u02fa\37\6"+ + "\2\0\1\6\2\0\16\6\1\u02fb\33\6\2\0\1\6"+ + "\2\0\14\6\1\u02fc\35\6\2\0\1\6\2\0\12\6"+ + "\1\u02b0\37\6\2\0\1\6\2\0\33\6\1\u02fd\16\6"+ + "\2\0\1\6\2\0\34\6\1\u02fe\15\6\2\0\1\6"+ + "\2\0\15\6\1\202\26\6\1\202\5\6\2\0\1\6"+ + "\2\0\20\6\1\u02aa\31\6\2\0\1\6\2\0\26\6"+ + "\1\u02ff\23\6\2\0\1\6\2\0\24\6\1\u0300\25\6"+ + "\2\0\1\6\2\0\26\6\1\u0301\23\6\2\0\1\6"+ + "\2\0\16\6\1\u0302\33\6\2\0\1\6\2\0\33\6"+ + "\1\u0303\16\6\2\0\1\6\2\0\11\6\1\u01dd\31\6"+ + "\1\u01dd\6\6\2\0\1\6\2\0\15\6\1\u0304\26\6"+ + "\1\u0304\5\6\2\0\1\6\2\0\26\6\1\u0305\23\6"+ + "\2\0\1\6\2\0\33\6\1\u0306\16\6\2\0\1\6"+ + "\2\0\20\6\1\u0307\31\6\2\0\1\6\2\0\25\6"+ + "\1\u0308\24\6\2\0\1\6\2\0\20\6\1\u0309\31\6"+ + "\2\0\1\6\2\0\33\6\1\u0250\16\6\2\0\1\6"+ + "\2\0\30\6\1\u030a\21\6\2\0\1\6\2\0\16\6"+ + "\1\u030b\33\6\2\0\1\6\2\0\20\6\1\u030c\31\6"+ + "\2\0\1\6\2\0\34\6\1\u030d\15\6\2\0\1\6"+ + "\2\0\26\6\1\u030e\23\6\2\0\1\6\2\0\33\6"+ + "\1\205\16\6\2\0\1\6\2\0\14\6\1\u030f\35\6"+ + "\2\0\1\6\2\0\23\6\1\u0310\26\6\2\0\1\6"+ + "\2\0\34\6\1\u0311\15\6\2\0\1\6\2\0\14\6"+ + "\1\u0312\35\6\2\0\1\6\2\0\12\6\1\u0313\37\6"+ + "\2\0\1\6\2\0\33\6\1\u0314\16\6\2\0\1\6"+ + "\2\0\33\6\1\u015b\16\6\2\0\1\6\2\0\20\6"+ + "\1\u0315\31\6\2\0\1\6\2\0\17\6\1\u0316\32\6"+ + "\2\0\1\6\2\0\12\6\1\u0317\37\6\2\0\1\6"+ + "\2\0\27\6\1\372\22\6\2\0\1\6\2\0\16\6"+ + "\1\u0150\33\6\2\0\1\6\2\0\24\6\1\u0143\25\6"+ + "\2\0\1\6\2\0\33\6\1\u0318\16\6\2\0\1\6"+ + "\2\0\16\6\1\u0319\33\6\2\0\1\6\2\0\20\6"+ + "\1\u031a\31\6\2\0\1\6\2\0\36\6\1\202\13\6"+ + "\2\0\1\6\2\0\23\6\1\u031b\26\6\2\0\1\6"+ + "\2\0\14\6\1\u01a6\31\6"; + + private static int [] zzUnpackTrans() { + int [] result = new int[36754]; + 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; + } + + + /* 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; + + /* 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 = + "\3\0\6\1\2\11\22\1\1\11\10\1\4\11\1\1"+ + "\1\11\2\1\1\0\52\1\4\0\2\1\1\11\1\1"+ + "\1\11\62\1\4\0\102\1\2\0\105\1\2\0\u01f8\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[795]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HtaccessTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns how to transform a line into a line comment. + * + * @return The line comment start and end text for .htaccess files. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + default: + state = YYINITIAL; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public HtaccessTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public HtaccessTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 172) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 12: + { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 20: break; + case 4: + { addNullToken(); return firstToken; + } + case 21: break; + case 15: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-2), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + case 22: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 23: break; + case 17: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 24: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 25: break; + case 6: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 26: break; + case 18: + { addToken(Token.FUNCTION); + } + case 27: break; + case 14: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 28: break; + case 13: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + case 29: break; + case 9: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 30: break; + case 8: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 31: break; + case 16: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 32: break; + case 10: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 33: break; + case 19: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 34: break; + case 5: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 35: break; + case 11: + { addToken(Token.OPERATOR); + } + case 36: break; + case 7: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 37: break; + case 1: + { + } + case 38: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 796: break; + case INTAG: { + addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; + } + case 797: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; + } + case 798: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 799: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; + } + case 800: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex new file mode 100644 index 0000000..d78e551 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex @@ -0,0 +1,225 @@ +/* + * 11/04/2016 + * + * IniTokenMaker.java - Scanner for .ini files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a .ini file.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated IniTokenMaker.java file will + * contain two definitions of both zzRefill and + * yyreset. You should hand-delete the second of each + * definition (the ones generated by the lexer), as these generated + * methods modify the input buffer, which we'll never have to do. + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway. + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance. + *
+ * + * @author Robert Futrell + * @version 0.4 + * + */ +%% + +%public +%class IniTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public IniTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Equals = ([=]) +Identifier = ([^ \t\n#;\[=]*) +Whitespace = ([ \t]+) +Comment = ([#;].*) +Section = ([\[][^\]]*[\]]?) + +%state VALUE + +%% + + { + {Identifier} { addToken(Token.DATA_TYPE); } + {Equals} { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {Comment} { addToken(Token.COMMENT_EOL); } + {Section} { addToken(Token.PREPROCESSOR); } + <> { addNullToken(); return firstToken; } +} + + { + {Identifier} { addToken(Token.IDENTIFIER); } + {Equals} { start = zzMarkedPos; addToken(Token.OPERATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {Comment} { addToken(Token.COMMENT_EOL); } + {Section} { addToken(Token.PREPROCESSOR); } + <> { addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java new file mode 100644 index 0000000..f70bf8a --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java @@ -0,0 +1,646 @@ +/* The following code was generated by JFlex 1.4.1 on 11/4/16 11:29 PM */ + +/* + * 11/04/2016 + * + * IniTokenMaker.java - Scanner for .ini files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * This class splits up text into tokens representing a .ini file.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated IniTokenMaker.java file will + * contain two definitions of both zzRefill and + * yyreset. You should hand-delete the second of each + * definition (the ones generated by the lexer), as these generated + * methods modify the input buffer, which we'll never have to do. + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway. + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance. + *
+ * + * @author Robert Futrell + * @version 0.4 + * + */ + +public class IniTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int VALUE = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\5\25\0\1\3\2\0\1\4\27\0\1\4\1\0"+ + "\1\1\35\0\1\2\1\0\1\6\uffa2\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 = + "\1\1\1\2\1\1\1\3\1\4\1\5\1\6\1\2"+ + "\1\7\1\4"; + + private static int [] zzUnpackAction() { + int [] result = new int[10]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\7\0\16\0\25\0\34\0\43\0\52\0\61"+ + "\0\25\0\25"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[10]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\1\7\1\0\1\3\1\10"+ + "\1\11\1\5\1\6\1\7\1\0\1\10\1\3\5\0"+ + "\1\3\7\0\6\5\1\12\3\0\1\6\3\0\5\7"+ + "\1\0\1\7\1\10\5\0\1\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[56]; + 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; + } + + + /* 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; + + /* 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 = + "\3\1\1\11\4\1\2\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[10]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public IniTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public IniTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public IniTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 32) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); + } + case 8: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 9: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 10: break; + case 7: + { start = zzMarkedPos; addToken(Token.OPERATOR); + } + case 11: break; + case 6: + { addToken(Token.COMMENT_EOL); + } + case 12: break; + case 4: + { addToken(Token.PREPROCESSOR); + } + case 13: break; + case 1: + { addToken(Token.DATA_TYPE); + } + case 14: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 11: break; + case VALUE: { + addNullToken(); return firstToken; + } + case 12: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex new file mode 100644 index 0000000..b1d0832 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex @@ -0,0 +1,1960 @@ +/* + * 02/11/2008 + * + * JSPTokenMaker.java - Generates tokens for JSP syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for JSP files (supporting HTML 5). + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated JSPTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class JSPTokenMaker +%extends AbstractMarkupTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to JSPTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + private static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to JSPTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + private static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). + */ + private static final int INTERNAL_IN_HIDDEN_COMMENT = -10; + + /** + * Token type specifying we're in a JSP directive (either include, page + * or taglib). + */ + private static final int INTERNAL_IN_JSP_DIRECTIVE = -11; + + /** + * Token type specifying we're in JavaScript. + */ + static final int INTERNAL_IN_JS = -12; + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -13; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -15; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -16; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -17; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -18; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -19; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -20; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * Token type specifying we're in a Java documentation comment. + */ + private static final int INTERNAL_IN_JAVA_DOCCOMMENT = -(4<<11); + + /** + * Token type specifying we're in Java code. + */ + static final int INTERNAL_IN_JAVA_EXPRESSION = -(5<<11); + + /** + * Token type specifying we're in Java multiline comment. + */ + private static final int INTERNAL_IN_JAVA_MLC = -(6<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * The state JSP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int jspInState; + + /** + * Whether closing markup tags are automatically completed for JSP. + */ + private static boolean completeCloseTags; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public JSPTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + jspInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.PREPROCESSOR: + state = PI; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_HIDDEN_COMMENT: + state = HIDDEN_COMMENT; + break; + case INTERNAL_IN_JSP_DIRECTIVE: + state = JSP_DIRECTIVE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { + // INTERNAL_IN_JAVAxxx - jspInState or + // INTERNAL_IN_CSSxxx - cssPrevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_JAVA_DOCCOMMENT: + state = JAVA_DOCCOMMENT; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_EXPRESSION: + state = JAVA_EXPRESSION; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_MLC: + state = JAVA_MLC; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = Token.NULL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +// HTML-specific stuff. +Whitespace = ([ \t\f]) +LineTerminator = ([\n]) +Identifier = ([^ \t\n<&]+) +EntityReference = ([&][^; \t]*[;]?) +InTagIdentifier = ([^ \t\n\"\'/=>]+) +UnclosedStringLiteral = ([\"][^\"]*) +StringLiteral = ({UnclosedStringLiteral}[\"]) +UnclosedCharLiteral = ([\'][^\']*) +CharLiteral = ({UnclosedCharLiteral}[\']) +EndScriptTag = ("") +EndStyleTag = ("") + +JspExpressionStart = ("<%=") +JspScriptletStart = ("<%") +JspDeclarationStart = ("<%!") +JspStart = ({JspExpressionStart}|{JspScriptletStart}|{JspDeclarationStart}) + +// General stuff. +Letter = [A-Za-z] +NonzeroDigit = [1-9] +BinaryDigit = ([0-1]) +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrUnderscore = ({Letter}|"_") +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + + +// Java stuff. +AnyCharacterButApostropheOrBackSlash = ([^\\']) +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +WhiteSpace = ([ \t\f]) +JCharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) +JUnclosedCharLiteral = ([\'][^\'\n]*) +JErrorCharLiteral = ({UnclosedCharLiteral}[\']) +JStringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) +JUnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +JErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + +MLCBegin = "/*" +MLCEnd = "*/" +DocCommentBegin = "/**" +LineCommentBegin = "//" + +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +HexLiteral = ({HexHelper}[lL]?) + +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"||"|"&&"|">>>") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) +JIdentifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = (({NonSeparator}|\`)+) +Annotation = ("@"{JIdentifier}?) +PrimitiveTypes = ("boolean"|"byte"|"char"|"double" |"float"|"int"|"long"|"short") + +CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") +ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") +BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) +InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +// JavaScript stuff. +JS_MLCBegin = ({MLCBegin}) +JS_MLCEnd = ({MLCEnd}) +JS_LineCommentBegin = ({LineCommentBegin}) +JS_IntegerLiteral = ({IntegerLiteral}) +JS_HexLiteral = ({HexLiteral}) +JS_FloatLiteral = ({FloatLiteral}) +JS_ErrorNumberFormat = ({ErrorNumberFormat}) +JS_Separator = ({Separator}) +JS_Separator2 = ({Separator2}) +JS_Operator = ({Operator}) +JS_Identifier = ({JIdentifier}) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) + +JS_TemplateLiteralExprStart = ("${") + + +// CSS stuff. +CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) +CSS_AtKeyword = ("@"{CSS_SelectorPiece}) +CSS_Id = ("#"{CSS_SelectorPiece}) +CSS_Separator = ([;\(\)\[\]]) +CSS_MlcStart = ({JS_MLCBegin}) +CSS_MlcEnd = ({JS_MLCEnd}) +CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) +CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) +CSS_Value = ({CSS_ValueChar}*) +CSS_Function = ({CSS_Value}\() +CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) +CSS_Hex = ("#"[0-9a-fA-F]+) +CSS_Number = ({CSS_Digits}|{CSS_Hex}) + + +%state COMMENT +%state PI +%state DTD +%state INTAG +%state INTAG_CHECK_TAG_NAME +%state INATTR_DOUBLE +%state INATTR_SINGLE +%state INTAG_SCRIPT +%state INATTR_DOUBLE_SCRIPT +%state INATTR_SINGLE_SCRIPT +%state INTAG_STYLE +%state INATTR_DOUBLE_STYLE +%state INATTR_SINGLE_STYLE +%state JAVASCRIPT +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_EOL_COMMENT +%state HIDDEN_COMMENT +%state JAVA_DOCCOMMENT +%state JAVA_EXPRESSION +%state JAVA_MLC +%state JSP_DIRECTIVE +%state CSS +%state CSS_PROPERTY +%state CSS_VALUE +%state CSS_STRING +%state CSS_CHAR_LITERAL +%state CSS_C_STYLE_COMMENT +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR + + +%% + + { + "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } +} + + { + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + "--%>" { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.MARKUP_COMMENT); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } +} + + { + [^\n\?]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n>]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } +} + + { + [Aa] | + [aA][bB][bB][rR] | + [aA][cC][rR][oO][nN][yY][mM] | + [aA][dD][dD][rR][eE][sS][sS] | + [aA][pP][pP][lL][eE][tT] | + [aA][rR][eE][aA] | + [aA][rR][tT][iI][cC][lL][eE] | + [aA][sS][iI][dD][eE] | + [aA][uU][dD][iI][oO] | + [bB] | + [bB][aA][sS][eE] | + [bB][aA][sS][eE][fF][oO][nN][tT] | + [bB][dD][oO] | + [bB][gG][sS][oO][uU][nN][dD] | + [bB][iI][gG] | + [bB][lL][iI][nN][kK] | + [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] | + [bB][oO][dD][yY] | + [bB][rR] | + [bB][uU][tT][tT][oO][nN] | + [cC][aA][nN][vV][aA][sS] | + [cC][aA][pP][tT][iI][oO][nN] | + [cC][eE][nN][tT][eE][rR] | + [cC][iI][tT][eE] | + [cC][oO][dD][eE] | + [cC][oO][lL] | + [cC][oO][lL][gG][rR][oO][uU][pP] | + [cC][oO][mM][mM][aA][nN][dD] | + [cC][oO][mM][mM][eE][nN][tT] | + [dD][dD] | + [dD][aA][tT][aA][gG][rR][iI][dD] | + [dD][aA][tT][aA][lL][iI][sS][tT] | + [dD][aA][tT][aA][tT][eE][mM][pP][lL][aA][tT][eE] | + [dD][eE][lL] | + [dD][eE][tT][aA][iI][lL][sS] | + [dD][fF][nN] | + [dD][iI][aA][lL][oO][gG] | + [dD][iI][rR] | + [dD][iI][vV] | + [dD][lL] | + [dD][tT] | + [eE][mM] | + [eE][mM][bB][eE][dD] | + [eE][vV][eE][nN][tT][sS][oO][uU][rR][cC][eE] | + [fF][iI][eE][lL][dD][sS][eE][tT] | + [fF][iI][gG][uU][rR][eE] | + [fF][oO][nN][tT] | + [fF][oO][oO][tT][eE][rR] | + [fF][oO][rR][mM] | + [fF][rR][aA][mM][eE] | + [fF][rR][aA][mM][eE][sS][eE][tT] | + [hH][123456] | + [hH][eE][aA][dD] | + [hH][eE][aA][dD][eE][rR] | + [hH][rR] | + [hH][tT][mM][lL] | + [iI] | + [iI][fF][rR][aA][mM][eE] | + [iI][lL][aA][yY][eE][rR] | + [iI][mM][gG] | + [iI][nN][pP][uU][tT] | + [iI][nN][sS] | + [iI][sS][iI][nN][dD][eE][xX] | + [kK][bB][dD] | + [kK][eE][yY][gG][eE][nN] | + [lL][aA][bB][eE][lL] | + [lL][aA][yY][eE][rR] | + [lL][eE][gG][eE][nN][dD] | + [lL][iI] | + [lL][iI][nN][kK] | + [mM][aA][pP] | + [mM][aA][rR][kK] | + [mM][aA][rR][qQ][uU][eE][eE] | + [mM][eE][nN][uU] | + [mM][eE][tT][aA] | + [mM][eE][tT][eE][rR] | + [mM][uU][lL][tT][iI][cC][oO][lL] | + [nN][aA][vV] | + [nN][eE][sS][tT] | + [nN][oO][bB][rR] | + [nN][oO][eE][mM][bB][eE][dD] | + [nN][oO][fF][rR][aA][mM][eE][sS] | + [nN][oO][lL][aA][yY][eE][rR] | + [nN][oO][sS][cC][rR][iI][pP][tT] | + [oO][bB][jJ][eE][cC][tT] | + [oO][lL] | + [oO][pP][tT][gG][rR][oO][uU][pP] | + [oO][pP][tT][iI][oO][nN] | + [oO][uU][tT][pP][uU][tT] | + [pP] | + [pP][aA][rR][aA][mM] | + [pP][lL][aA][iI][nN][tT][eE][xX][tT] | + [pP][rR][eE] | + [pP][rR][oO][gG][rR][eE][sS][sS] | + [qQ] | + [rR][uU][lL][eE] | + [sS] | + [sS][aA][mM][pP] | + [sS][cC][rR][iI][pP][tT] | + [sS][eE][cC][tT][iI][oO][nN] | + [sS][eE][lL][eE][cC][tT] | + [sS][eE][rR][vV][eE][rR] | + [sS][mM][aA][lL][lL] | + [sS][oO][uU][rR][cC][eE] | + [sS][pP][aA][cC][eE][rR] | + [sS][pP][aA][nN] | + [sS][tT][rR][iI][kK][eE] | + [sS][tT][rR][oO][nN][gG] | + [sS][tT][yY][lL][eE] | + [sS][uU][bB] | + [sS][uU][pP] | + [tT][aA][bB][lL][eE] | + [tT][bB][oO][dD][yY] | + [tT][dD] | + [tT][eE][xX][tT][aA][rR][eE][aA] | + [tT][fF][oO][oO][tT] | + [tT][hH] | + [tT][hH][eE][aA][dD] | + [tT][iI][mM][eE] | + [tT][iI][tT][lL][eE] | + [tT][rR] | + [tT][tT] | + [uU] | + [uU][lL] | + [vV][aA][rR] | + [vV][iI][dD][eE][oO] { addToken(Token.MARKUP_TAG_NAME); } + {InTagIdentifier} { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } + . { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} + + { + {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} + + { + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\"<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\"] { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } +} + + { + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\'<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\'] { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } +} + + { + {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace}+ { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } +} + + { + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\"<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\'<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } +} + + { + + {EndScriptTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + + // ECMA 3+ keywords. + "break" | + "continue" | + "delete" | + "else" | + "for" | + "function" | + "if" | + "in" | + "new" | + "this" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //JavaScript 1.6 + "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + + // Reserved (but not yet used) ECMA keywords. + "abstract" | + "case" | + "catch" | + "class" | + "const" | + "debugger" | + "default" | + "do" | + "enum" | + "export" | + "extends" | + "final" | + "finally" | + "goto" | + "implements" | + "import" | + "instanceof" | + "interface" | + "native" | + "package" | + "private" | + "protected" | + "public" | + "static" | + "super" | + "switch" | + "synchronized" | + "throw" | + "throws" | + "transient" | + "try" | + "volatile" | + "null" { addToken(Token.RESERVED_WORD); } + {PrimitiveTypes} { addToken(Token.DATA_TYPE); } + + // Literals. + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + + /* Operators. */ + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addEndToken(INTERNAL_IN_JS); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + [^\n\\\"]+ {} + \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\']+ {} + \n { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf<\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } + {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + + { + [^hwf<\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + +} + + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtKeyword} { addToken(Token.REGEX); } + {CSS_Id} { addToken(Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Property} { addToken(Token.RESERVED_WORD); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.ANNOTATION); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped chars. */ } + \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {CSS_MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} + + + { + + "%>" { addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; yybegin(jspInState); } + + /* Keywords */ + "abstract"| + "assert" | + "break" | + "case" | + "catch" | + "class" | + "const" | + "continue" | + "default" | + "do" | + "else" | + "enum" | + "extends" | + "final" | + "finally" | + "for" | + "goto" | + "if" | + "implements" | + "import" | + "instanceof" | + "interface" | + "native" | + "new" | + "null" | + "package" | + "private" | + "protected" | + "public" | + "static" | + "strictfp" | + "super" | + "switch" | + "synchronized" | + "this" | + "throw" | + "throws" | + "transient" | + "try" | + "void" | + "volatile" | + "while" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + /* Data types. */ + {PrimitiveTypes} { addToken(Token.DATA_TYPE); } + + /* Booleans. */ + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + /* java.lang classes */ + "Appendable" | + "AutoCloseable" | + "CharSequence" | + "Cloneable" | + "Comparable" | + "Iterable" | + "Readable" | + "Runnable" | + "Thread.UncaughtExceptionHandler" | + "Boolean" | + "Byte" | + "Character" | + "Character.Subset" | + "Character.UnicodeBlock" | + "Class" | + "ClassLoader" | + "ClassValue" | + "Compiler" | + "Double" | + "Enum" | + "Float" | + "InheritableThreadLocal" | + "Integer" | + "Long" | + "Math" | + "Number" | + "Object" | + "Package" | + "Process" | + "ProcessBuilder" | + "ProcessBuilder.Redirect" | + "Runtime" | + "RuntimePermission" | + "SecurityManager" | + "Short" | + "StackTraceElement" | + "StrictMath" | + "String" | + "StringBuffer" | + "StringBuilder" | + "System" | + "Thread" | + "ThreadGroup" | + "ThreadLocal" | + "Throwable" | + "Void" | + "Character.UnicodeScript" | + "ProcessBuilder.Redirect.Type" | + "Thread.State" | + "ArithmeticException" | + "ArrayIndexOutOfBoundsException" | + "ArrayStoreException" | + "ClassCastException" | + "ClassNotFoundException" | + "CloneNotSupportedException" | + "EnumConstantNotPresentException" | + "Exception" | + "IllegalAccessException" | + "IllegalArgumentException" | + "IllegalMonitorStateException" | + "IllegalStateException" | + "IllegalThreadStateException" | + "IndexOutOfBoundsException" | + "InstantiationException" | + "InterruptedException" | + "NegativeArraySizeException" | + "NoSuchFieldException" | + "NoSuchMethodException" | + "NullPointerException" | + "NumberFormatException" | + "RuntimeException" | + "SecurityException" | + "StringIndexOutOfBoundsException" | + "TypeNotPresentException" | + "UnsupportedOperationException" | + "AbstractMethodError" | + "AssertionError" | + "BootstrapMethodError" | + "ClassCircularityError" | + "ClassFormatError" | + "Error" | + "ExceptionInInitializerError" | + "IllegalAccessError" | + "IncompatibleClassChangeError" | + "InstantiationError" | + "InternalError" | + "LinkageError" | + "NoClassDefFoundError" | + "NoSuchFieldError" | + "NoSuchMethodError" | + "OutOfMemoryError" | + "StackOverflowError" | + "ThreadDeath" | + "UnknownError" | + "UnsatisfiedLinkError" | + "UnsupportedClassVersionError" | + "VerifyError" | + "VirtualMachineError" | + + /* java.io classes*/ + "Closeable" | + "DataInput" | + "DataOutput" | + "Externalizable" | + "FileFilter" | + "FilenameFilter" | + "Flushable" | + "ObjectInput" | + "ObjectInputValidation" | + "ObjectOutput" | + "ObjectStreamConstants" | + "Serializable" | + + "BufferedInputStream" | + "BufferedOutputStream" | + "BufferedReader" | + "BufferedWriter" | + "ByteArrayInputStream" | + "ByteArrayOutputStream" | + "CharArrayReader" | + "CharArrayWriter" | + "Console" | + "DataInputStream" | + "DataOutputStream" | + "File" | + "FileDescriptor" | + "FileInputStream" | + "FileOutputStream" | + "FilePermission" | + "FileReader" | + "FileWriter" | + "FilterInputStream" | + "FilterOutputStream" | + "FilterReader" | + "FilterWriter" | + "InputStream" | + "InputStreamReader" | + "LineNumberInputStream" | + "LineNumberReader" | + "ObjectInputStream" | + "ObjectInputStream.GetField" | + "ObjectOutputStream" | + "ObjectOutputStream.PutField" | + "ObjectStreamClass" | + "ObjectStreamField" | + "OutputStream" | + "OutputStreamWriter" | + "PipedInputStream" | + "PipedOutputStream" | + "PipedReader" | + "PipedWriter" | + "PrintStream" | + "PrintWriter" | + "PushbackInputStream" | + "PushbackReader" | + "RandomAccessFile" | + "Reader" | + "SequenceInputStream" | + "SerializablePermission" | + "StreamTokenizer" | + "StringBufferInputStream" | + "StringReader" | + "StringWriter" | + "Writer" | + + "CharConversionException" | + "EOFException" | + "FileNotFoundException" | + "InterruptedIOException" | + "InvalidClassException" | + "InvalidObjectException" | + "IOException" | + "NotActiveException" | + "NotSerializableException" | + "ObjectStreamException" | + "OptionalDataException" | + "StreamCorruptedException" | + "SyncFailedException" | + "UncheckedIOException" | + "UnsupportedEncodingException" | + "UTFDataFormatException" | + "WriteAbortedException" | + + "IOError" | + + /* java.util classes */ + "Collection" | + "Comparator" | + "Deque" | + "Enumeration" | + "EventListener" | + "Formattable" | + "Iterator" | + "List" | + "ListIterator" | + "Map" | + "Map.Entry" | + "NavigableMap" | + "NavigableSet" | + "Observer" | + "PrimitiveIterator" | + "PrimitiveIterator.OfDouble" | + "PrimitiveIterator.OfInt" | + "PrimitiveIterator.OfLong" | + "Queue" | + "RandomAccess" | + "Set" | + "SortedMap" | + "SortedSet" | + "Spliterator" | + "Spliterator.OfDouble" | + "Spliterator.OfInt" | + "Spliterator.OfLong" | + "Spliterator.OfPrimitive" | + + "AbstractCollection" | + "AbstractList" | + "AbstractMap" | + "AbstractMap.SimpleEntry" | + "AbstractMap.SimpleImmutableEntry" | + "AbstractQueue" | + "AbstractSequentialList" | + "AbstractSet" | + "ArrayDeque" | + "ArrayList" | + "Arrays" | + "Base64" | + "Base64.Decoder" | + "Base64.Encoder" | + "BitSet" | + "Calendar" | + "Calendar.Builder" | + "Collections" | + "Currency" | + "Date" | + "Dictionary" | + "DoubleSummaryStatistics" | + "EnumMap" | + "EnumSet" | + "EventListenerProxy" | + "EventObject" | + "FormattableFlags" | + "Formatter" | + "GregorianCalendar" | + "HashMap" | + "HashSet" | + "Hashtable" | + "IdentityHashMap" | + "IntSummaryStatistics" | + "LinkedHashMap" | + "LinkedHashSet" | + "LinkedList" | + "ListResourceBundle" | + "Locale" | + "Locale.Builder" | + "Locale.LanguageRange" | + "LongSummaryStatistics" | + "Objects" | + "Observable" | + "Optional" | + "OptionalDouble" | + "OptionalInt" | + "OptionalLong" | + "PriorityQueue" | + "Properties" | + "PropertyPermission" | + "PropertyResourceBundle" | + "Random" | + "ResourceBundle" | + "ResourceBundle.Control" | + "Scanner" | + "ServiceLoader" | + "SimpleTimeZone" | + "Spliterators" | + "Spliterators.AbstractDoubleSpliterator" | + "Spliterators.AbstractIntSpliterator" | + "Spliterators.AbstractLongSpliterator" | + "Spliterators.AbstractSpliterator" | + "SpliteratorRandom" | + "Stack" | + "StringJoiner" | + "StringTokenizer" | + "Timer" | + "TimerTask" | + "TimeZone" | + "TreeMap" | + "TreeSet" | + "UUID" | + "Vector" | + "WeakHashMap" | + + "Formatter.BigDecimalLayoutForm" | + "Locale.Category" | + "Locale.FilteringMode" | + + "ConcurrentModificationException" | + "DuplicateFormatFlagsException" | + "EmptyStackException" | + "FormatFlagsConversionMismatchException" | + "FormatterClosedException" | + "IllegalFormatCodePointException" | + "IllegalFormatConversionException" | + "IllegalFormatException" | + "IllegalFormatFlagsException" | + "IllegalFormatPrecisionException" | + "IllegalFormatWidthException" | + "IllformedLocaleException" | + "InputMismatchException" | + "InvalidPropertiesFormatException" | + "MissingFormatArgumentException" | + "MissingFormatWidthException" | + "MissingResourceException" | + "NoSuchElementException" | + "TooManyListenersException" | + "UnknownFormatConversionException" | + "UnknownFormatFlagsException" | + + "ServiceConfigurationError" { addToken(Token.FUNCTION); } + + {LineTerminator} { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } + + {JIdentifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + {JCharLiteral} { addToken(Token.LITERAL_CHAR); } + {JUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } + {JErrorCharLiteral} { addToken(Token.ERROR_CHAR); } + {JStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {JUnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } + {JErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(JAVA_MLC); } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(JAVA_DOCCOMMENT); } + {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } + + /* Annotations. */ + {Annotation} { addToken(Token.ANNOTATION); } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {MLCEnd} { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; } +} + + + { + + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {MLCEnd} { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } + +} + + + { + "include" | + "page" | + "taglib" { addToken(Token.RESERVED_WORD); } + "/" { addToken(Token.RESERVED_WORD); } + {InTagIdentifier} { addToken(Token.IDENTIFIER); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "%>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + "%" { addToken(Token.IDENTIFIER); } + ">" { addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); } + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_IN_JSP_DIRECTIVE); return firstToken; } +} + diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java new file mode 100644 index 0000000..bffb9fc --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java @@ -0,0 +1,8137 @@ +/* The following code was generated by JFlex 1.4.1 on 12/30/16 12:53 AM */ + +/* + * 02/11/2008 + * + * JSPTokenMaker.java - Generates tokens for JSP syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; +import java.util.Stack; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.HtmlOccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.OccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for JSP files (supporting HTML 5). + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated JSPTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ + +public class JSPTokenMaker extends AbstractMarkupTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INATTR_SINGLE_SCRIPT = 10; + public static final int JS_CHAR = 16; + public static final int JAVA_EXPRESSION = 21; + public static final int CSS_STRING = 27; + public static final int HIDDEN_COMMENT = 19; + public static final int JS_MLC = 17; + public static final int CSS_CHAR_LITERAL = 28; + public static final int JAVA_DOCCOMMENT = 20; + public static final int INTAG_SCRIPT = 8; + public static final int JS_TEMPLATE_LITERAL_EXPR = 31; + public static final int CSS_PROPERTY = 25; + public static final int CSS_C_STYLE_COMMENT = 29; + public static final int CSS = 24; + public static final int CSS_VALUE = 26; + public static final int JSP_DIRECTIVE = 23; + public static final int COMMENT = 1; + public static final int INATTR_DOUBLE_SCRIPT = 9; + public static final int PI = 2; + public static final int JAVASCRIPT = 14; + public static final int INTAG = 4; + public static final int INTAG_CHECK_TAG_NAME = 5; + public static final int INATTR_SINGLE_STYLE = 13; + public static final int DTD = 3; + public static final int JS_EOL_COMMENT = 18; + public static final int INATTR_DOUBLE_STYLE = 12; + public static final int INATTR_SINGLE = 7; + public static final int JS_TEMPLATE_LITERAL = 30; + public static final int YYINITIAL = 0; + public static final int INATTR_DOUBLE = 6; + public static final int JS_STRING = 15; + public static final int JAVA_MLC = 22; + public static final int INTAG_STYLE = 11; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\2\1\0\1\1\1\46\22\0\1\4\1\26\1\10"+ + "\1\47\1\50\1\25\1\5\1\11\1\116\1\114\1\51\1\56\1\65"+ + "\1\36\1\57\1\12\1\31\1\32\2\45\1\137\1\130\1\136\1\34"+ + "\2\30\1\70\1\6\1\3\1\7\1\21\1\67\1\74\1\33\1\52"+ + "\1\14\1\107\1\24\1\55\1\123\1\127\1\16\1\131\1\124\1\23"+ + "\1\121\1\120\1\117\1\17\1\125\1\15\1\13\1\20\1\122\1\126"+ + "\1\135\1\54\1\22\1\27\1\113\1\37\1\113\1\66\1\35\1\73"+ + "\1\61\1\53\1\77\1\101\1\60\1\44\1\103\1\100\1\102\1\134"+ + "\1\112\1\62\1\106\1\43\1\75\1\104\1\133\1\41\1\63\1\42"+ + "\1\40\1\111\1\110\1\105\1\76\1\132\1\115\1\72\1\64\1\71"+ + "\uff81\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 = + "\6\0\2\1\1\0\2\1\1\0\2\1\14\0\1\2"+ + "\5\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ + "\5\1\1\10\2\1\1\11\1\12\2\13\1\5\1\14"+ + "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\2\21"+ + "\2\23\3\21\2\23\2\21\1\23\6\21\1\23\1\1"+ + "\1\24\1\25\1\1\1\13\1\26\1\27\1\17\1\30"+ + "\1\31\1\32\1\33\1\34\1\1\1\35\1\1\1\36"+ + "\1\37\2\14\1\2\1\14\1\40\1\41\1\14\2\2"+ + "\1\14\2\42\1\14\5\2\1\36\1\2\1\14\5\2"+ + "\1\43\1\14\1\44\10\2\1\1\1\45\1\46\1\47"+ + "\1\1\1\50\1\51\1\52\1\1\1\53\6\1\1\54"+ + "\4\1\1\55\2\1\1\56\7\1\1\36\1\57\1\14"+ + "\1\60\1\61\1\14\11\2\1\14\2\42\14\2\1\62"+ + "\21\2\1\1\1\63\1\1\2\2\1\64\1\65\1\66"+ + "\1\67\4\2\1\70\1\71\1\70\1\72\1\73\1\70"+ + "\1\74\1\70\1\75\1\70\1\76\1\77\1\100\2\77"+ + "\1\66\1\77\1\101\1\102\1\103\1\104\1\103\1\105"+ + "\2\2\1\103\1\42\1\2\1\103\1\106\1\107\1\110"+ + "\1\111\1\112\1\113\1\114\1\115\2\1\1\116\1\117"+ + "\1\120\1\121\1\1\1\122\1\1\1\123\1\4\2\124"+ + "\1\125\1\126\1\127\1\6\5\0\1\130\1\125\32\21"+ + "\2\23\2\21\1\23\44\21\1\131\1\132\2\0\1\125"+ + "\1\0\1\14\1\133\1\0\1\134\1\36\1\2\1\14"+ + "\1\135\1\42\2\135\2\136\1\135\1\137\2\135\43\2"+ + "\3\66\12\2\1\140\1\141\1\142\3\0\1\143\12\0"+ + "\1\144\2\0\1\145\16\0\1\60\1\146\1\60\1\61"+ + "\1\0\1\65\1\61\1\147\1\150\1\36\46\2\1\151"+ + "\1\135\1\42\2\135\1\136\1\135\1\137\3\135\45\2"+ + "\1\62\5\2\1\66\1\2\1\66\40\2\1\152\1\153"+ + "\3\2\1\0\1\154\1\155\15\0\1\156\1\0\1\42"+ + "\5\0\1\42\1\112\1\157\1\160\1\161\1\162\2\124"+ + "\1\125\1\0\1\163\1\0\1\164\4\0\1\125\14\21"+ + "\1\23\63\21\1\131\1\0\1\165\1\0\1\36\1\2"+ + "\1\136\1\0\1\42\3\137\30\2\1\166\16\2\1\74"+ + "\16\2\44\0\1\64\1\60\1\0\2\60\1\61\1\0"+ + "\1\65\3\61\1\167\1\36\3\2\1\170\65\2\1\136"+ + "\1\42\2\137\1\42\1\137\50\2\1\36\6\2\1\74"+ + "\33\2\1\170\21\2\25\0\2\124\1\171\1\172\2\0"+ + "\1\173\31\21\1\23\2\21\1\23\6\21\1\0\1\174"+ + "\1\36\1\2\1\135\1\2\1\175\11\2\1\74\1\176"+ + "\3\2\1\170\23\2\1\0\1\1\3\0\1\177\3\0"+ + "\1\200\1\201\11\0\1\202\11\0\1\203\5\0\3\60"+ + "\1\61\1\36\70\2\1\170\3\2\1\170\1\2\1\170"+ + "\5\2\2\135\7\2\1\175\11\2\1\170\3\2\1\74"+ + "\3\2\1\170\6\2\1\36\36\2\1\0\16\2\1\66"+ + "\23\0\2\124\2\0\12\21\1\23\11\21\1\0\1\36"+ + "\4\2\1\66\1\2\1\66\20\2\37\0\3\60\1\61"+ + "\1\36\3\2\1\170\14\2\1\170\47\2\1\170\24\2"+ + "\2\66\26\2\1\36\32\2\1\0\15\2\16\0\1\124"+ + "\1\204\12\21\1\0\1\36\1\2\1\205\16\2\24\0"+ + "\2\60\1\61\1\36\1\2\1\170\31\2\1\170\27\2"+ + "\1\170\2\2\1\170\24\2\1\205\2\2\1\170\21\2"+ + "\1\36\13\2\1\170\2\2\1\170\6\2\1\0\13\2"+ + "\12\0\1\206\3\21\1\0\10\2\4\0\1\202\6\0"+ + "\1\60\33\2\1\170\21\2\1\170\7\2\1\0\3\2"+ + "\1\0\22\2\1\0\15\2\1\36\27\2\1\0\13\2"+ + "\6\0\1\21\1\0\3\2\13\0\1\60\16\2\1\170"+ + "\50\2\2\0\2\2\4\0\16\2\2\0\25\2\1\170"+ + "\11\2\1\0\12\2\1\207\4\0\1\21\1\210\1\2"+ + "\1\211\1\212\5\0\14\2\1\0\10\2\1\170\34\2"+ + "\2\0\1\2\4\0\5\2\1\170\7\2\1\0\2\2"+ + "\1\170\11\2\1\170\20\2\1\170\11\2\10\0\16\2"+ + "\1\170\2\2\1\0\31\2\6\0\10\2\1\0\2\2"+ + "\1\0\35\2\3\0\1\62\2\0\10\2\1\170\4\2"+ + "\2\0\10\2\1\170\14\2\6\0\7\2\1\170\1\2"+ + "\1\0\1\170\4\2\1\170\17\2\1\170\2\2\1\170"+ + "\3\2\1\0\1\170\3\2\2\0\1\2\1\170\17\2"+ + "\5\0\6\2\1\0\1\2\1\0\3\2\1\170\3\2"+ + "\1\170\17\2\2\0\3\2\2\0\16\2\4\0\2\2"+ + "\1\170\3\2\2\0\25\2\2\0\2\2\2\0\1\170"+ + "\11\2\1\170\2\2\3\0\4\2\2\0\22\2\5\0"+ + "\1\2\3\0\10\2\1\0\1\2\3\0\4\2\2\0"+ + "\15\2\4\0\1\2\2\0\10\2\1\0\1\2\3\0"+ + "\3\2\2\0\7\2\6\0\5\2\1\0\1\170\3\0"+ + "\2\2\2\0\2\2\1\170\3\2\6\0\3\2\5\0"+ + "\2\2\2\0\2\2\1\0\1\170\2\2\5\0\2\2"+ + "\3\0\1\2\2\0\2\2\2\0\1\2\5\0\1\2"+ + "\3\0\1\2\2\0\1\2\11\0\1\2\2\0\1\2"+ + "\16\0\1\170\43\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[2711]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\140\0\300\0\u0120\0\u0180\0\u01e0\0\u0240\0\u02a0"+ + "\0\u0300\0\u0360\0\u03c0\0\u0420\0\u0480\0\u04e0\0\u0540\0\u05a0"+ + "\0\u0600\0\u0660\0\u06c0\0\u0720\0\u0780\0\u07e0\0\u0840\0\u08a0"+ + "\0\u0900\0\u0960\0\u09c0\0\u0a20\0\u0a80\0\u0ae0\0\u0b40\0\u0ba0"+ + "\0\u0c00\0\u0c60\0\u0cc0\0\u0d20\0\u0d80\0\u0de0\0\u0e40\0\u0cc0"+ + "\0\u0ea0\0\u0f00\0\u0f60\0\u0fc0\0\u1020\0\u0cc0\0\u1080\0\u10e0"+ + "\0\u0cc0\0\u0cc0\0\u1140\0\u11a0\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0"+ + "\0\u1200\0\u0cc0\0\u1260\0\u0cc0\0\u12c0\0\u1320\0\u1380\0\u13e0"+ + "\0\u1440\0\u14a0\0\u1500\0\u1560\0\u15c0\0\u1620\0\u1680\0\u16e0"+ + "\0\u1740\0\u17a0\0\u1800\0\u1860\0\u18c0\0\u1920\0\u1980\0\u1260"+ + "\0\u19e0\0\u1a40\0\u0cc0\0\u1aa0\0\u1b00\0\u0cc0\0\u0cc0\0\u1b60"+ + "\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0\0\u1bc0\0\u0cc0\0\u1c20"+ + "\0\u1c80\0\u0cc0\0\u1ce0\0\u1d40\0\u0cc0\0\u1da0\0\u0cc0\0\u0cc0"+ + "\0\u1e00\0\u1e60\0\u1ec0\0\u1f20\0\u1f80\0\u1fe0\0\u2040\0\u20a0"+ + "\0\u2100\0\u2160\0\u21c0\0\u2220\0\u0cc0\0\u2280\0\u22e0\0\u2340"+ + "\0\u23a0\0\u2400\0\u2460\0\u24c0\0\u0cc0\0\u2520\0\u0cc0\0\u2580"+ + "\0\u25e0\0\u2640\0\u26a0\0\u2700\0\u2760\0\u27c0\0\u2820\0\u2880"+ + "\0\u0cc0\0\u0cc0\0\u28e0\0\u2940\0\u0cc0\0\u0cc0\0\u28e0\0\u29a0"+ + "\0\u0cc0\0\u2a00\0\u2a60\0\u2ac0\0\u2b20\0\u2b80\0\u2be0\0\u0cc0"+ + "\0\u2c40\0\u2ca0\0\u2d00\0\u2d60\0\u0cc0\0\u2dc0\0\u2e20\0\u0cc0"+ + "\0\u2e80\0\u2ee0\0\u2f40\0\u2fa0\0\u3000\0\u3060\0\u30c0\0\u3120"+ + "\0\u0cc0\0\u3180\0\u31e0\0\u3240\0\u32a0\0\u3300\0\u3360\0\u33c0"+ + "\0\u3420\0\u3480\0\u34e0\0\u3540\0\u35a0\0\u3600\0\u3660\0\u36c0"+ + "\0\u3720\0\u3780\0\u37e0\0\u3840\0\u38a0\0\u3900\0\u3960\0\u39c0"+ + "\0\u3a20\0\u3a80\0\u3ae0\0\u3b40\0\u3ba0\0\u3c00\0\u3c60\0\u3cc0"+ + "\0\u3d20\0\u3d80\0\u3de0\0\u3e40\0\u3ea0\0\u3f00\0\u3f60\0\u3fc0"+ + "\0\u4020\0\u4080\0\u40e0\0\u4140\0\u41a0\0\u4200\0\u4260\0\u42c0"+ + "\0\u0cc0\0\u4320\0\u4380\0\u43e0\0\u4440\0\u44a0\0\u0cc0\0\u0cc0"+ + "\0\u4500\0\u4560\0\u45c0\0\u4620\0\u0cc0\0\u0cc0\0\u4680\0\u0cc0"+ + "\0\u0cc0\0\u46e0\0\u4740\0\u47a0\0\u4800\0\u4860\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4680\0\u46e0\0\u48c0\0\u4920\0\u0cc0\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4680\0\u0cc0\0\u4980\0\u49e0\0\u4a40\0\u4aa0\0\u4b00"+ + "\0\u4b60\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0\0\u4bc0\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4c20\0\u4c80\0\u0cc0\0\u28e0\0\u4ce0\0\u0cc0\0\u4d40"+ + "\0\u0cc0\0\u4da0\0\u0cc0\0\u4e00\0\u4e60\0\u4ec0\0\u4f20\0\u4f80"+ + "\0\u0cc0\0\u0cc0\0\u4fe0\0\u5040\0\u50a0\0\u5100\0\u5160\0\u0cc0"+ + "\0\u51c0\0\u5220\0\u5280\0\u52e0\0\u5340\0\u53a0\0\u5400\0\u5460"+ + "\0\u54c0\0\u5520\0\u5580\0\u55e0\0\u5640\0\u56a0\0\u5700\0\u5760"+ + "\0\u57c0\0\u5820\0\u5880\0\u58e0\0\u5940\0\u59a0\0\u5a00\0\u5a60"+ + "\0\u5ac0\0\u5b20\0\u5b80\0\u5be0\0\u5c40\0\u5ca0\0\u5d00\0\u5d60"+ + "\0\u5dc0\0\u5e20\0\u5e80\0\u5ee0\0\u5f40\0\u5fa0\0\u6000\0\u6060"+ + "\0\u60c0\0\u6120\0\u6180\0\u61e0\0\u6240\0\u62a0\0\u6300\0\u6360"+ + "\0\u63c0\0\u6420\0\u6480\0\u64e0\0\u6540\0\u65a0\0\u6600\0\u6660"+ + "\0\u66c0\0\u6720\0\u6780\0\u67e0\0\u6840\0\u68a0\0\u6900\0\u6960"+ + "\0\u69c0\0\u6a20\0\u6a80\0\u6ae0\0\u6b40\0\u0cc0\0\u1da0\0\u6ba0"+ + "\0\u6c00\0\u6c60\0\u6c60\0\u0cc0\0\u6cc0\0\u6d20\0\u6d80\0\u6de0"+ + "\0\u6e40\0\u6ea0\0\u6ea0\0\u6f00\0\u6f60\0\u6ea0\0\u6fc0\0\u7020"+ + "\0\u7080\0\u70e0\0\u7140\0\u71a0\0\u7200\0\u7260\0\u72c0\0\u7320"+ + "\0\u7380\0\u73e0\0\u7440\0\u74a0\0\u7500\0\u7560\0\u75c0\0\u7620"+ + "\0\u7680\0\u76e0\0\u7740\0\u77a0\0\u7800\0\u7860\0\u78c0\0\u7920"+ + "\0\u7980\0\u79e0\0\u7a40\0\u7aa0\0\u7b00\0\u7b60\0\u7bc0\0\u7c20"+ + "\0\u7c80\0\u7ce0\0\u7d40\0\u7da0\0\u7e00\0\u7e60\0\u7ec0\0\u7f20"+ + "\0\u1e60\0\u7f80\0\u7fe0\0\u8040\0\u80a0\0\u8100\0\u8160\0\u81c0"+ + "\0\u8220\0\u8280\0\u82e0\0\u0cc0\0\u8340\0\u83a0\0\u8400\0\u8460"+ + "\0\u84c0\0\u0cc0\0\u8520\0\u8580\0\u85e0\0\u8640\0\u86a0\0\u8700"+ + "\0\u8760\0\u87c0\0\u8820\0\u8880\0\u0cc0\0\u88e0\0\u8940\0\u0cc0"+ + "\0\u89a0\0\u8a00\0\u8a60\0\u8ac0\0\u8b20\0\u8b80\0\u8be0\0\u8c40"+ + "\0\u8ca0\0\u8d00\0\u8d60\0\u8dc0\0\u8e20\0\u8e80\0\u8ee0\0\u0cc0"+ + "\0\u8f40\0\u8fa0\0\u9000\0\u0cc0\0\u9060\0\u90c0\0\u9120\0\u9180"+ + "\0\u91e0\0\u9240\0\u92a0\0\u9300\0\u9360\0\u93c0\0\u9420\0\u9480"+ + "\0\u94e0\0\u9540\0\u95a0\0\u9600\0\u9660\0\u96c0\0\u9720\0\u9780"+ + "\0\u97e0\0\u9840\0\u98a0\0\u9900\0\u9960\0\u99c0\0\u9a20\0\u9a80"+ + "\0\u9ae0\0\u9b40\0\u9ba0\0\u9c00\0\u9c60\0\u9cc0\0\u9d20\0\u9d80"+ + "\0\u9de0\0\u9e40\0\u9ea0\0\u9f00\0\u9f60\0\u9fc0\0\u0cc0\0\ua020"+ + "\0\ua020\0\ua080\0\ua0e0\0\ua020\0\ua140\0\ua1a0\0\ua200\0\ua260"+ + "\0\ua2c0\0\ua320\0\ua380\0\ua3e0\0\ua440\0\ua4a0\0\ua500\0\ua560"+ + "\0\ua5c0\0\ua620\0\ua680\0\ua6e0\0\ua740\0\ua7a0\0\ua800\0\ua860"+ + "\0\ua8c0\0\ua920\0\ua980\0\ua9e0\0\uaa40\0\uaaa0\0\uab00\0\uab60"+ + "\0\uabc0\0\uac20\0\uac80\0\uace0\0\uad40\0\uada0\0\uae00\0\uae60"+ + "\0\uaec0\0\uaf20\0\uaf80\0\uafe0\0\ub040\0\ub0a0\0\ub100\0\ub160"+ + "\0\ub1c0\0\ub220\0\ub280\0\ub2e0\0\ub340\0\ub3a0\0\u3540\0\ub400"+ + "\0\ub460\0\ub4c0\0\ub520\0\ub580\0\ub5e0\0\ub640\0\ub6a0\0\ub700"+ + "\0\ub760\0\ub7c0\0\ub820\0\ub880\0\ub8e0\0\ub940\0\ub9a0\0\uba00"+ + "\0\uba60\0\ubac0\0\ubb20\0\ubb80\0\ubbe0\0\ubc40\0\ubca0\0\ubd00"+ + "\0\ubd60\0\ubdc0\0\ube20\0\ube80\0\ubee0\0\ubf40\0\ubfa0\0\u0cc0"+ + "\0\u0cc0\0\uc000\0\uc060\0\uc0c0\0\uc120\0\u0cc0\0\uc180\0\uc1e0"+ + "\0\uc240\0\uc2a0\0\uc300\0\uc360\0\uc3c0\0\uc420\0\uc480\0\uc4e0"+ + "\0\uc540\0\uc5a0\0\uc600\0\uc660\0\uc6c0\0\uc720\0\u0cc0\0\uc780"+ + "\0\uc7e0\0\uc840\0\uc8a0\0\uc900\0\u4b60\0\u0cc0\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4e00\0\uc960\0\uc9c0\0\u0cc0\0\uca20\0\u0cc0\0\uca80"+ + "\0\u0cc0\0\ucae0\0\ucb40\0\ucba0\0\ucc00\0\u1140\0\ucc60\0\uccc0"+ + "\0\ucd20\0\ucd80\0\ucde0\0\uce40\0\ucea0\0\ucf00\0\ucf60\0\ucfc0"+ + "\0\ud020\0\ud080\0\ud0e0\0\ud140\0\ud1a0\0\ud200\0\ud260\0\ud2c0"+ + "\0\ud320\0\ud380\0\ud3e0\0\ud440\0\ud4a0\0\ud500\0\ud560\0\ud5c0"+ + "\0\ud620\0\ud680\0\ud6e0\0\ud740\0\ud7a0\0\ud800\0\ud860\0\ud8c0"+ + "\0\ud920\0\ud980\0\ud9e0\0\uda40\0\udaa0\0\udb00\0\udb60\0\udbc0"+ + "\0\udc20\0\udc80\0\udce0\0\u5c40\0\udd40\0\udda0\0\ude00\0\ude60"+ + "\0\udec0\0\udf20\0\udf80\0\u1620\0\udfe0\0\ue040\0\ue0a0\0\ue100"+ + "\0\ue160\0\ue1c0\0\ue220\0\ue280\0\ue2e0\0\ue340\0\u0cc0\0\ue3a0"+ + "\0\ue400\0\ue460\0\ue4c0\0\ue520\0\ue580\0\ue5e0\0\ue640\0\u6ea0"+ + "\0\ue6a0\0\ue700\0\ue760\0\ue7c0\0\ue820\0\ue880\0\ue8e0\0\ue940"+ + "\0\ue9a0\0\uea00\0\uea60\0\ueac0\0\ueb20\0\ueb80\0\uebe0\0\uec40"+ + "\0\ueca0\0\ued00\0\ued60\0\uedc0\0\uee20\0\uee80\0\ueee0\0\uef40"+ + "\0\uefa0\0\uf000\0\u1e60\0\uf060\0\uf0c0\0\uf120\0\uf180\0\uf1e0"+ + "\0\uf240\0\uf2a0\0\uf300\0\uf360\0\uf3c0\0\uf420\0\uf480\0\uf4e0"+ + "\0\uf540\0\uf5a0\0\uf600\0\uf660\0\uf6c0\0\uf720\0\uf780\0\uf7e0"+ + "\0\uf840\0\uf8a0\0\uf900\0\uf960\0\uf9c0\0\ufa20\0\ufa80\0\ufae0"+ + "\0\ufb40\0\ufba0\0\ufc00\0\ufc60\0\ufcc0\0\ufd20\0\ufd80\0\ufde0"+ + "\0\ufe40\0\ufea0\0\uff00\0\uff60\0\uffc0\1\40\1\200\1\340"+ + "\1\u0140\1\u01a0\1\u0200\1\u0260\1\u02c0\1\u0320\1\u0380\1\u03e0"+ + "\1\u0440\1\u04a0\1\u0500\1\u0560\1\u05c0\1\u0620\1\u0680\1\u06e0"+ + "\1\u0740\1\u07a0\1\u0800\1\u0860\0\u0cc0\1\u08c0\1\u0920\1\u0980"+ + "\1\u09e0\1\u0a40\1\u0aa0\1\u0b00\1\u0b60\1\u0bc0\1\u0c20\0\ue460"+ + "\1\u0c80\1\u0ce0\1\u0d40\1\u0da0\0\u3540\1\u0e00\1\u0e60\1\u0ec0"+ + "\1\u0f20\1\u0f80\1\u0fe0\1\u1040\1\u10a0\1\u1100\1\u1160\1\u11c0"+ + "\1\u1220\1\u1280\1\u12e0\1\u1340\1\u13a0\1\u1400\1\u1460\1\u14c0"+ + "\1\u1520\1\u1580\1\u15e0\1\u1640\1\u16a0\1\u1700\1\u1760\1\u17c0"+ + "\1\u1820\1\u1880\1\u18e0\1\u1940\1\u19a0\1\u1a00\1\u1a60\1\u1ac0"+ + "\1\u1b20\1\u1b80\1\u1be0\1\u1c40\1\u1ca0\1\u1d00\1\u1d60\1\u1dc0"+ + "\1\u1e20\1\u1e80\1\u1ee0\1\u1f40\1\u1fa0\1\u2000\1\u2060\1\u20c0"+ + "\1\u2120\1\u2180\1\u21e0\1\u2240\0\ua020\1\u22a0\1\u2300\1\u2360"+ + "\1\u23c0\1\u2420\1\u2480\1\u24e0\1\u2540\1\u25a0\1\u2600\1\u2660"+ + "\1\u26c0\1\u2720\1\u2780\1\u27e0\1\u2840\1\u28a0\1\u2900\1\u2960"+ + "\1\u29c0\1\u2a20\1\u2a80\1\u2ae0\1\u2b40\1\u2ba0\1\u2c00\1\u2c60"+ + "\1\u2cc0\1\u2d20\1\u2d80\1\u2de0\1\u2e40\1\u2ea0\1\u2f00\1\u2f60"+ + "\1\u2fc0\1\u3020\1\u3080\1\u30e0\1\u3140\1\u31a0\1\u3200\1\u3260"+ + "\1\u32c0\1\u3320\1\u3380\1\u33e0\1\u3440\1\u34a0\1\u3500\1\u3560"+ + "\1\u35c0\1\u3620\1\u3680\1\u36e0\1\u3740\1\u37a0\1\u3800\1\u3860"+ + "\1\u38c0\1\u3920\1\u3980\1\u39e0\1\u3a40\1\u3aa0\1\u3b00\1\u3b60"+ + "\1\u3bc0\1\u3c20\1\u3c80\1\u3ce0\1\u3d40\1\u3da0\1\u3e00\1\u3e60"+ + "\1\u3ec0\1\u3f20\1\u3f80\1\u3fe0\1\u4040\1\u40a0\1\u4100\1\u4160"+ + "\1\u41c0\1\u4220\1\u4280\1\u42e0\1\u4340\1\u43a0\1\u4400\1\u4460"+ + "\1\u44c0\1\u4520\1\u4580\1\u45e0\1\u4640\1\u46a0\1\u4700\1\u4760"+ + "\1\u47c0\1\u4820\1\u4880\1\u48e0\1\u4940\1\u49a0\1\u4a00\1\u4a60"+ + "\1\u4ac0\1\u4b20\1\u4b80\1\u4be0\1\u4c40\1\u4ca0\1\u4d00\1\u4d60"+ + "\1\u4dc0\1\u4e20\1\u4e80\1\u4ee0\0\u0cc0\0\u0cc0\1\u4f40\1\u4fa0"+ + "\1\u5000\1\u5060\1\u50c0\1\u5120\1\u5180\1\u51e0\1\u5240\1\u52a0"+ + "\1\u5300\1\u5360\1\u53c0\1\u5420\1\u5480\1\u54e0\1\u5540\1\u55a0"+ + "\1\u5600\1\u5660\1\u56c0\1\u5720\0\u5d60\1\u5780\1\u57e0\1\u5840"+ + "\1\u58a0\1\u5900\1\u5960\1\u59c0\1\u5a20\0\ud620\1\u5a80\1\u5ae0"+ + "\1\u5b40\1\u5ba0\1\u5c00\1\u5c60\1\u5cc0\0\u0cc0\1\u5d20\1\u5d80"+ + "\1\u5de0\1\u5e40\0\u1e60\1\u5ea0\1\u5f00\1\u5f60\1\u5fc0\1\u6020"+ + "\1\u6080\1\u60e0\1\u6140\1\u61a0\0\u1e60\0\u1e60\1\u6200\1\u6260"+ + "\1\u62c0\0\u1e60\1\u6320\1\u6380\1\u63e0\1\u6440\1\u64a0\1\u6500"+ + "\1\u6560\1\u65c0\1\u6620\1\u6680\1\u66e0\1\u6740\1\u67a0\1\u6800"+ + "\1\u6860\1\u68c0\1\u6920\1\u6980\1\u69e0\0\u83a0\0\u0cc0\1\u6a40"+ + "\1\u6aa0\1\u6b00\1\u6b60\1\u6bc0\1\u6c20\1\u6c80\1\u6ce0\0\u0cc0"+ + "\1\u6d40\1\u6da0\1\u6e00\1\u6e60\1\u6ec0\1\u6f20\1\u6f80\1\u6fe0"+ + "\1\u7040\0\u0cc0\1\u70a0\1\u7100\1\u7160\1\u71c0\1\u7220\1\u7280"+ + "\1\u72e0\1\u7340\1\u73a0\1\u7400\1\u7460\1\u74c0\1\u7520\1\u7580"+ + "\1\u75e0\1\u7640\1\u76a0\1\u7700\1\u7760\1\u77c0\1\u7820\1\u7880"+ + "\1\u78e0\1\u7940\1\u79a0\1\u7a00\1\u7a60\1\u7ac0\1\u7b20\1\u7b80"+ + "\1\u7be0\1\u7c40\1\u7ca0\1\u7d00\1\u7d60\1\u7dc0\1\u7e20\1\u7e80"+ + "\1\u7ee0\1\u7f40\1\u7fa0\1\u8000\1\u8060\1\u80c0\1\u8120\1\u8180"+ + "\1\u81e0\1\u8240\1\u82a0\1\u8300\1\u8360\1\u83c0\1\u8420\1\u8480"+ + "\1\u84e0\1\u8540\1\u85a0\1\u8600\1\u8660\1\u86c0\1\u8720\1\u8780"+ + "\1\u87e0\1\u8840\1\u88a0\1\u8900\1\u8960\1\u89c0\1\u8a20\1\u8a80"+ + "\1\u8ae0\1\u8b40\1\u8ba0\1\u8c00\1\u8c60\1\u8cc0\1\u8d20\1\u8d80"+ + "\1\u8de0\1\u8e40\1\u8ea0\1\u8f00\1\u8f60\1\u8fc0\1\u9020\1\u9080"+ + "\1\u90e0\1\u9140\1\u2300\1\u91a0\1\u9200\1\u9260\1\u92c0\1\u9320"+ + "\1\u9380\1\u93e0\1\u9440\0\u3540\1\u94a0\1\u9500\1\u9560\1\u95c0"+ + "\1\u9620\1\u9680\1\u96e0\1\u9740\1\u97a0\1\u9800\1\u9860\1\u98c0"+ + "\1\u9920\0\u3540\1\u9980\1\u99e0\1\u9a40\1\u9aa0\1\u9b00\1\u9b60"+ + "\1\u9bc0\1\u9c20\1\u9c80\1\u9ce0\1\u9d40\1\u9da0\1\u9e00\1\u9e60"+ + "\1\u9ec0\1\u9f20\1\u9f80\1\u9fe0\1\ua040\1\ua0a0\1\ua100\1\ua160"+ + "\1\ua1c0\1\ua220\1\ua280\1\ua2e0\1\ua340\1\ua3a0\1\ua400\1\ua460"+ + "\1\ua4c0\1\ua520\1\ua580\1\ua5e0\1\ua640\1\ua6a0\1\ua700\1\ua760"+ + "\1\ua7c0\1\ua820\1\ua880\1\ua8e0\1\ua940\1\ua9a0\1\uaa00\1\uaa60"+ + "\1\uaac0\1\uab20\1\uab80\1\uabe0\1\uac40\1\uaca0\1\uad00\1\uad60"+ + "\1\uadc0\1\uae20\0\u4380\1\uae80\1\uaee0\1\uaf40\1\uafa0\1\ub000"+ + "\1\ub060\1\ub0c0\1\ub120\1\ub180\1\ub1e0\1\ub240\1\ub2a0\1\ub300"+ + "\1\ub360\1\ub3c0\1\ub420\1\ub480\1\ub4e0\1\ub540\1\ub5a0\1\ub600"+ + "\1\ub660\1\u5000\1\ub6c0\1\ub720\1\ub780\1\ub7e0\1\ub840\1\ub8a0"+ + "\1\ub900\1\ub960\1\ub9c0\1\uba20\1\uba80\1\uba80\1\ubae0\1\ubb40"+ + "\1\ubba0\1\ubc00\1\ubc60\1\ubcc0\1\ubd20\1\ubd80\1\ubde0\1\ube40"+ + "\1\ubea0\1\ubf00\1\ubf60\1\ubfc0\0\ue9a0\1\uc020\1\uc080\1\uc0e0"+ + "\1\uc140\1\uc1a0\1\uc200\1\uc260\1\uc2c0\1\uc320\1\uc380\1\uc3e0"+ + "\1\uc440\1\uc4a0\1\uc500\1\uc560\1\uc5c0\1\uc620\1\uc680\1\uc6e0"+ + "\1\uc740\1\u6b60\1\uc7a0\1\uc800\1\u6ce0\1\uc860\1\uc8c0\1\uc920"+ + "\1\uc980\1\uc9e0\1\uca40\1\ucaa0\1\ucb00\1\ucb60\1\ucbc0\1\ucc20"+ + "\1\ucc80\1\ucce0\1\ucd40\1\ucda0\1\uce00\1\uce60\1\ucec0\1\u7400"+ + "\1\ucf20\1\ucf80\1\ucfe0\1\ud040\1\ud0a0\1\ud100\1\ud160\1\ud1c0"+ + "\1\ud220\1\ud280\1\ud2e0\1\ud340\1\ud3a0\1\ud400\1\ud460\1\ud4c0"+ + "\1\ud520\1\ud580\1\ud5e0\1\ud640\1\ud6a0\1\ud700\1\ud760\1\ud7c0"+ + "\1\ud820\1\ud880\1\ud8e0\1\ud940\1\ud9a0\1\uda00\1\uda60\1\udac0"+ + "\1\udb20\1\udb80\1\udbe0\1\udc40\1\udca0\1\udd00\1\udd60\1\uddc0"+ + "\1\ude20\1\ude80\1\udee0\1\udf40\1\udfa0\1\ue000\1\ue060\1\ue0c0"+ + "\1\ue120\1\ue180\1\ue1e0\1\ue240\1\ue2a0\1\ue300\1\ue360\1\ue3c0"+ + "\1\ue420\1\ue480\1\ue4e0\1\ue540\1\ue5a0\1\ue600\1\ue660\1\ue6c0"+ + "\1\ue720\1\ue780\1\ue7e0\1\ue840\1\ue8a0\1\ue900\1\ue960\1\ue9c0"+ + "\1\uea20\1\uea80\1\ueae0\1\ueb40\1\ueba0\1\uec00\1\uec60\1\uecc0"+ + "\1\ued20\1\ued80\1\uede0\1\uee40\1\ueea0\1\uef00\1\uef60\1\uefc0"+ + "\1\u2780\1\uf020\1\uf080\1\uf0e0\1\uf140\1\uf1a0\1\uf200\1\uf260"+ + "\1\uf2c0\1\uf320\1\uf380\1\uf3e0\1\uf440\1\uf4a0\1\uf500\1\uf560"+ + "\1\uf5c0\1\uf620\1\uf680\1\uf6e0\1\uf740\1\uf7a0\1\uf800\1\uf860"+ + "\1\uf8c0\1\uf920\1\uf980\1\uf9e0\1\ufa40\1\ufaa0\1\ufb00\1\ufb60"+ + "\1\ufbc0\1\ufc20\1\ufc80\1\ufce0\1\ufd40\1\ufda0\1\ufe00\1\ufe60"+ + "\1\ufec0\1\uff20\1\uff80\1\uffe0\2\100\2\240\2\u0100\2\u0160"+ + "\2\u01c0\2\u0220\2\u0280\2\u02e0\2\u0340\2\u03a0\2\u0400\2\u0460"+ + "\2\u04c0\2\u0520\2\u0580\2\u05e0\2\u0640\2\u06a0\2\u0700\2\u0760"+ + "\2\u07c0\2\u0820\2\u0880\2\u08e0\2\u0940\2\u09a0\2\u0a00\2\u0a60"+ + "\2\u0ac0\2\u0b20\2\u0b80\2\u0be0\2\u0c40\2\u0ca0\2\u0d00\2\u0d60"+ + "\0\u4ec0\2\u0dc0\2\u0e20\2\u0e80\2\u0ee0\2\u0f40\2\u0fa0\2\u1000"+ + "\2\u1060\2\u10c0\2\u1120\2\u1180\2\u11e0\2\u1240\0\u1e60\2\u12a0"+ + "\2\u1300\2\u1360\2\u13c0\2\u1420\2\u1480\2\u14e0\2\u1540\2\u15a0"+ + "\2\u1600\2\u1660\2\u16c0\2\u1720\2\u1780\2\u17e0\2\u1840\2\u18a0"+ + "\2\u1900\2\u1960\2\u19c0\2\u1a20\2\u1a80\2\u1ae0\2\u1b40\2\u1ba0"+ + "\2\u1c00\2\u1c60\2\u1cc0\2\u1d20\2\u1d80\2\u1de0\2\u1e40\2\u1ea0"+ + "\2\u1f00\2\u1f60\2\u1fc0\2\u2020\2\u2080\2\u20e0\2\u2140\2\u21a0"+ + "\2\u2200\2\u2260\2\u22c0\2\u2320\2\u2380\2\u23e0\2\u2440\2\u24a0"+ + "\2\u2500\2\u2560\2\u25c0\2\u2620\2\u2680\2\u26e0\2\u2740\2\u27a0"+ + "\2\u2800\2\u2860\2\u28c0\2\u2920\2\u2980\2\u29e0\2\u2a40\2\u2aa0"+ + "\2\u2b00\2\u2b60\2\u2bc0\2\u2c20\2\u2c80\2\u2ce0\2\u2d40\2\u2da0"+ + "\2\u2e00\2\u2e60\2\u2ec0\2\u2f20\2\u2f80\2\u2fe0\2\u3040\2\u30a0"+ + "\2\u3100\2\u3160\2\u31c0\2\u3220\2\u3280\2\u32e0\2\u3340\2\u33a0"+ + "\2\u3400\2\u3460\2\u34c0\2\u3520\2\u3580\2\u35e0\2\u3640\2\u36a0"+ + "\2\u3700\2\u3760\2\u37c0\2\u3820\2\u3880\2\u38e0\2\u3940\2\u39a0"+ + "\2\u3a00\2\u3a60\2\u3ac0\2\u3b20\2\u3b80\2\u3be0\2\u3c40\2\u3ca0"+ + "\0\u3540\2\u3d00\2\u3d60\2\u3dc0\2\u3e20\2\u3e80\2\u3ee0\2\u3f40"+ + "\2\u3fa0\2\u4000\2\u4060\2\u40c0\2\u4120\2\u4180\2\u41e0\2\u4240"+ + "\2\u42a0\2\u4300\2\u4360\2\u43c0\2\u4420\2\u4480\2\u44e0\2\u4540"+ + "\2\u45a0\2\u4600\2\u4660\2\u46c0\2\u4720\2\u4780\2\u47e0\2\u4840"+ + "\2\u48a0\2\u4900\2\u4960\2\u49c0\2\u4a20\2\u4a80\2\u4ae0\2\u4b40"+ + "\2\u4ba0\2\u4c00\2\u4c60\2\u4cc0\2\u4d20\2\u4d80\2\u4de0\2\u4e40"+ + "\2\u4ea0\2\u4f00\2\u4f60\2\u4fc0\2\u5020\2\u5080\2\u50e0\2\u5140"+ + "\2\u51a0\2\u5200\2\u5260\2\u52c0\2\u5320\2\u5380\2\u53e0\2\u5440"+ + "\2\u54a0\0\u4ec0\2\u5500\2\u5560\2\u55c0\2\u5620\2\u5680\2\u56e0"+ + "\2\u5740\2\u57a0\2\u5800\2\u5860\2\u58c0\2\u5920\2\u5980\2\u59e0"+ + "\2\u5a40\2\u5aa0\2\u5b00\2\u5b60\2\u5bc0\2\u5c20\2\u5c80\2\u5ce0"+ + "\2\u5d40\2\u5da0\2\u5e00\2\u5e60\2\u5ec0\2\u5f20\2\u5f80\2\u5fe0"+ + "\2\u6040\2\u60a0\2\u6100\2\u6160\2\u61c0\2\u6220\2\u6280\2\u62e0"+ + "\2\u6340\2\u63a0\2\u6400\2\u6460\2\u64c0\2\u6520\2\u6580\2\u65e0"+ + "\2\u6640\2\u66a0\2\u6700\2\u6760\2\u67c0\2\u6820\2\u6880\2\u68e0"+ + "\2\u6940\2\u69a0\2\u6a00\2\u6a60\2\u6ac0\2\u6b20\2\u6b80\2\u6be0"+ + "\2\u6c40\2\u6ca0\2\u6d00\2\u6d60\2\u6dc0\2\u6e20\2\u6e80\2\u6ee0"+ + "\2\u6f40\2\u6fa0\2\u7000\2\u7060\2\u70c0\2\u7120\2\u7180\2\u71e0"+ + "\2\u7240\2\u72a0\2\u7300\2\u7360\2\u73c0\2\u7420\2\u7480\2\u74e0"+ + "\2\u7540\2\u75a0\2\u7600\2\u7660\2\u76c0\2\u7720\2\u7780\2\u77e0"+ + "\2\u7840\2\u78a0\2\u7900\2\u7960\2\u79c0\2\u7a20\2\u7a80\2\u7ae0"+ + "\2\u7b40\2\u7ba0\2\u7c00\2\u7c60\2\u7cc0\2\u7d20\2\u7d80\2\u7de0"+ + "\2\u7e40\2\u7ea0\2\u7f00\2\u7f60\2\u7fc0\2\u8020\2\u8080\2\u80e0"+ + "\2\u8140\2\u81a0\2\u8200\2\u8260\2\u82c0\2\u8320\2\u8380\2\u83e0"+ + "\2\u8440\2\u84a0\2\u8500\2\u8560\2\u85c0\2\u8620\2\u8680\2\u86e0"+ + "\2\u8740\2\u87a0\2\u8800\2\u8860\2\u88c0\2\u8920\2\u4a20\2\u8980"+ + "\2\u89e0\2\u8a40\2\u8aa0\2\u8b00\2\u8b60\2\u8bc0\2\u8c20\2\u8c80"+ + "\2\u8ce0\2\u8d40\2\u8da0\2\u8e00\2\u8e60\2\u8ec0\2\u8f20\2\u8f80"+ + "\2\u8fe0\2\u9040\2\u90a0\2\u9100\2\u9160\2\u91c0\2\u9220\2\u9280"+ + "\2\u92e0\2\u9340\2\u93a0\2\u9400\2\u9460\2\u94c0\2\u9520\2\u9580"+ + "\2\u95e0\2\u9640\2\u96a0\2\u9700\2\u9760\2\u97c0\2\u9820\2\u9880"+ + "\2\u98e0\2\u9940\2\u99a0\2\u9a00\2\u9a60\2\u9ac0\2\u9b20\2\u9b80"+ + "\2\u9be0\2\u9c40\2\u9ca0\2\u9d00\2\u9d60\2\u9dc0\2\u9e20\2\u9e80"+ + "\2\u9ee0\2\u9f40\2\u9fa0\2\ua000\2\ua060\2\ua0c0\2\ua120\2\ua180"+ + "\2\ua1e0\2\ua240\2\ua2a0\2\ua300\2\ua360\2\ua3c0\2\ua420\2\ua480"+ + "\2\ua4e0\2\ua540\2\ua5a0\2\ua600\2\ua660\2\ua6c0\2\ua720\2\ua780"+ + "\2\ua7e0\2\ua840\2\ua8a0\2\ua900\2\ua960\2\ua9c0\2\uaa20\2\uaa80"+ + "\2\uaae0\2\uab40\2\uaba0\2\uac00\2\uac60\2\uacc0\2\uad20\2\uad80"+ + "\2\uade0\2\uae40\2\uaea0\2\uaf00\2\uaf60\2\uafc0\2\ub020\2\ub080"+ + "\2\ub0e0\2\ub140\2\ub1a0\2\ub200\2\ub260\2\ub2c0\2\ub320\2\ub380"+ + "\2\ub3e0\2\ub440\2\ub4a0\2\ub500\2\ub560\2\ub5c0\2\ub620\2\ub680"+ + "\2\ub6e0\2\ub740\2\ub7a0\2\ub800\2\ub860\2\ub8c0\2\ub920\2\ub980"+ + "\2\ub9e0\2\uba40\2\ubaa0\2\ubb00\2\ubb60\2\ubbc0\2\ubc20\2\ubc80"+ + "\2\ubce0\2\ubd40\2\ubda0\2\ube00\2\ube60\2\ubec0\2\ubf20\2\ubf80"+ + "\2\ubfe0\2\uc040\2\uc0a0\2\uc100\2\uc160\2\uc1c0\2\uc220\2\uc280"+ + "\0\u0cc0\2\uc2e0\2\uc340\2\uc3a0\2\uc400\2\uc460\0\u0cc0\2\uc4c0"+ + "\0\u0cc0\0\u0cc0\2\uc520\2\uc580\2\uc5e0\2\uc640\2\uc6a0\2\uc700"+ + "\2\uc760\2\uc7c0\2\uc820\2\uc880\2\uc8e0\2\uc940\2\uc9a0\2\uca00"+ + "\2\uca60\2\ucac0\2\ucb20\2\ucb80\2\ucbe0\2\ucc40\2\ucca0\2\ucd00"+ + "\2\ucd60\2\ucdc0\2\uce20\2\uce80\2\ucee0\2\ucf40\2\ucfa0\2\ud000"+ + "\2\ud060\2\ud0c0\2\ud120\2\ud180\2\ud1e0\2\ud240\2\ud2a0\2\ud300"+ + "\2\ud360\2\ud3c0\2\ud420\2\ud480\2\ud4e0\2\ud540\2\ud5a0\2\ud600"+ + "\2\ud660\2\ud6c0\2\ud720\2\ud780\2\ud7e0\2\ud840\2\ud8a0\2\ud900"+ + "\2\ud960\2\ud9c0\2\uda20\2\uda80\2\udae0\2\udb40\2\udba0\2\udc00"+ + "\2\udc60\2\udcc0\2\udd20\2\udd80\2\udde0\2\ude40\2\udea0\2\udf00"+ + "\2\udf60\2\udfc0\2\ue020\2\ue080\2\ue0e0\2\ue140\2\ue1a0\2\ue200"+ + "\2\ue260\2\ue2c0\2\ue320\2\ue380\2\ue3e0\2\ue440\2\ue4a0\2\ue500"+ + "\2\ue560\2\ue5c0\2\ue380\2\ue620\2\ue680\2\ue6e0\2\ue740\2\ue7a0"+ + "\2\ue800\2\ue860\2\ue8c0\2\ue920\2\ue980\2\ue9e0\2\uea40\2\ueaa0"+ + "\2\ueb00\2\ueb60\2\uebc0\0\u0cc0\2\uec20\2\uec80\2\uece0\2\ued40"+ + "\2\ueda0\2\uee00\2\uee60\2\ueec0\2\uef20\2\uef80\2\uefe0\2\uf040"+ + "\2\uf0a0\2\uf100\2\uf160\2\uf1c0\2\uf220\2\uf280\2\uf2e0\2\uf340"+ + "\2\uf3a0\2\uf400\2\uf460\2\uf4c0\2\uf520\2\uf580\2\uf5e0\2\uf640"+ + "\2\uf6a0\2\uf700\2\uf760\2\ud780\2\uf7c0\2\uf820\2\uf880\2\uf8e0"+ + "\2\uf940\2\uf9a0\2\ufa00\2\ufa60\2\ufac0\2\ufb20\2\ufb80\2\ufbe0"+ + "\2\ufc40\2\ufca0\2\ufd00\2\ufd60\2\ufdc0\2\ufe20\2\ufe80\2\ufee0"+ + "\2\uff40\2\uffa0\3\0\3\140\3\300\3\u0120\3\u0180\3\u01e0"+ + "\3\u0240\3\u02a0\3\u0300\3\u0360\3\u03c0\3\u0420\3\u0480\3\u04e0"+ + "\3\u0540\3\u05a0\3\u0600\3\u0660\3\u06c0\3\u0720\3\u0780\3\u07e0"+ + "\3\u0840\3\u08a0\3\u0900\3\u0960\3\u09c0\3\u0a20\3\u0a80\3\u0ae0"+ + "\3\u0b40\3\u0ba0\3\u0c00\3\u0c60\3\u0cc0\3\u0d20\3\u0d80\3\u0de0"+ + "\3\u0e40\3\u0ea0\3\u0f00\3\u0f60\3\u0fc0\3\u1020\3\u1080\3\u10e0"+ + "\3\u1140\3\u11a0\3\u1200\3\u1260\3\u12c0\3\u1320\3\u1380\3\u13e0"+ + "\3\u1440\3\u14a0\0\u0cc0\3\u1500\3\u1560\3\u15c0\3\u1620\3\u1680"+ + "\3\u16e0\3\u1740\3\u17a0\3\u1800\3\u1860\3\u18c0\3\u1920\3\u1980"+ + "\3\u19e0\3\u1a40\3\u1aa0\3\u1b00\3\u1b60\3\u1bc0\3\u1c20\3\u1c80"+ + "\3\u1ce0\3\u1d40\3\u1da0\3\u1e00\3\u1e60\3\u1ec0\3\u1f20\3\u1f80"+ + "\3\u1fe0\3\u2040\3\u20a0\3\u2100\3\u2160\3\u21c0\3\u2220\3\u2280"+ + "\3\u22e0\3\u2340\3\u23a0\3\u2400\3\u2460\3\u24c0\3\u2520\3\u2580"+ + "\3\u25e0\3\u2640\3\u26a0\3\u2700\3\u2760\3\u27c0\3\u2820\3\u2880"+ + "\3\u28e0\3\u2940\3\u29a0\3\u2a00\3\u2a60\3\u2ac0\3\u2b20\3\u2b80"+ + "\3\u2be0\3\u2c40\3\u2ca0\3\u2d00\3\u2d60\3\u2dc0\3\u2e20\3\u2e80"+ + "\3\u2ee0\3\u2f40\3\u2fa0\3\u3000\3\u3060\3\u30c0\2\u9940\3\u3120"+ + "\3\u3180\3\u31e0\3\u3240\3\u32a0\3\u3300\3\u3360\3\u33c0\3\u3420"+ + "\3\u3480\3\u34e0\3\u3540\3\u35a0\3\u3600\3\u3660\3\u36c0\3\u3720"+ + "\3\u3780\3\u37e0\3\u3840\3\u38a0\3\u3900\3\u3960\3\u39c0\3\u3a20"+ + "\3\u3a80\3\u3ae0\3\u3b40\3\u3ba0\3\u3c00\3\u3c60\3\u3cc0\3\u3d20"+ + "\3\u3d80\3\u3de0\3\u3e40\3\u3ea0\3\u3f00\3\u3f60\3\u3fc0\3\u4020"+ + "\3\u4080\3\u40e0\3\u4140\3\u41a0\3\u4200\3\u4260\3\u42c0\3\u4320"+ + "\3\u4380\3\u43e0\3\u4440\3\u44a0\3\u4500\3\u4560\3\u45c0\3\u4620"+ + "\3\u4680\3\u46e0\3\u4740\3\u47a0\3\u4800\3\u4860\3\u48c0\3\u4920"+ + "\3\u4980\3\u49e0\3\u4a40\3\u4aa0\3\u4b00\3\u4b60\3\u4bc0\3\u4c20"+ + "\3\u4c80\3\u4ce0\3\u4d40\3\u4da0\3\u4e00\3\u4e60\3\u4ec0\3\u4f20"+ + "\3\u4f80\3\u4fe0\3\u5040\3\u50a0\3\u5100\3\u5160\3\u51c0\3\u5220"+ + "\3\u5280\3\u52e0\3\u5340\3\u53a0\3\u5400\3\u5460\3\u54c0\3\u5520"+ + "\3\u5580\3\u55e0\3\u5640\3\u56a0\3\u5700\3\u5760\3\u57c0\3\u5820"+ + "\3\u5880\3\u58e0\3\u5940\3\u59a0\3\u5a00\3\u5a60\3\u5ac0\3\u5b20"+ + "\3\u5b80\3\u5be0\3\u5c40\3\u5ca0\3\u5d00\3\u5d60\3\u5dc0\3\u5e20"+ + "\3\u5e80\3\u5ee0\3\u5f40\3\u5fa0\3\u6000\3\u6060\3\u60c0\3\u6120"+ + "\3\u6180\3\u61e0\3\u6240\3\u62a0\3\u6300\3\u6360\3\u63c0\3\u6420"+ + "\3\u6480\3\u64e0\3\u6540\3\u65a0\3\u6600\3\u6660\3\u66c0\3\u6720"+ + "\3\u6780\3\u67e0\3\u6840\3\u68a0\3\u6900\3\u6960\3\u69c0\3\u6a20"+ + "\3\u6a80\3\u6ae0\3\u6b40\3\u6ba0\3\u6c00\3\u6c60\3\u6cc0\3\u6d20"+ + "\3\u6d80\3\u6de0\3\u6e40\3\u6ea0\3\u6f00\3\u6f60\3\u6fc0\3\u7020"+ + "\3\u7080\3\u70e0\3\u7140\3\u71a0\3\u7200\3\u7260\3\u72c0\3\u7320"+ + "\3\u7380\3\u73e0\3\u7440\3\u74a0\3\u7500\3\u7560\3\u75c0\3\u7620"+ + "\3\u7680\3\u76e0\3\u7740\3\u77a0\3\u7800\3\u7860\3\u78c0\3\u7920"+ + "\3\u7980\3\u79e0\3\u7a40\3\u7aa0\3\u7b00\3\u7b60\3\u7bc0\3\u7c20"+ + "\3\u7c80\3\u7ce0\3\u7d40\3\u7da0\3\u7e00\3\u7e60\3\u7ec0\3\u7f20"+ + "\3\u7f80\3\u7fe0\3\u8040\3\u80a0\3\u8100\3\u8160\3\u81c0\3\u8220"+ + "\3\u8280\3\u82e0\3\u8340\3\u83a0\3\u8400\3\u8460\3\u84c0\3\u8520"+ + "\3\u8580\3\u85e0\3\u8640\3\u86a0\3\u8700\3\u8760\3\u87c0\3\u8820"+ + "\3\u8880\3\u88e0\3\u8940\3\u89a0\3\u8a00\3\u8a60\3\u8ac0\3\u8b20"+ + "\3\u8b80\3\u8be0\3\u8c40\3\u8ca0\3\u8d00\3\u8d60\3\u8dc0\3\u8e20"+ + "\3\u8e80\3\u8ee0\3\u8f40\3\u8fa0\3\u9000\3\u9060\3\u90c0\3\u9120"+ + "\3\u9180\3\u91e0\3\u9240\3\u92a0\3\u9300\3\u9360\3\u93c0\3\u9420"+ + "\3\u9480\3\u94e0\3\u9540\3\u95a0\3\u9600\3\u9660\3\u96c0\3\u9720"+ + "\3\u9780\3\u97e0\3\u9840\3\u98a0\3\u9900\3\u9960\3\u99c0\3\u9a20"+ + "\3\u9a80\3\u9ae0\3\u9b40\3\u9ba0\3\u9c00\3\u9c60\3\u9cc0\3\u9d20"+ + "\3\u9d80\3\u9de0\3\u9e40\3\u9ea0\3\u9f00\3\u9f60\3\u9fc0\3\ua020"+ + "\3\ua080\3\ua0e0\3\ua140\3\ua1a0\3\ua200\3\ua260\3\ua2c0\3\ua320"+ + "\3\ua380\3\ua3e0\3\ua440\3\ua4a0\3\ua500\3\ua560\3\ua5c0\3\ua620"+ + "\3\ua680\3\ua6e0\3\ua740\3\ua7a0\3\ua800\3\ua860\3\ua8c0\3\ua920"+ + "\3\ua980\3\ua9e0\3\uaa40\3\uaaa0\3\uab00\3\uab60\3\uabc0\3\uac20"+ + "\3\uac80\3\uace0\3\uad40\3\uada0\3\uae00\3\uae60\3\uaec0\3\uaf20"+ + "\3\uaf80\3\uafe0\3\ub040\3\ub0a0\3\ub100\3\ub160\3\ub1c0\3\ub220"+ + "\3\ub280\3\ub2e0\3\ub340\3\ub3a0\3\ub400\3\ub460\3\ub4c0\3\ub520"+ + "\3\ub580\3\ub5e0\3\ub640\3\ub6a0\3\ub700\3\ub760\3\ub7c0\3\ub820"+ + "\3\ub880\3\ub8e0\3\ub940\3\ub9a0\3\uba00\3\uba60\3\ubac0\3\ubb20"+ + "\3\ubb80\3\ubbe0\3\ubc40\3\ubca0\3\ubd00\3\ubd60\3\ubdc0\3\ube20"+ + "\3\ube80\3\ubee0\3\ubf40\3\ubfa0\3\uc000\3\uc060\3\uc0c0"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[2711]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\41\1\42\1\43\1\44\1\45\1\46\132\41\2\47"+ + "\1\50\33\47\1\51\5\47\1\52\33\47\1\53\7\47"+ + "\1\54\27\47\2\55\1\56\64\55\1\57\50\55\2\60"+ + "\1\61\16\60\1\62\116\60\2\63\1\0\1\64\1\65"+ + "\2\63\1\66\1\67\1\70\1\71\6\63\1\72\116\63"+ + "\2\73\1\0\1\73\1\74\2\73\4\74\1\75\1\76"+ + "\1\77\1\100\1\101\1\102\1\74\1\73\1\103\1\104"+ + "\6\73\1\105\4\73\1\106\1\77\1\102\1\107\1\110"+ + "\5\73\2\111\1\73\1\110\2\73\1\104\1\105\1\103"+ + "\1\75\11\73\1\112\1\73\1\76\1\113\1\114\1\100"+ + "\1\73\1\101\1\73\1\115\1\114\1\73\1\116\1\117"+ + "\4\73\1\112\1\107\1\115\1\106\1\73\1\117\1\120"+ + "\1\116\1\113\3\73\1\120\4\73\3\121\1\122\4\121"+ + "\1\123\127\121\3\124\1\122\5\124\1\123\126\124\1\63"+ + "\1\125\1\0\1\64\1\45\2\63\1\66\1\126\1\127"+ + "\1\130\6\63\1\131\116\63\3\121\1\122\4\121\1\132"+ + "\127\121\3\124\1\122\5\124\1\132\126\124\2\63\1\0"+ + "\1\63\1\65\2\63\1\66\1\133\1\134\1\130\6\63"+ + "\1\135\116\63\10\136\1\137\127\136\11\140\1\137\126\140"+ + "\1\141\1\45\1\142\1\143\1\45\1\144\1\145\1\146"+ + "\1\147\1\150\1\151\3\152\1\153\2\152\1\154\3\152"+ + "\2\146\1\152\1\155\1\156\1\155\1\152\1\155\1\152"+ + "\1\157\1\141\1\160\1\161\1\162\1\163\1\164\1\155"+ + "\1\165\1\141\1\152\1\146\1\152\1\166\2\152\1\167"+ + "\1\170\1\171\1\172\1\173\1\174\1\175\1\145\1\146"+ + "\3\66\1\176\1\177\1\141\2\152\1\200\1\152\1\201"+ + "\1\202\1\203\1\204\3\152\1\205\1\206\1\152\4\175"+ + "\1\152\1\207\7\152\1\155\5\152\2\155\2\210\1\211"+ + "\5\210\1\212\26\210\1\213\100\210\2\214\1\215\6\214"+ + "\1\216\25\214\1\217\100\214\2\220\1\221\1\222\40\220"+ + "\1\223\4\220\1\224\26\220\1\225\7\220\1\226\27\220"+ + "\2\227\1\230\1\231\40\227\1\232\33\227\1\233\7\227"+ + "\1\234\27\227\2\47\1\235\33\47\1\236\5\47\1\52"+ + "\33\47\1\53\7\47\1\54\27\47\2\237\1\240\1\241"+ + "\40\237\1\242\4\237\1\243\22\237\1\244\3\237\1\245"+ + "\7\237\1\246\4\237\1\247\22\237\1\250\1\45\1\251"+ + "\1\252\1\45\1\144\1\145\1\146\1\253\1\254\1\255"+ + "\1\256\1\257\1\260\1\261\1\262\1\263\1\154\1\264"+ + "\1\265\1\266\1\267\1\146\1\264\1\270\1\271\1\270"+ + "\1\272\1\270\1\264\1\157\1\250\1\264\1\273\1\274"+ + "\1\275\1\276\1\270\1\165\1\250\1\264\1\146\1\277"+ + "\1\300\1\264\1\301\1\167\1\170\1\302\1\303\1\304"+ + "\1\305\1\175\1\145\1\146\3\66\1\176\1\250\1\306"+ + "\2\264\1\307\1\264\1\310\1\311\1\312\1\313\2\264"+ + "\1\314\1\315\1\316\1\264\4\175\1\317\1\320\1\321"+ + "\1\322\1\323\1\264\1\324\1\325\1\326\1\270\4\264"+ + "\1\327\2\270\2\330\1\331\41\330\1\223\4\330\1\332"+ + "\26\330\1\225\7\330\1\226\27\330\1\333\1\334\1\0"+ + "\1\333\1\45\2\333\1\66\1\335\1\336\1\337\6\333"+ + "\1\340\3\333\1\341\14\333\1\342\37\333\1\343\1\333"+ + "\1\344\33\333\1\345\1\65\1\346\1\347\1\65\1\345"+ + "\1\175\1\66\1\350\1\351\1\352\6\353\1\66\3\353"+ + "\2\345\1\353\3\345\1\353\1\345\2\353\1\345\5\353"+ + "\2\345\1\354\1\66\5\353\1\66\5\353\1\345\1\145"+ + "\1\66\1\345\1\355\2\66\1\345\1\356\16\353\2\175"+ + "\1\357\1\175\11\353\1\345\5\353\2\345\1\360\1\65"+ + "\1\361\1\362\1\65\5\360\1\363\6\364\1\360\3\364"+ + "\2\360\1\364\3\360\1\364\1\360\2\364\1\360\5\364"+ + "\4\360\1\365\4\364\2\360\4\364\1\366\3\360\1\367"+ + "\4\360\16\364\4\360\11\364\1\360\5\364\2\360\1\370"+ + "\1\65\1\371\1\372\1\65\1\370\1\373\1\370\1\350"+ + "\1\351\1\374\6\375\1\370\3\375\1\370\1\376\1\375"+ + "\3\377\1\375\1\377\1\375\1\u0100\6\375\1\377\1\370"+ + "\1\u0101\2\370\4\375\1\370\1\145\4\375\1\366\1\145"+ + "\7\370\16\375\1\370\1\u0102\1\370\1\u0103\11\375\1\377"+ + "\5\375\2\377\2\210\1\u0104\5\210\1\u0105\26\210\1\u0106"+ + "\100\210\2\214\1\u0107\6\214\1\u0108\25\214\1\u0106\100\214"+ + "\2\330\1\u0109\41\330\1\223\4\330\1\u010a\26\330\1\225"+ + "\7\330\1\226\27\330\2\u010b\1\u010c\34\u010b\1\u010d\10\u010b"+ + "\1\u010e\22\u010b\1\u010f\44\u010b\2\u0110\1\u0111\45\u0110\1\u0112"+ + "\13\u0110\1\u0113\53\u0110\2\41\4\0\133\41\1\42\2\0"+ + "\1\45\1\0\132\41\152\0\1\u0114\1\u0115\5\u0116\1\0"+ + "\3\u0116\1\u0117\1\u0118\6\u0116\3\0\6\u0116\4\0\4\u0116"+ + "\2\0\3\u0116\1\u0115\3\0\1\u0119\5\0\16\u0116\4\0"+ + "\21\u0116\1\0\1\45\2\0\1\45\133\0\4\46\1\0"+ + "\1\46\1\u011a\131\46\2\47\1\0\33\47\1\0\5\47"+ + "\1\0\33\47\1\0\7\47\1\0\27\47\36\0\1\u011b"+ + "\143\0\1\u011c\37\0\1\u011d\77\0\1\u011e\205\0\1\u011f"+ + "\27\0\2\55\1\0\64\55\1\0\50\55\21\0\1\u0120"+ + "\116\0\2\60\1\0\16\60\1\0\116\60\2\63\1\0"+ + "\1\63\1\0\2\63\4\0\6\63\1\0\120\63\1\0"+ + "\1\63\1\0\2\63\4\0\6\63\1\0\3\63\1\u0121"+ + "\112\63\21\0\1\72\116\0\2\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\120\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\73\1\u0122\2\73\1\u0123\1\u0124\1\0"+ + "\2\73\1\u0125\6\73\1\u0126\4\73\1\u0127\1\73\1\u0124"+ + "\15\73\1\u0125\1\u0126\13\73\1\u0128\1\73\1\u0122\4\73"+ + "\1\u0123\1\73\1\u0129\10\73\1\u0128\1\73\1\u0129\1\u0127"+ + "\17\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u012a"+ + "\2\73\1\0\2\73\1\u012b\6\73\1\u012c\24\73\1\u012b"+ + "\1\u012c\13\73\1\u012d\4\73\1\u012a\14\73\1\u012d\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\16\73"+ + "\1\u012e\61\73\1\u012e\17\73\1\0\1\73\1\0\2\73"+ + "\4\0\1\u012f\5\73\1\0\1\73\1\u0130\17\73\1\u0131"+ + "\1\u0132\10\73\1\u0132\4\73\1\u0130\1\u012f\22\73\1\u0133"+ + "\11\73\1\u0131\1\u0133\20\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\u0134\3\73\1\0\1\73\1\u0135\7\73"+ + "\1\u0136\5\73\1\u0134\17\73\1\u0136\1\u0135\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\120\1\u0137\1\73"+ + "\1\120\1\0\2\73\1\u0138\6\73\1\u0139\5\73\2\120"+ + "\1\73\1\u013a\5\73\2\u013b\1\73\1\u013a\2\73\1\u0138"+ + "\1\u0139\16\73\1\u013c\1\120\1\u0137\4\73\1\120\17\73"+ + "\1\u013c\12\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u013d\2\73\1\0\2\73\1\u013e\6\73\1\u013f\24\73"+ + "\1\u013e\1\u013f\20\73\1\u013d\37\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u0140\2\73\1\u0141"+ + "\7\73\1\u0140\4\73\1\u0141\13\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\u0142\1\u0143\1\u0144\1\73\1\u0145\1\73"+ + "\1\0\16\73\1\u0146\1\u0144\10\73\2\u0147\7\73\1\u0142"+ + "\13\73\1\u0143\1\73\1\u0148\2\73\1\u0145\2\73\1\u0148"+ + "\12\73\1\u0146\17\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\1\73\1\120\36\73\1\120\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u0149"+ + "\6\73\1\u014a\24\73\1\u0149\1\u014a\13\73\1\u014b\21\73"+ + "\1\u014b\22\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u014c\1\u014d\2\73\1\0\17\73\1\u014c\33\73\1\u014e"+ + "\4\73\1\u014d\14\73\1\u014e\22\73\1\0\1\73\1\0"+ + "\2\73\4\0\2\73\1\120\1\u0133\2\73\1\0\1\73"+ + "\1\u014f\7\73\1\u0150\4\73\1\u0151\1\120\17\73\1\u0150"+ + "\1\u014f\12\73\1\u0152\3\73\1\u0153\1\u0133\1\u0154\3\73"+ + "\1\u0153\7\73\1\u0152\2\73\1\u0151\1\u0154\16\73\1\0"+ + "\1\73\1\0\2\73\4\0\4\73\1\u0155\1\73\1\0"+ + "\1\73\1\120\14\73\1\u0156\11\73\2\u0157\6\73\1\120"+ + "\21\73\1\u0155\15\73\1\u0156\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\2\73\1\120\2\73\1\u0158\1\0\2\73"+ + "\1\u0159\5\73\1\120\6\73\1\120\1\u0158\2\73\1\120"+ + "\12\73\1\u0159\47\73\1\120\5\73\2\120\2\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u015a\1\73\1\120"+ + "\1\0\1\73\1\120\1\u015b\6\73\1\u015c\6\73\1\120"+ + "\1\73\1\u015d\10\73\1\u015d\2\73\1\u015b\1\u015c\1\120"+ + "\16\73\1\120\1\u015a\4\73\1\120\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u015e\6\73"+ + "\1\u015f\4\73\1\u0160\17\73\1\u015e\1\u015f\40\73\1\u0160"+ + "\17\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u0161"+ + "\2\73\1\0\11\73\1\u0162\25\73\1\u0162\20\73\1\u0161"+ + "\37\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u0163\25\73\2\u0164\4\73\1\u0163\57\73\3\121"+ + "\1\0\4\121\1\0\127\121\25\0\1\u0165\112\0\3\124"+ + "\1\0\5\124\1\0\126\124\1\63\1\125\1\0\1\63"+ + "\1\45\2\63\4\0\6\63\1\0\116\63\21\0\1\u0166"+ + "\116\0\10\136\1\0\127\136\11\140\1\0\126\140\1\141"+ + "\12\0\6\141\1\0\3\141\2\0\7\141\1\0\7\141"+ + "\1\0\2\141\1\0\4\141\2\0\4\141\10\0\17\141"+ + "\4\0\21\141\3\0\1\u0167\3\0\1\66\2\0\1\u0168"+ + "\12\0\1\u0169\117\0\1\66\1\0\1\66\137\0\1\66"+ + "\130\0\7\u016a\1\u016b\2\u016a\1\u016c\24\u016a\1\u016d\11\u016a"+ + "\1\u016e\66\u016a\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\3\152\1\u0170\2\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\7\0\1\66\11\0\1\u0171\116\0\1\u0172\12\0\6\u0172"+ + "\1\0\1\u0172\1\u0173\1\u0174\2\0\1\u0172\3\155\1\u0172"+ + "\1\155\1\u0175\1\0\5\u0172\1\u0176\1\155\1\0\2\u0172"+ + "\1\0\3\u0172\1\u0176\1\0\1\u0177\1\u0174\1\u0172\1\u0173"+ + "\1\u0172\10\0\5\u0172\1\u0176\5\u0172\1\u0176\3\u0172\4\0"+ + "\11\u0172\1\155\5\u0172\2\155\1\u0172\12\0\6\u0172\1\0"+ + "\1\u0172\1\u0173\1\u0174\2\0\1\u0172\1\u0178\2\u0179\1\u0172"+ + "\1\u0179\1\u017a\1\0\5\u0172\1\u0176\1\u0179\1\0\2\u0172"+ + "\1\0\2\u0172\1\u017b\1\u0176\1\0\1\u0177\1\u0174\1\u0172"+ + "\1\u0173\1\u0172\10\0\5\u0172\1\u0176\3\u0172\1\u017b\1\u0172"+ + "\1\u0176\3\u0172\4\0\11\u0172\1\u0179\5\u0172\2\u0179\7\0"+ + "\1\66\26\0\1\66\101\0\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u017c\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u017d\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\152\1\u017e\4\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\1\152\1\u017f\1\152\1\u0180\12\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\1\u0181\5\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\u0182\1\u0183\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\1\u0184\5\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\152\1\u0185\1\u0186\1\152\10\0\1\141\1\u0187"+ + "\4\152\1\u0188\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0189"+ + "\4\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\1\u018a\1\u018b\14\152\4\0\21\152\7\0"+ + "\1\66\46\0\1\66\111\0\3\u0177\1\0\1\u0177\10\0"+ + "\1\u0177\62\0\1\u0177\5\0\2\u0177\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u018c"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u018d\1\u018e\1\u018f\10\0\1\141\10\152\1\u0190\3\152"+ + "\1\u0191\1\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\1\152\1\u0192\2\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u0193\3\152\10\0\1\141"+ + "\1\u0194\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\1\u0195\1\152\1\u0196"+ + "\3\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\1\152\1\u0197\1\152\1\u0198\7\152\1\u0199"+ + "\2\152\4\0\21\152\7\0\1\66\62\0\1\66\45\0"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u019a\1\u019b\1\152\10\0\1\141\1\u019c\2\152"+ + "\1\u019d\12\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u019e\3\152\10\0\1\141"+ + "\1\u019f\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u01a0\1\u01a1"+ + "\1\152\1\0\1\141\1\152\1\0\4\152\2\0\3\152"+ + "\1\u01a2\10\0\1\141\11\152\1\u01a3\4\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\1\u01a4\15\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\1\u01a5\1\u01a6\4\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\152\1\u01a7\2\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\3\152\1\u01a8\1\152\1\u01a9"+ + "\10\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\152\1\u0187\2\152\10\0\1\141"+ + "\1\u01aa\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\152\1\u01ab\2\152\10\0"+ + "\1\141\16\152\4\0\21\152\2\210\1\0\5\210\1\0"+ + "\26\210\1\0\100\210\2\u01ac\1\0\35\u01ac\1\u01ad\44\u01ac"+ + "\1\u01ae\32\u01ac\2\214\1\0\6\214\1\0\25\214\1\0"+ + "\100\214\2\220\2\0\40\220\1\0\4\220\1\0\26\220"+ + "\1\0\7\220\1\0\27\220\12\0\1\u01af\167\0\1\u01b0"+ + "\37\0\1\u01b1\47\0\1\u01b2\167\0\1\u01b3\205\0\1\u01b4"+ + "\27\0\2\227\2\0\40\227\1\0\33\227\1\0\7\227"+ + "\1\0\27\227\12\0\1\u01b5\167\0\1\u01b6\37\0\1\u01b7"+ + "\77\0\1\u01b8\205\0\1\u01b9\65\0\1\u01ba\101\0\2\237"+ + "\2\0\40\237\1\0\4\237\1\0\22\237\1\0\3\237"+ + "\1\0\7\237\1\0\4\237\1\0\22\237\12\0\1\u01bb"+ + "\6\u01bc\1\u01bd\3\u01bc\2\0\1\u01bc\3\0\1\u01bc\4\0"+ + "\5\u01bc\5\0\4\u01bc\2\0\4\u01bc\11\0\16\u01bc\4\0"+ + "\11\u01bc\1\0\5\u01bc\44\0\1\u01be\37\0\1\u01bf\47\0"+ + "\1\u01c0\166\0\1\u01c1\1\u01c2\15\0\1\u01c3\1\u01c4\1\0"+ + "\1\u01c5\11\0\1\u01c6\1\0\1\u01c7\1\0\1\u01c8\1\u01c9"+ + "\1\0\1\u01ca\4\0\1\u01cb\70\0\1\u01cc\205\0\1\u01cd"+ + "\123\0\1\u01ce\43\0\1\250\12\0\6\250\1\0\3\250"+ + "\2\0\7\250\1\0\7\250\1\0\2\250\1\0\4\250"+ + "\2\0\4\250\7\0\20\250\4\0\21\250\3\0\1\u0167"+ + "\3\0\1\66\130\0\2\253\1\u01cf\5\253\1\u01d0\26\253"+ + "\1\u01d1\100\253\2\u01d2\1\u01d3\6\u01d2\1\u01d4\25\u01d2\1\u01d5"+ + "\100\u01d2\7\0\1\66\2\0\1\u01d6\36\0\1\u01d7\66\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u01d9\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u01da\3\264\7\0\2\250\1\u01db\1\u01dc"+ + "\1\u01dd\1\u01de\1\264\1\u01df\1\264\1\u01e0\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u01e1\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u01e2\1\u01e3\1\264\7\0\2\250"+ + "\1\u01e4\2\264\1\u01e5\12\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u01e6"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u01e7"+ + "\1\u01e8\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u01e9\1\u01ea\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u01eb\1\264\7\0\2\250\4\264"+ + "\1\u01ec\11\264\4\0\1\u01ed\20\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u01ee\1\u01ef"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u01f0\2\264\7\0\2\250\5\264\1\u01f1\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u01f2\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u01f3\1\u01f4"+ + "\1\264\1\u01f5\1\264\1\u01f6\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u01f7\4\264\1\u01f8\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u01f9\1\264\1\u01fa\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\10\264\1\u01fb\1\u01fc"+ + "\2\264\1\u01fd\1\264\4\0\1\u01fe\20\264\7\0\1\66"+ + "\11\0\1\u01ff\116\0\1\u0200\12\0\6\u0200\1\0\1\u0200"+ + "\1\u0201\1\u0202\2\0\1\u0200\3\270\1\u0200\1\270\1\u0203"+ + "\1\0\5\u0200\1\u0204\1\270\1\0\2\u0200\1\0\3\u0200"+ + "\1\u0204\1\0\1\u0177\1\u0202\1\u0200\1\u0201\1\u0200\7\0"+ + "\1\250\5\u0200\1\u0204\5\u0200\1\u0204\3\u0200\4\0\11\u0200"+ + "\1\270\5\u0200\2\270\1\u0200\12\0\6\u0200\1\0\1\u0200"+ + "\1\u0201\1\u0202\2\0\1\u0200\1\u0205\2\u0206\1\u0200\1\u0206"+ + "\1\u0207\1\0\5\u0200\1\u0204\1\u0206\1\0\2\u0200\1\0"+ + "\2\u0208\1\u0209\1\u0204\1\0\1\u0177\1\u0202\1\u0200\1\u0201"+ + "\1\u0200\7\0\1\250\5\u0200\1\u0204\3\u0200\1\u0209\1\u0200"+ + "\1\u0204\3\u0200\4\0\11\u0200\1\u0206\5\u0200\2\u0206\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u020a\1\u020b\4\264\1\0\1\250\1\264\1\0\1\264"+ + "\1\u020c\2\264\2\0\3\264\1\u020d\7\0\2\250\7\264"+ + "\1\u020e\6\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u020f\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0210\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u0211\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0212\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0213\1\u0214"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0215"+ + "\1\u0216\1\264\7\0\2\250\1\u0217\4\264\1\u0218\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0219\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u021a\2\264\7\0\2\250"+ + "\1\u021b\1\u021c\3\264\1\u021d\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u021e\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u021f\1\u0220\14\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u0221\1\264\7\0\2\250\1\u0222\4\264"+ + "\1\u0223\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0224\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0225"+ + "\1\264\7\0\2\250\10\264\1\u0226\5\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\1\264\1\u0227"+ + "\2\264\2\0\3\264\1\u0228\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0229\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u022a\1\264\1\u022b\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\264\1\u022c"+ + "\1\264\1\u022d\7\264\1\u022e\2\264\4\0\21\264\1\250"+ + "\12\0\6\u022f\1\0\3\u022f\2\0\1\u022f\3\250\1\u022f"+ + "\1\250\1\u022f\1\0\1\250\5\u022f\1\250\1\0\1\250"+ + "\1\u022f\1\0\4\u022f\2\0\4\u022f\7\0\2\250\16\u022f"+ + "\4\0\11\u022f\1\250\5\u022f\3\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0230\1\u0231\1\264"+ + "\7\0\2\250\1\u0232\2\264\1\u0233\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0234\3\264\7\0\2\250\1\u0235\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0236\1\u0237\1\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0238"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0239\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u023a\1\u023b\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u023c\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u023d\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u023e\1\u023f\2\264"+ + "\7\0\2\250\1\u0240\4\264\1\u0241\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\3\264\1\u0242\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0243\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u0244\5\264\1\0\1\250\1\264\1\0\1\264\1\u0245"+ + "\2\264\2\0\4\264\7\0\2\250\7\264\1\u0246\6\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0247\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0248\1\u0249\2\264\7\0\2\250"+ + "\1\u024a\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u024b\2\264\7\0"+ + "\2\250\5\264\1\u024c\10\264\4\0\21\264\1\250\12\0"+ + "\5\264\1\u024d\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u024e\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\3\264\1\u024f"+ + "\15\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0250\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u0251\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0252\3\264\7\0\2\250\1\u0253\4\264\1\u0254\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0255\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0256\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0257\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\2\330\1\0\41\330\1\0\4\330"+ + "\1\0\26\330\1\0\7\330\1\0\27\330\12\0\1\u0258"+ + "\125\0\2\333\1\0\1\333\1\0\2\333\4\0\6\333"+ + "\1\0\117\333\1\334\1\0\1\333\1\45\2\333\4\0"+ + "\6\333\1\0\116\333\10\335\1\u01d0\127\335\11\336\1\u0259"+ + "\126\336\2\333\1\0\1\333\1\0\2\333\4\0\6\333"+ + "\1\72\120\333\1\0\1\333\1\0\2\333\4\0\6\333"+ + "\1\0\37\333\1\u025a\60\333\1\0\1\333\1\0\2\333"+ + "\4\0\6\333\1\0\21\333\1\u025b\76\333\1\0\1\333"+ + "\1\0\2\333\4\0\6\333\1\0\37\333\1\u025c\56\333"+ + "\12\0\1\u025d\176\0\1\u025e\101\0\6\353\1\0\3\353"+ + "\2\0\10\353\1\0\6\353\4\0\4\353\1\0\5\353"+ + "\11\0\16\353\4\0\21\353\13\0\6\u025f\1\0\3\u025f"+ + "\2\0\1\u025f\3\0\1\u025f\1\0\2\u025f\1\0\5\u025f"+ + "\4\0\5\u025f\1\0\5\u025f\11\0\16\u025f\4\0\11\u025f"+ + "\1\0\5\u025f\43\0\1\u0260\1\u0261\1\u0262\1\u0263\13\0"+ + "\1\u0264\1\u0265\1\u0266\5\0\1\u0267\4\0\1\u0268\1\0"+ + "\1\u0269\1\u026a\1\u026b\7\0\1\u026c\41\0\6\u026d\1\0"+ + "\3\u026d\2\0\1\u026d\3\0\1\u026d\1\0\2\u026d\1\0"+ + "\5\u026d\4\0\5\u026d\1\0\5\u026d\11\0\16\u026d\4\0"+ + "\11\u026d\1\0\5\u026d\15\0\6\364\1\0\3\364\2\0"+ + "\10\364\1\0\6\364\4\0\4\364\2\0\4\364\11\0"+ + "\16\364\4\0\21\364\13\0\6\364\1\0\3\364\2\0"+ + "\1\364\3\0\1\364\1\0\2\364\1\0\5\364\5\0"+ + "\4\364\2\0\4\364\11\0\16\364\4\0\11\364\1\0"+ + "\5\364\14\0\7\375\1\0\3\375\2\0\1\375\3\0"+ + "\1\375\1\0\10\375\4\0\1\u025e\4\375\2\0\4\375"+ + "\11\0\16\375\3\0\1\u0103\11\375\1\0\5\375\14\0"+ + "\7\375\1\0\3\375\2\0\1\375\3\0\1\375\1\0"+ + "\10\375\5\0\4\375\2\0\4\375\11\0\16\375\3\0"+ + "\1\u0103\11\375\1\0\5\375\104\0\1\u026e\62\0\1\u026f"+ + "\2\0\3\377\1\0\1\377\10\0\1\377\11\0\1\377"+ + "\1\u0270\2\0\1\u026f\13\0\1\u0271\2\0\1\u0272\1\0"+ + "\1\u0273\1\0\1\u0274\21\0\1\377\5\0\2\377\12\0"+ + "\7\375\1\0\3\375\2\0\1\375\3\377\1\375\1\377"+ + "\10\375\1\377\4\0\4\375\2\0\4\375\11\0\16\375"+ + "\3\0\1\u0103\11\375\1\377\5\375\2\377\14\0\1\u0275"+ + "\7\0\1\u0275\3\0\5\u0275\7\0\2\u0275\4\0\2\u0275"+ + "\1\0\1\u0275\2\0\2\u0275\15\0\1\u0275\1\0\1\u0275"+ + "\5\0\1\u0275\20\0\1\u0275\5\0\2\u0275\2\u0276\1\0"+ + "\135\u0276\12\0\1\u0277\125\0\2\u010b\1\0\34\u010b\1\0"+ + "\10\u010b\1\0\22\u010b\1\0\44\u010b\115\0\1\u0278\22\0"+ + "\2\u0110\1\0\45\u0110\1\0\13\u0110\1\0\53\u0110\115\0"+ + "\1\u0279\35\0\6\u027a\1\0\3\u027a\2\0\6\u027a\3\0"+ + "\6\u027a\4\0\4\u027a\2\0\4\u027a\11\0\16\u027a\4\0"+ + "\21\u027a\13\0\1\u0116\1\u027b\3\u0116\1\u027c\1\0\3\u0116"+ + "\2\0\6\u0116\3\0\2\u0116\1\u027c\3\u0116\4\0\4\u0116"+ + "\2\0\4\u0116\11\0\2\u0116\1\u027b\13\u0116\4\0\21\u0116"+ + "\13\0\6\u0116\1\0\3\u0116\2\0\6\u0116\3\0\6\u0116"+ + "\4\0\4\u0116\2\0\4\u0116\11\0\16\u0116\4\0\21\u0116"+ + "\7\0\1\u027d\16\0\1\u027d\7\0\1\u027e\35\0\1\u027f"+ + "\101\0\1\u0280\122\0\1\u0281\222\0\1\u0282\115\0\1\u0283"+ + "\117\0\1\u0284\205\0\1\u0285\27\0\2\63\1\0\1\63"+ + "\1\0\2\63\1\u027d\3\0\6\63\1\0\4\63\1\u0286"+ + "\111\63\2\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0287\3\73\1\0\17\73\1\u0287\100\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0288\25\73"+ + "\1\u0288\60\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0289\3\73\1\0\1\u012e\16\73\1\u0289\34\73\1\u012e"+ + "\43\73\1\0\1\73\1\0\2\73\4\0\1\73\1\u028a"+ + "\1\u028b\3\73\1\0\1\73\1\u028c\15\73\1\u028b\20\73"+ + "\1\u028c\14\73\1\u028a\42\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\64\73\1\u028d\12\73\1\u028d\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\4\73\1\120\1\73"+ + "\1\0\30\73\2\120\30\73\1\120\35\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\16\73\1\u028e\61\73"+ + "\1\u028e\17\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u028f\25\73\1\u028f\60\73\1\0\1\73"+ + "\1\0\2\73\4\0\5\73\1\u0290\1\0\20\73\1\u0290"+ + "\77\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\21\73\1\u0291\54\73\1\u0291\21\73\1\0\1\73\1\0"+ + "\2\73\4\0\4\73\1\u028a\1\73\1\0\21\73\1\u0292"+ + "\40\73\1\u028a\13\73\1\u0292\21\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\1\73\1\u0293\36\73\1\u0293"+ + "\16\73\1\u0290\4\73\1\u0294\1\u0290\11\73\1\u0294\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\73"+ + "\1\u0290\36\73\1\u0290\57\73\1\0\1\73\1\0\2\73"+ + "\4\0\3\73\1\u0295\2\73\1\0\60\73\1\u0295\37\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\11\73"+ + "\1\u0296\25\73\1\u0296\60\73\1\0\1\73\1\0\2\73"+ + "\4\0\1\120\3\73\1\u0297\1\73\1\0\41\73\1\120"+ + "\20\73\1\u0297\35\73\1\0\1\73\1\0\2\73\4\0"+ + "\2\73\1\u0298\3\73\1\0\17\73\1\u0298\100\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\61\73\1\120"+ + "\17\73\1\120\16\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\2\73\1\120\33\73\1\120\14\73\1\u0299"+ + "\21\73\1\u0299\22\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\11\73\1\u029a\25\73\1\u029a\60\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\u029b\3\73\1\0"+ + "\17\73\1\u029b\100\73\1\0\1\73\1\0\2\73\4\0"+ + "\5\73\1\u012e\1\0\20\73\1\u012e\43\73\1\u0290\12\73"+ + "\1\u0290\20\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\32\73\1\u029c\30\73\1\u029c\34\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\30\73\2\u012e\66\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\53\73"+ + "\1\u029d\21\73\1\u029d\22\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u0152\21\73\1\u0152\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u029e\33\73\1\u029e\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u029f\54\73\1\u029f\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\61\73"+ + "\1\u02a0\17\73\1\u02a0\16\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\1\u02a1\27\73\2\u02a2\22\73\1\u02a1"+ + "\43\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\30\73\2\u02a3\66\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\2\73\1\u02a4\33\73\1\u02a4\61\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u02a5\2\73\1\0"+ + "\60\73\1\u02a5\37\73\1\0\1\73\1\0\2\73\4\0"+ + "\2\73\1\u02a6\3\73\1\0\17\73\1\u02a6\100\73\1\0"+ + "\1\73\1\0\2\73\4\0\5\73\1\u02a7\1\0\2\73"+ + "\1\u02a8\15\73\1\u02a7\15\73\1\u02a8\61\73\1\0\1\73"+ + "\1\0\2\73\4\0\4\73\1\u02a9\1\73\1\0\62\73"+ + "\1\u02a9\35\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\57\73\1\u02aa\5\73\1\u02aa\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\30\73\2\u0162\66\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\57\73"+ + "\1\u02ab\5\73\1\u02ab\32\73\1\0\1\73\1\0\2\73"+ + "\4\0\1\u02ac\5\73\1\0\41\73\1\u02ac\56\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\67\73\1\120"+ + "\14\73\1\120\13\73\1\0\1\73\1\0\2\73\4\0"+ + "\1\u02ad\5\73\1\0\1\73\1\u0130\1\u02ae\17\73\1\u02af"+ + "\5\73\2\u0162\1\73\1\u02af\2\73\1\u02ae\1\73\1\u0130"+ + "\1\u02ad\56\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u02b0\25\73\1\u02b0\60\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u02b1\33\73"+ + "\1\u02b1\22\73\1\u02b2\17\73\1\u02b2\16\73\1\0\1\73"+ + "\1\0\2\73\4\0\2\73\1\u02b3\3\73\1\0\17\73"+ + "\1\u02b3\1\73\1\u02ac\31\73\1\u0291\21\73\1\u0291\1\u02ac"+ + "\21\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u02b4"+ + "\2\73\1\0\53\73\1\u02b5\4\73\1\u02b4\14\73\1\u02b5"+ + "\22\73\1\0\1\73\1\0\2\73\4\0\1\u02b6\5\73"+ + "\1\0\41\73\1\u02b6\56\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u02b7\1\0\20\73\1\u02b7\77\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\57\73\1\u02b8"+ + "\5\73\1\u02b8\32\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\53\73\1\120\21\73\1\120\22\73\1\0"+ + "\1\73\1\0\2\73\4\0\1\u02b9\5\73\1\0\41\73"+ + "\1\u02b9\56\73\1\0\1\73\1\0\2\73\4\0\5\73"+ + "\1\u02ba\1\0\20\73\1\u02ba\77\73\1\0\1\73\1\0"+ + "\2\73\4\0\5\73\1\u02bb\1\0\20\73\1\u02bb\77\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\107\73"+ + "\1\u028c\2\73\1\u028c\5\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\64\73\1\u02bc\12\73\1\u02bc\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\11\73"+ + "\1\u02bd\25\73\1\u02bd\60\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\120\3\73\1\0\11\73\1\u02be\5\73"+ + "\1\120\17\73\1\u02be\27\73\1\120\14\73\1\120\13\73"+ + "\1\0\1\73\1\0\2\73\4\0\5\73\1\u02bf\1\0"+ + "\1\73\1\120\16\73\1\u02bf\17\73\1\120\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\5\73\1\u02c0\1\0\20\73"+ + "\1\u02c0\77\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\21\73\1\120\54\73\1\120\21\73\1\0\1\73"+ + "\1\0\2\73\4\0\5\73\1\u02c1\1\0\20\73\1\u02c1"+ + "\1\u02c2\54\73\1\u02c2\21\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\u02c3\1\73\1\120\1\73\1\0\17\73"+ + "\1\u02c3\42\73\1\120\35\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\1\73\1\u02c4\36\73\1\u02c4\57\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\57\73"+ + "\1\u02c5\5\73\1\u02c5\32\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\120\3\73\1\0\17\73\1\120\100\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\u02c6"+ + "\53\73\1\u02c6\43\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\57\73\1\120\5\73\1\120\30\73\7\0"+ + "\1\u02c7\16\0\1\u02c7\124\0\1\u02c8\47\0\1\u02c8\63\0"+ + "\1\u027d\16\0\1\u027d\111\0\12\u016a\1\u02c9\24\u016a\1\u016d"+ + "\102\u016a\1\0\135\u016a\51\0\1\u02ca\66\0\1\141\12\0"+ + "\6\141\1\0\3\141\2\0\7\141\1\0\1\141\1\u02cb"+ + "\5\141\1\0\2\141\1\0\4\141\2\0\4\141\10\0"+ + "\17\141\4\0\22\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\4\152\1\u02cc\1\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\7\0\1\66\11\0\1\146\116\0\1\u0172"+ + "\12\0\6\u0172\1\0\3\u0172\2\0\7\u0172\1\0\7\u0172"+ + "\1\0\2\u0172\1\0\4\u0172\2\0\4\u0172\10\0\17\u0172"+ + "\4\0\22\u0172\12\0\6\u0172\1\0\3\u0172\2\0\1\u0172"+ + "\3\u02cd\1\u0172\1\u02cd\1\u0172\1\u02ce\6\u0172\1\u02cd\1\0"+ + "\2\u0172\1\0\4\u0172\1\u02ce\1\0\4\u0172\10\0\17\u0172"+ + "\4\0\11\u0172\1\u02cd\5\u0172\2\u02cd\1\u0172\12\0\6\u0172"+ + "\1\0\3\u0172\2\0\1\u0172\3\u02cf\1\u0172\1\u02cf\1\u0175"+ + "\1\0\6\u0172\1\u02cf\1\0\2\u0172\1\0\4\u0172\2\0"+ + "\4\u0172\10\0\17\u0172\4\0\11\u0172\1\u02cf\5\u0172\2\u02cf"+ + "\1\u0172\12\0\6\u0172\1\0\2\u0172\1\u0174\2\0\1\u0172"+ + "\3\u0177\1\u0172\1\u0177\1\u0172\1\0\5\u0172\1\u0176\1\u0177"+ + "\1\0\2\u0172\1\0\3\u0172\1\u0176\2\0\1\u0174\3\u0172"+ + "\10\0\5\u0172\1\u0176\5\u0172\1\u0176\3\u0172\4\0\11\u0172"+ + "\1\u0177\5\u0172\2\u0177\1\u0172\12\0\6\u0172\1\0\2\u0172"+ + "\1\u0174\2\0\1\u0172\3\u0178\1\u0172\1\u0178\1\u0172\1\0"+ + "\5\u0172\1\u0176\1\u0178\1\0\2\u0172\1\0\3\u0172\1\u0176"+ + "\1\0\1\u0177\1\u0174\3\u0172\10\0\5\u0172\1\u0176\5\u0172"+ + "\1\u0176\3\u0172\4\0\11\u0172\1\u0178\5\u0172\2\u0178\1\u0172"+ + "\12\0\6\u0172\1\0\1\u0172\1\u02d0\1\u0174\2\0\1\u0172"+ + "\1\u0178\2\u0179\1\u0172\1\u0179\1\u017a\1\0\5\u0172\1\u0176"+ + "\1\u0179\1\0\2\u0172\1\0\3\u0172\1\u0176\1\0\1\u0177"+ + "\1\u0174\1\u0172\1\u02d0\1\u0172\10\0\5\u0172\1\u0176\5\u0172"+ + "\1\u0176\3\u0172\4\0\11\u0172\1\u0179\5\u0172\2\u0179\1\u0172"+ + "\12\0\6\u0172\1\0\3\u0172\2\0\2\u0172\2\u02d1\1\u0172"+ + "\1\u02d1\1\u017a\1\0\6\u0172\1\u02d1\1\0\2\u0172\1\0"+ + "\4\u0172\2\0\4\u0172\10\0\17\u0172\4\0\11\u0172\1\u02d1"+ + "\5\u0172\2\u02d1\1\u0172\12\0\1\u0172\1\u02d2\4\u0172\1\0"+ + "\2\u0172\1\u02d2\2\0\1\u0172\5\u02d2\1\u0172\1\0\5\u0172"+ + "\2\u02d2\1\0\2\u0172\1\0\2\u02d2\1\u0172\1\u02d2\2\0"+ + "\2\u02d2\2\u0172\10\0\3\u0172\1\u02d2\1\u0172\1\u02d2\5\u0172"+ + "\1\u02d2\3\u0172\4\0\11\u0172\1\u02d2\5\u0172\2\u02d2\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u02d3"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u02d4\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\u02d5"+ + "\5\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02d6\2\152\10\0\1\141\1\152\1\u01a1\14\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\7\152\1\u02d7\6\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\1\152\1\u02d8\4\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\5\152\1\u02d9"+ + "\10\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\2\152\1\u02da\1\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\13\152\1\u01a1"+ + "\2\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u02db\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\3\152\1\u02dc\2\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\2\152\1\u02dd\1\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\1\u02de\15\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\1\152\1\u01a1\4\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\3\152\1\u02df\2\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\1\u02e0\3\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u02e1\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u02e2\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\1\u02e3\5\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\2\152\1\u02e4\13\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\3\152"+ + "\1\u02e5\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\2\152\1\u02e6\13\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u02e7\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\7\152\1\u02e8\6\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u02e9\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\3\152\1\u02ea\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\2\152\1\u02eb\3\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\3\152\1\u02ec\2\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\7\152\1\u02ed\6\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02ee\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\3\152\1\u02ef\2\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\1\u02f0\15\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\5\152\1\u02f1\10\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u02f2\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\3\152\1\u02e5\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02f3\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\3\152\1\u02f4\2\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02f5\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\4\152\1\u02f6\1\152\1\0\1\141\1\152\1\0\1\152"+ + "\1\u02f7\2\152\2\0\2\152\1\u02f8\1\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\u02f9\5\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\2\152\1\u02fa\3\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\3\152\1\u02fb\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\3\152\1\u02fc\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\1\152\1\u02fd\17\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\7\152"+ + "\1\u02fe\6\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\2\152\1\u02ff\3\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\1\152\1\u0300\2\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\1\u0301"+ + "\4\152\1\u0302\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0303"+ + "\4\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\2\152\1\u0304\13\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\5\152\1\u0305\10\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\2\152\1\u0306\3\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\2\152"+ + "\1\u0307\1\152\10\0\1\141\5\152\1\u0308\10\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\1\152\1\u01a1"+ + "\17\152\14\0\1\u0309\7\0\1\u0309\3\0\5\u0309\7\0"+ + "\2\u0309\4\0\2\u0309\1\0\1\u0309\2\0\2\u0309\15\0"+ + "\1\u0309\1\0\1\u0309\5\0\1\u0309\20\0\1\u0309\5\0"+ + "\2\u0309\14\0\1\u030a\7\0\1\u030a\3\0\5\u030a\7\0"+ + "\2\u030a\4\0\2\u030a\1\0\1\u030a\2\0\2\u030a\15\0"+ + "\1\u030a\1\0\1\u030a\5\0\1\u030a\20\0\1\u030a\5\0"+ + "\2\u030a\13\0\1\u030b\47\0\1\u030b\160\0\1\u030c\115\0"+ + "\1\u030d\117\0\1\u030e\205\0\1\u030f\42\0\1\u0310\47\0"+ + "\1\u0310\160\0\1\u0311\115\0\1\u0312\117\0\1\u0313\205\0"+ + "\1\u0314\54\0\1\u0315\125\0\6\u01bc\1\u01bd\3\u01bc\2\0"+ + "\1\u01bc\3\0\1\u01bc\4\0\5\u01bc\5\0\4\u01bc\2\0"+ + "\4\u01bc\11\0\16\u01bc\4\0\11\u01bc\1\0\5\u01bc\2\0"+ + "\21\u01bc\1\u01bd\116\u01bc\104\0\1\u0316\115\0\1\u0317\135\0"+ + "\1\u0318\117\0\1\u0319\34\0\1\u031a\2\0\1\u031b\144\0"+ + "\1\u031c\72\0\1\u031d\157\0\1\u031e\21\0\1\u031f\110\0"+ + "\1\u0320\145\0\1\u0321\136\0\1\u0322\122\0\1\u0323\155\0"+ + "\1\u0324\136\0\1\u0325\121\0\1\u0326\205\0\1\u0327\111\0"+ + "\1\u0328\14\0\1\u0329\1\0\1\u032a\1\u032b\6\0\1\u032c"+ + "\26\0\10\u01cf\1\u032d\26\u01cf\1\u032e\102\u01cf\1\u032f\5\u01cf"+ + "\1\u0330\1\253\17\u01cf\2\253\1\u01cf\1\253\2\u01cf\1\253"+ + "\1\u0331\5\253\5\u01cf\1\253\54\u01cf\1\253\5\u01cf\2\253"+ + "\2\u0332\1\u0333\6\u0332\1\u0259\126\u0332\11\u0333\1\u0259\126\u0333"+ + "\2\u0332\1\u0333\5\u0332\1\u01d2\1\u0334\17\u0332\2\u0335\1\u0332"+ + "\1\u0336\2\u0332\1\u01d2\1\u0337\4\u01d2\1\u0335\5\u0332\1\u01d2"+ + "\54\u0332\1\u0336\5\u0332\2\u0336\2\u01d6\1\0\135\u01d6\51\0"+ + "\1\u0338\66\0\1\250\12\0\6\250\1\0\3\250\2\0"+ + "\7\250\1\0\1\250\1\u0339\5\250\1\0\2\250\1\0"+ + "\4\250\2\0\4\250\7\0\20\250\4\0\22\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u033a\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u033b\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u033c\1\u033d\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u033e"+ + "\13\264\4\0\14\264\1\u033f\4\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0340"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0341"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0342\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0343"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0344\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u0345\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u0346\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0347"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u0348\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0349\2\264"+ + "\7\0\2\250\1\u034a\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u034b\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u034c\1\264\7\0\2\250\11\264\1\u034d\4\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u034e\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u034f\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0350\1\264\1\u0351\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0352\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0353\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0354\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0355\7\0\2\250"+ + "\2\264\1\u0356\1\u0357\1\u0358\2\264\1\u0359\4\264\1\u035a"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u035b\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u035c\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\2\264\1\u035d"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u035e\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u035f\4\264\1\u0360\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0361\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u0362\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0363\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0364\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u0365\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0366\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u0367\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0368\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0369\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u036a\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u036b\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u036c\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u036d\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u036e\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u036f"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\7\264\1\u0370"+ + "\6\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0371\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u0372\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\u0200\12\0\6\u0200\1\0\3\u0200\2\0\7\u0200"+ + "\1\0\7\u0200\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200"+ + "\7\0\1\250\17\u0200\4\0\22\u0200\12\0\6\u0200\1\0"+ + "\3\u0200\2\0\1\u0200\3\u0373\1\u0200\1\u0373\1\u0200\1\u02ce"+ + "\6\u0200\1\u0373\1\0\2\u0200\1\0\4\u0200\1\u02ce\1\0"+ + "\4\u0200\7\0\1\250\17\u0200\4\0\11\u0200\1\u0373\5\u0200"+ + "\2\u0373\1\u0200\12\0\6\u0200\1\0\3\u0200\2\0\1\u0200"+ + "\3\u0374\1\u0200\1\u0374\1\u0203\1\0\6\u0200\1\u0374\1\0"+ + "\2\u0200\1\0\4\u0200\2\0\4\u0200\7\0\1\250\17\u0200"+ + "\4\0\11\u0200\1\u0374\5\u0200\2\u0374\1\u0200\12\0\6\u0200"+ + "\1\0\2\u0200\1\u0202\2\0\1\u0200\3\u0205\1\u0200\1\u0205"+ + "\1\u0200\1\0\5\u0200\1\u0204\1\u0205\1\0\2\u0200\1\0"+ + "\3\u0200\1\u0204\1\0\1\u0177\1\u0202\3\u0200\7\0\1\250"+ + "\5\u0200\1\u0204\5\u0200\1\u0204\3\u0200\4\0\11\u0200\1\u0205"+ + "\5\u0200\2\u0205\1\u0200\12\0\6\u0200\1\0\1\u0200\1\u0375"+ + "\1\u0202\2\0\1\u0200\1\u0205\2\u0206\1\u0200\1\u0206\1\u0207"+ + "\1\0\5\u0200\1\u0204\1\u0206\1\0\2\u0200\1\0\3\u0200"+ + "\1\u0204\1\0\1\u0177\1\u0202\1\u0200\1\u0375\1\u0200\7\0"+ + "\1\250\5\u0200\1\u0204\5\u0200\1\u0204\3\u0200\4\0\11\u0200"+ + "\1\u0206\5\u0200\2\u0206\1\u0200\12\0\6\u0200\1\0\3\u0200"+ + "\2\0\2\u0200\2\u0376\1\u0200\1\u0376\1\u0207\1\0\6\u0200"+ + "\1\u0376\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200\7\0"+ + "\1\250\17\u0200\4\0\11\u0200\1\u0376\5\u0200\2\u0376\1\u0200"+ + "\12\0\6\u0200\1\0\3\u0200\2\0\2\u0200\2\u0377\3\u0200"+ + "\1\0\7\u0200\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200"+ + "\7\0\1\250\17\u0200\4\0\22\u0200\12\0\1\u0200\1\u0378"+ + "\4\u0200\1\0\2\u0200\1\u0378\2\0\1\u0200\5\u0378\1\u0200"+ + "\1\0\5\u0200\2\u0378\1\0\2\u0200\1\0\2\u0378\1\u0200"+ + "\1\u0378\2\0\2\u0378\2\u0200\7\0\1\250\3\u0200\1\u0378"+ + "\1\u0200\1\u0378\5\u0200\1\u0378\3\u0200\4\0\11\u0200\1\u0378"+ + "\5\u0200\2\u0378\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0379\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u037a\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u037b\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u037c\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u037d\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\7\264\1\u037e\6\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u037f\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0380\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0381\2\264\7\0\2\250"+ + "\1\264\1\u0237\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0382"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0383\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0384\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\13\264\1\u0237\2\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0385\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0386\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u0387\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0237\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0388\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264"+ + "\1\u0389\1\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u038a"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u038b\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u038c\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u038d\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u038e\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u038f\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0390\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0391\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0392\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0393\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u0394\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0395\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0396\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0397\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0398\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0399\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u039a\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u039b\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u039c\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u039d\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u039e\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u039f\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u03a0\10\264\4\0\21\264\1\250"+ + "\12\0\6\u022f\1\0\3\u022f\2\0\7\u022f\1\0\1\u03a1"+ + "\6\u022f\1\0\1\250\1\u022f\1\0\4\u022f\2\0\4\u022f"+ + "\7\0\2\250\16\u022f\4\0\21\u022f\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03a2"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0396\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u03a3"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u03a4\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u03a5"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264"+ + "\1\u03a6\1\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u03a7"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03a8"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u03a9\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u03aa\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u03ab\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\1\264\1\u03ac\2\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u03ad\4\264\1\u03ae\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u03af\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u03b0\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\14\264\1\u03b1\4\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u03b2\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u03b3\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u03b4\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u03b5\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u03b6"+ + "\1\264\7\0\2\250\5\264\1\u03b7\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u03b8\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u03b9\7\0\2\250\16\264\4\0\15\264\1\u03ba"+ + "\3\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u03bb\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u03bc\1\264\7\0\2\250\11\264\1\u03bd"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u03be"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\14\264\1\u03bf"+ + "\1\264\4\0\21\264\1\250\12\0\1\u03c0\1\u03c1\4\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03c2"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03c3"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u03c4\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u03c5\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u03c6\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u03c7\7\0"+ + "\2\250\2\264\1\u03c8\12\264\1\u03c9\4\0\21\264\1\250"+ + "\12\0\3\264\1\u03ca\2\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u03cb"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u03b1\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u03cc"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u03cd\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u03ce\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u03cf\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u03d0\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u03d1\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u03d2"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\2\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\61\333\1\u03d3"+ + "\36\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\55\333\1\u03d4\42\333\1\0\1\333\1\0\2\333\4\0"+ + "\6\333\1\0\61\333\1\u03d5\34\333\13\0\1\u03d6\47\0"+ + "\1\u03d6\67\0\6\u025f\1\0\3\u025f\2\0\10\u025f\1\0"+ + "\6\u025f\4\0\4\u025f\1\0\5\u025f\11\0\16\u025f\4\0"+ + "\21\u025f\75\0\1\u03d7\123\0\1\u03d8\120\0\1\u03d9\32\0"+ + "\1\u03da\137\0\1\u03db\4\0\1\u03dc\100\0\1\u03dd\42\0"+ + "\1\u03de\130\0\1\u03df\121\0\1\u03e0\20\0\1\u03e1\101\0"+ + "\1\u03e2\6\0\1\u03e3\5\0\1\u03e4\121\0\1\u03e5\174\0"+ + "\1\u03e6\134\0\1\u03e7\144\0\1\u03e8\137\0\1\u03e9\50\0"+ + "\6\u026d\1\0\3\u026d\2\0\10\u026d\1\0\6\u026d\4\0"+ + "\4\u026d\1\0\5\u026d\11\0\16\u026d\4\0\21\u026d\106\0"+ + "\1\u03ea\136\0\2\u026f\137\0\1\u026f\74\0\1\u026f\136\0"+ + "\1\u026f\34\0\1\u026f\5\0\1\u026f\115\0\1\u026f\22\0"+ + "\1\u026f\44\0\2\u0116\1\u03eb\3\u0116\1\0\3\u0116\2\0"+ + "\6\u0116\3\0\1\u0116\1\u03eb\4\u0116\4\0\4\u0116\2\0"+ + "\4\u0116\11\0\16\u0116\4\0\21\u0116\13\0\6\u0116\1\0"+ + "\1\u03ec\2\u0116\2\0\6\u0116\3\0\6\u0116\4\0\4\u0116"+ + "\2\0\4\u0116\11\0\1\u0116\1\u03ec\14\u0116\4\0\21\u0116"+ + "\36\0\1\u03ed\137\0\1\u03ee\171\0\1\u03ef\127\0\1\u0282"+ + "\163\0\1\u03f0\112\0\1\u03f1\60\0\2\73\1\0\1\73"+ + "\1\0\2\73\4\0\3\73\1\u03f2\2\73\1\0\60\73"+ + "\1\u03f2\37\73\1\0\1\73\1\0\2\73\4\0\1\73"+ + "\1\u02a1\4\73\1\0\21\73\1\120\33\73\1\u02a1\20\73"+ + "\1\120\21\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u03f3\2\73\1\0\53\73\1\u03f4\4\73\1\u03f3\14\73"+ + "\1\u03f4\22\73\1\0\1\73\1\0\2\73\4\0\5\73"+ + "\1\u03f5\1\0\20\73\1\u03f5\77\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\67\73\1\u02a1\14\73\1\u02a1"+ + "\13\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u03f6\33\73\1\u03f6\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\4\73\1\120\1\73\1\0\62\73\1\120"+ + "\35\73\1\0\1\73\1\0\2\73\4\0\2\73\1\u03f7"+ + "\3\73\1\0\17\73\1\u03f7\100\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\1\73\1\u02bc\36\73\1\u02bc"+ + "\57\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\120\33\73\1\120\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\5\73\1\u02a1\1\0\20\73\1\u02a1\77\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\67\73"+ + "\1\u03f8\14\73\1\u03f8\13\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\61\73\1\u03f9\17\73\1\u03f9\16\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\64\73"+ + "\1\u03fa\12\73\1\u03fa\20\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u03fb\54\73\1\u03fb\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\u02a1"+ + "\53\73\1\u02a1\43\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\16\73\1\u02ac\61\73\1\u02ac\17\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\11\73\1\u03fc"+ + "\25\73\1\u03fc\60\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\61\73\1\u02ab\17\73\1\u02ab\16\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u03fd\2\73\1\0"+ + "\60\73\1\u03fd\37\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\11\73\1\u02b3\25\73\1\u02b3\60\73\1\0"+ + "\1\73\1\0\2\73\4\0\5\73\1\u03fe\1\0\20\73"+ + "\1\u03fe\77\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\53\73\1\u02ac\21\73\1\u02ac\22\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0164\25\73"+ + "\1\u0164\60\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\70\73\1\120\11\73\1\120\15\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u03ff\33\73"+ + "\1\u03ff\61\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\2\73\1\u0162\33\73\1\u0162\61\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u02bc\33\73"+ + "\1\u02bc\61\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\2\73\1\u0164\33\73\1\u0164\61\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\21\73\1\u0400\54\73"+ + "\1\u0400\21\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\57\73\1\u0290\5\73\1\u0290\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\53\73\1\u0401\21\73"+ + "\1\u0401\22\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u0402\2\73\1\0\60\73\1\u0402\37\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\120\25\73"+ + "\1\120\60\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\1\73\1\u0403\36\73\1\u0403\57\73\1\0\1\73"+ + "\1\0\2\73\4\0\3\73\1\u0153\2\73\1\0\60\73"+ + "\1\u0153\37\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0404\3\73\1\0\17\73\1\u0404\100\73\1\0\1\73"+ + "\1\0\2\73\4\0\5\73\1\120\1\0\20\73\1\120"+ + "\77\73\1\0\1\73\1\0\2\73\4\0\1\73\1\u0122"+ + "\4\73\1\0\55\73\1\u0122\42\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u0405\12\73\1\u0405"+ + "\20\73\1\0\1\73\1\0\2\73\4\0\2\73\1\u0406"+ + "\3\73\1\0\17\73\1\u0406\100\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u0407\12\73\1\u0407"+ + "\20\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\1\73\1\u0408\36\73\1\u0408\57\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\16\73\1\u0409\61\73\1\u0409"+ + "\17\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\64\73\1\120\12\73\1\120\20\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\73\1\u040a\4\73\1\0\55\73\1\u040a"+ + "\42\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u040b\33\73\1\u040b\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\5\73\1\u040c\1\0\20\73\1\u040c\77\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\120"+ + "\53\73\1\120\43\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\53\73\1\u040d\21\73\1\u040d\22\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u040c\2\73\1\0"+ + "\60\73\1\u040c\1\u03f9\17\73\1\u03f9\16\73\1\0\1\73"+ + "\1\0\2\73\4\0\4\73\1\u0297\1\73\1\0\62\73"+ + "\1\u0297\35\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\57\73\1\u040e\5\73\1\u040e\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\1\73\1\u040f\36\73"+ + "\1\u040f\57\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u0410\25\73\1\u0410\60\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0411\25\73"+ + "\1\u0411\60\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\2\73\1\u0162\6\73\1\120\24\73\1\u0162\1\120"+ + "\60\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\16\73\1\120\61\73\1\120\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\70\73\1\120\11\73\1\120"+ + "\1\u0412\5\73\1\u0412\6\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u0413\1\0\20\73\1\u0413\77\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u0153"+ + "\33\73\1\u0153\61\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\61\73\1\u0414\17\73\1\u0414\14\73\14\0"+ + "\1\u0415\62\0\1\u0415\142\0\2\u02c9\2\0\1\u02c9\43\0"+ + "\1\u0416\125\0\1\141\12\0\1\141\1\u0417\4\141\1\0"+ + "\2\141\1\u0417\2\0\1\141\5\u0417\1\141\1\0\5\141"+ + "\2\u0417\1\0\2\141\1\0\2\u0417\1\141\1\u0417\2\0"+ + "\2\u0417\2\141\10\0\3\141\1\u0417\1\141\1\u0417\5\141"+ + "\1\u0417\3\141\4\0\11\141\1\u0417\5\141\2\u0417\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\5\152\1\u0418\10\152\4\0\21\152\1\u0172"+ + "\12\0\6\u0172\1\0\3\u0172\2\0\1\u0172\3\u02cd\1\u0172"+ + "\1\u02cd\1\u0172\1\0\5\u0172\1\u0176\1\u02cd\1\0\2\u0172"+ + "\1\0\3\u0172\1\u0176\2\0\4\u0172\10\0\5\u0172\1\u0176"+ + "\5\u0172\1\u0176\3\u0172\4\0\11\u0172\1\u02cd\5\u0172\2\u02cd"+ + "\30\0\3\u02cd\1\0\1\u02cd\10\0\1\u02cd\62\0\1\u02cd"+ + "\5\0\2\u02cd\1\u0172\12\0\6\u0172\1\0\1\u0172\1\u0173"+ + "\1\u0172\2\0\1\u0172\3\u02cf\1\u0172\1\u02cf\1\u0175\1\0"+ + "\6\u0172\1\u02cf\1\0\2\u0172\1\0\4\u0172\2\0\2\u0172"+ + "\1\u0173\1\u0172\10\0\17\u0172\4\0\11\u0172\1\u02cf\5\u0172"+ + "\2\u02cf\1\u0172\12\0\6\u0172\1\0\1\u0172\1\u02d0\1\u0172"+ + "\2\0\2\u0172\2\u02d1\1\u0172\1\u02d1\1\u017a\1\0\6\u0172"+ + "\1\u02d1\1\0\2\u0172\1\0\4\u0172\2\0\2\u0172\1\u02d0"+ + "\1\u0172\10\0\17\u0172\4\0\11\u0172\1\u02d1\5\u0172\2\u02d1"+ + "\1\u0172\12\0\1\u0172\1\u02d2\4\u0172\1\0\1\u0172\1\u02d0"+ + "\1\u02d2\2\0\1\u0172\5\u02d2\1\u0419\1\0\5\u0172\2\u02d2"+ + "\1\0\2\u0172\1\0\2\u02d2\1\u0172\1\u02d2\2\0\2\u02d2"+ + "\1\u02d0\1\u0172\10\0\3\u0172\1\u02d2\1\u0172\1\u02d2\5\u0172"+ + "\1\u02d2\3\u0172\4\0\11\u0172\1\u02d2\5\u0172\2\u02d2\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\3\152"+ + "\1\u018f\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\u041a"+ + "\5\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\u041b\3\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u041c\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u041d\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\1\u041e\15\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\3\152\1\u01a1\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\2\152\1\u01a1\1\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\5\152\1\u041f\10\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\2\152\1\u0420\13\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\3\152\1\u02d5\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0421\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0422\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0423\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u0424\1\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\u0425\3\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\11\152\1\u01a1\4\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\3\152\1\u0426\12\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u01a1"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\1\152\1\u0427"+ + "\2\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\1\u0428\3\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\1\u0429\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\2\152\1\u042a\1\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\2\152\1\u042b\3\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\6\152"+ + "\1\u0425\7\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u0187\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u042c\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\2\152\1\u042d"+ + "\13\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\152\1\u0421\4\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u02f2\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\2\152\1\u0306"+ + "\13\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\3\152\1\u02d9\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\2\152\1\u042e\3\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\3\152\1\u042f\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\152\1\u0425\4\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\152\1\u0430\2\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\u0431\5\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\1\u0432\3\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\1\152"+ + "\1\u0433\2\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\u0434\3\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u0435\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\5\152\1\u0436\10\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0437\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u0438\1\152\10\0\1\141\1\u0429\15\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u01a1\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u042c\1\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u0439\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\14\152\1\u043a\1\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\3\152\1\u043b\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\15\152\1\u043c\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\2\152\1\u02e5"+ + "\1\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\3\152\1\u01a1\12\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\1\152\1\u043d"+ + "\2\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\4\152\1\u01a1\11\152\4\0\21\152\14\0\1\u043e"+ + "\7\0\1\u043e\3\0\5\u043e\7\0\2\u043e\4\0\2\u043e"+ + "\1\0\1\u043e\2\0\2\u043e\15\0\1\u043e\1\0\1\u043e"+ + "\5\0\1\u043e\20\0\1\u043e\5\0\2\u043e\14\0\1\u043f"+ + "\7\0\1\u043f\3\0\5\u043f\7\0\2\u043f\4\0\2\u043f"+ + "\1\0\1\u043f\2\0\2\u043f\15\0\1\u043f\1\0\1\u043f"+ + "\5\0\1\u043f\20\0\1\u043f\5\0\2\u043f\14\0\1\u0440"+ + "\62\0\1\u0440\130\0\1\u0441\127\0\1\u030c\163\0\1\u0442"+ + "\112\0\1\u0443\74\0\1\u0444\62\0\1\u0444\130\0\1\u0445"+ + "\127\0\1\u0311\163\0\1\u0446\112\0\1\u0447\101\0\1\u0448"+ + "\206\0\1\u0449\127\0\1\u0316\121\0\1\u044a\137\0\1\u044b"+ + "\176\0\1\u044c\77\0\1\u044d\157\0\1\u044e\15\0\1\u044f"+ + "\102\0\1\u0450\136\0\1\u0451\16\0\1\u0452\122\0\1\u0453"+ + "\157\0\1\u0454\116\0\1\u0455\201\0\1\u0456\75\0\1\u0457"+ + "\36\0\1\u0458\77\0\1\u0459\137\0\1\u045a\202\0\1\u045b"+ + "\112\0\1\u045c\162\0\1\u045d\132\0\1\u045e\137\0\1\u045f"+ + "\105\0\1\u0460\155\0\1\u0461\56\0\2\u01cf\1\u032f\5\u01cf"+ + "\1\u0462\127\u01cf\10\u032f\1\u032d\127\u032f\2\u0330\1\u0462\5\u0330"+ + "\1\u01d0\26\u0330\1\u0463\100\u0330\10\u01cf\1\u032d\3\u01cf\1\u0464"+ + "\7\u01cf\1\u0464\3\u01cf\5\u0464\2\u01cf\1\u032e\4\u01cf\2\u0464"+ + "\4\u01cf\2\u0464\1\u01cf\1\u0464\2\u01cf\2\u0464\15\u01cf\1\u0464"+ + "\1\u01cf\1\u0464\5\u01cf\1\u0464\20\u01cf\1\u0464\5\u01cf\2\u0464"+ + "\2\u0332\1\u0333\6\u0332\1\u01d4\126\u0332\11\u0333\1\u01d4\126\u0333"+ + "\11\0\1\u0259\126\0\2\u0332\1\u0333\6\u0332\1\u0259\17\u0332"+ + "\2\u0336\1\u0332\1\u0336\10\u0332\1\u0336\62\u0332\1\u0336\5\u0332"+ + "\2\u0336\2\u0332\1\u0333\6\u0332\1\u0259\17\u0332\2\u01d2\1\u0332"+ + "\1\u01d2\10\u0332\1\u01d2\62\u0332\1\u01d2\5\u0332\2\u01d2\2\u0332"+ + "\1\u0333\6\u0332\1\u01d4\2\u0332\1\u0465\7\u0332\1\u0465\3\u0332"+ + "\5\u0465\7\u0332\2\u0465\4\u0332\2\u0465\1\u0332\1\u0465\2\u0332"+ + "\2\u0465\15\u0332\1\u0465\1\u0332\1\u0465\5\u0332\1\u0465\20\u0332"+ + "\1\u0465\5\u0332\2\u0465\1\250\12\0\1\250\1\u0466\4\250"+ + "\1\0\2\250\1\u0466\2\0\1\250\5\u0466\1\250\1\0"+ + "\5\250\2\u0466\1\0\2\250\1\0\2\u0466\1\250\1\u0466"+ + "\2\0\2\u0466\2\250\7\0\4\250\1\u0466\1\250\1\u0466"+ + "\5\250\1\u0466\3\250\4\0\11\250\1\u0466\5\250\2\u0466"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0467\3\264\7\0\2\250\5\264\1\u0468\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0469\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u046a\6\264\1\u046b"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u046c\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u046d\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u046e\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u046f\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0470\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0471\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0472\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u0473\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0474\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0475\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0476\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0477\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0478\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0479\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u047a\7\0\2\250\2\264\1\u047b\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u047c\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u047d\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u047e\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u047f\1\u0480\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u0481\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0482\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0483\11\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0484\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0485\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0486\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0487\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0488\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0489\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u048a"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u048b"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u048c\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u048d"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u048e"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u048f\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u01f9\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\10\264\1\u0490\5\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\3\264\1\u0491\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0492\4\264\1\u0493\6\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0494\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0495"+ + "\10\264\1\u0496\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\15\264\1\u0497\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0498\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0499\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\2\264"+ + "\1\u049a\16\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u049b\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u049c\3\264\7\0\2\250\1\u049d\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u049e\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\6\264\1\u049f\7\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u04a0\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04a1\3\264\7\0\2\250\15\264\1\u04a2\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u04a3\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u04a4\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u04a5\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u04a6"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u04a7\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u04a8"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04a9"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\2\264\1\u04aa\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\u0200\12\0\6\u0200\1\0"+ + "\3\u0200\2\0\1\u0200\3\u0373\1\u0200\1\u0373\1\u0200\1\0"+ + "\5\u0200\1\u0204\1\u0373\1\0\2\u0200\1\0\3\u0200\1\u0204"+ + "\2\0\4\u0200\7\0\1\250\5\u0200\1\u0204\5\u0200\1\u0204"+ + "\3\u0200\4\0\11\u0200\1\u0373\5\u0200\2\u0373\1\u0200\12\0"+ + "\6\u0200\1\0\1\u0200\1\u0201\1\u0200\2\0\1\u0200\3\u0374"+ + "\1\u0200\1\u0374\1\u0203\1\0\6\u0200\1\u0374\1\0\2\u0200"+ + "\1\0\4\u0200\2\0\2\u0200\1\u0201\1\u0200\7\0\1\250"+ + "\17\u0200\4\0\11\u0200\1\u0374\5\u0200\2\u0374\1\u0200\12\0"+ + "\6\u0200\1\0\1\u0200\1\u0375\1\u0200\2\0\2\u0200\2\u0376"+ + "\1\u0200\1\u0376\1\u0207\1\0\6\u0200\1\u0376\1\0\2\u0200"+ + "\1\0\4\u0200\2\0\2\u0200\1\u0375\1\u0200\7\0\1\250"+ + "\17\u0200\4\0\11\u0200\1\u0376\5\u0200\2\u0376\1\u0200\12\0"+ + "\6\u0200\1\0\3\u0200\2\0\2\u0200\2\u0377\2\u0200\1\u04ab"+ + "\1\0\7\u0200\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200"+ + "\7\0\1\250\17\u0200\4\0\22\u0200\12\0\1\u0200\1\u0378"+ + "\4\u0200\1\0\1\u0200\1\u0375\1\u0378\2\0\1\u0200\5\u0378"+ + "\1\u04ac\1\0\5\u0200\2\u0378\1\0\2\u0200\1\0\2\u0378"+ + "\1\u0200\1\u0378\2\0\2\u0378\1\u0375\1\u0200\7\0\1\250"+ + "\3\u0200\1\u0378\1\u0200\1\u0378\5\u0200\1\u0378\3\u0200\4\0"+ + "\11\u0200\1\u0378\5\u0200\2\u0378\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u04ad"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u04ae\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04af\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04b0\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u04b1\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u04b2\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u04b3\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04b4\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u04b5\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u04b6\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u0237"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u0237\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u04b7\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0380\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u04b8\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u04b9\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u04ba\1\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u04bb\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04bc\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u04bd\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u04be\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\1\u04bf\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u04c0\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u04c1\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u04c2\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u04c3\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0472\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u04c4\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04c5\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u04c6\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\11\264\1\u0237\4\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0237\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u04c7\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u04c8\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04c9\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\6\264\1\u04c2\7\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0217"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u04ca\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u04cb\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u04cc\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u04b8\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u03a2\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\250\1\0\3\250\2\0\7\250\1\0\1\250\1\u04cd"+ + "\5\250\1\0\2\250\1\0\4\250\2\0\4\250\7\0"+ + "\20\250\4\0\22\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u04ce\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0383\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04cf\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u04d0\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u04c2\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u04d1\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\1\264\1\u04d2\2\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u04d3\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04d4\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u04d5\1\264\7\0\2\250\1\u04c9\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0237\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u04cb\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04d6\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\14\264\1\u04d7\1\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\15\264\1\u04d8\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u04d9\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u04da\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u033d"+ + "\1\u04db\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u04dc\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u04dd\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0396\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u04de\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0237\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u04df\6\264\4\0\1\u04e0\20\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04e1\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u04e2"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u04e3\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u04e4"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\1\264\1\u04e5\2\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u04e6"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u04e7\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u04e8"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u04e9\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\1\u04ea"+ + "\5\264\1\0\3\264\2\0\4\264\1\u04eb\2\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\3\264\1\u033d\12\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u04ec\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u04ed\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\12\264"+ + "\1\u04ee\3\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u04ef\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u04f0\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u04f1\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04f2"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\12\264\1\u033d\3\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\6\264\1\u04f3\7\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u04f4\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u036c"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u033d\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u04f5"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u04f6\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u04f7"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\15\264\1\u04f8\4\0\21\264\2\333\1\0\1\333\1\0"+ + "\2\333\4\0\6\333\1\0\40\333\1\u04f9\57\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\40\333\1\u04fa"+ + "\57\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\36\333\1\u04fb\57\333\20\0\1\u04fc\21\0\1\u04fc\172\0"+ + "\1\u03da\103\0\1\u04fd\176\0\1\u04fe\101\0\1\337\174\0"+ + "\1\u04ff\101\0\1\u0500\157\0\1\u0501\162\0\1\u0502\75\0"+ + "\1\u0503\140\0\1\u0504\17\0\1\u0505\117\0\1\u0506\176\0"+ + "\1\u0507\115\0\1\u0508\123\0\1\u0509\155\0\1\u050a\135\0"+ + "\1\u050b\170\0\1\u050c\111\0\1\u03dd\137\0\1\u050d\160\0"+ + "\1\u050e\46\0\3\u0116\1\u050f\2\u0116\1\0\3\u0116\2\0"+ + "\6\u0116\3\0\6\u0116\4\0\4\u0116\2\0\4\u0116\11\0"+ + "\5\u0116\1\u050f\10\u0116\4\0\21\u0116\13\0\6\u0116\1\0"+ + "\1\u0116\1\u0510\1\u0116\2\0\6\u0116\3\0\6\u0116\4\0"+ + "\4\u0116\2\0\2\u0116\1\u0510\1\u0116\11\0\16\u0116\4\0"+ + "\21\u0116\12\0\1\u0511\210\0\1\u0282\4\0\1\u03ef\54\0"+ + "\3\u0512\1\0\1\u0512\7\u03f1\1\0\3\u03f1\2\u0512\6\u03f1"+ + "\2\u0512\1\0\6\u03f1\1\0\1\u0512\1\u03f1\1\u0512\4\u03f1"+ + "\2\u0512\4\u03f1\1\0\1\u0512\1\0\3\u0512\2\0\1\u0512"+ + "\16\u03f1\2\u0512\1\0\1\u0512\21\u03f1\2\73\1\0\1\73"+ + "\1\0\2\73\4\0\4\73\1\u02ac\1\73\1\0\62\73"+ + "\1\u02ac\35\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\70\73\1\u0290\11\73\1\u0290\15\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\21\73\1\u0133\54\73"+ + "\1\u0133\21\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u040c\2\73\1\0\60\73\1\u040c\37\73\1\0\1\73"+ + "\1\0\2\73\4\0\1\73\1\u02ac\4\73\1\0\55\73"+ + "\1\u02ac\42\73\1\0\1\73\1\0\2\73\4\0\1\73"+ + "\1\u0290\4\73\1\0\55\73\1\u0290\42\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0513\25\73"+ + "\1\u0513\60\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0514\3\73\1\0\17\73\1\u0514\100\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u0515\6\73"+ + "\1\u03ff\24\73\1\u0515\1\u03ff\60\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\57\73\1\u0516\5\73\1\u0516"+ + "\32\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\64\73\1\u0290\12\73\1\u0290\20\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\21\73\1\u0517\54\73\1\u0517"+ + "\21\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\11\73\1\u0518\25\73\1\u0518\60\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\21\73\1\u0164\54\73\1\u0164"+ + "\21\73\1\0\1\73\1\0\2\73\4\0\5\73\1\u0519"+ + "\1\0\20\73\1\u0519\77\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u051a\54\73\1\u051a\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\1\73\1\u012e\4\73"+ + "\1\0\55\73\1\u012e\42\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\2\73\1\u02ac\33\73\1\u02ac\61\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u051b\33\73\1\u051b\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\11\73\1\u051c\25\73\1\u051c\60\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u051d\33\73\1\u051d\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\57\73\1\u051e\5\73\1\u051e\32\73"+ + "\1\0\1\73\1\0\2\73\4\0\2\73\1\u0290\3\73"+ + "\1\0\17\73\1\u0290\100\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\70\73\1\u051f\11\73\1\u051f\15\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\22\73"+ + "\1\u0520\10\73\1\u0520\64\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u015d\21\73\1\u015d\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\16\73"+ + "\1\u03ff\61\73\1\u03ff\17\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u0133\21\73\1\u0133\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\3\73\1\u0521\2\73"+ + "\1\0\60\73\1\u0521\37\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u0522\1\0\1\73\1\u0523\16\73\1\u0522"+ + "\17\73\1\u0523\20\73\1\u0524\17\73\1\u0524\16\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\16\73\1\u0525"+ + "\61\73\1\u0525\17\73\1\0\1\73\1\0\2\73\4\0"+ + "\3\73\1\u0526\2\73\1\0\60\73\1\u0526\37\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u015d"+ + "\33\73\1\u015d\57\73\15\0\1\u0527\23\0\1\u0527\76\0"+ + "\1\141\12\0\1\141\1\u0528\4\141\1\0\2\141\1\u0528"+ + "\2\0\1\141\5\u0528\1\141\1\0\5\141\2\u0528\1\0"+ + "\2\141\1\0\2\u0528\1\141\1\u0528\2\0\2\u0528\2\141"+ + "\10\0\3\141\1\u0528\1\141\1\u0528\5\141\1\u0528\3\141"+ + "\4\0\11\141\1\u0528\5\141\2\u0528\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u0529"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\u0172\12\0\1\u0172"+ + "\1\u02d2\4\u0172\1\0\2\u0172\1\u02d2\2\0\1\u0172\5\u02d2"+ + "\1\u0419\1\0\5\u0172\2\u02d2\1\0\2\u0172\1\0\2\u02d2"+ + "\1\u0172\1\u02d2\2\0\2\u02d2\2\u0172\10\0\3\u0172\1\u02d2"+ + "\1\u0172\1\u02d2\5\u0172\1\u02d2\3\u0172\4\0\11\u0172\1\u02d2"+ + "\5\u0172\2\u02d2\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\1\152\1\u052a\4\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\3\152\1\u052b\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u052c\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\13\152\1\u052d\2\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\14\152\1\u02e5\1\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u052e\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u0425\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u052f\1\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\15\152\1\u01a1\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u0530"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\7\152\1\u0531\6\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152"+ + "\1\u0532\2\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152"+ + "\1\u042f\4\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152"+ + "\1\u0533\4\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\5\152\1\u0534\10\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\3\152\1\u0535\12\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\5\152\1\u0536\10\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u01a1\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\u0537"+ + "\5\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\6\152\1\u0538\7\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152\1\u02e5"+ + "\3\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\2\152\1\u02e2\1\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0539"+ + "\4\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\152\1\u053a\2\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u053b"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\1\152\1\u042a\17\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\u053c\3\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u053d\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\152\1\u0432\2\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\u053e\3\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\1\152\1\u053f\2\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\2\152\1\u01a8\3\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\15\0\1\u0540\23\0\1\u0540\110\0\1\u0541"+ + "\210\0\1\u030c\4\0\1\u0441\54\0\3\u0542\1\0\1\u0542"+ + "\7\u0443\1\0\3\u0443\2\u0542\6\u0443\2\u0542\1\0\6\u0443"+ + "\1\0\1\u0542\1\u0443\1\u0542\4\u0443\2\u0542\4\u0443\1\0"+ + "\1\u0542\1\0\3\u0542\2\0\1\u0542\16\u0443\2\u0542\1\0"+ + "\1\u0542\21\u0443\15\0\1\u0543\23\0\1\u0543\110\0\1\u0544"+ + "\210\0\1\u0311\4\0\1\u0445\54\0\3\u0545\1\0\1\u0545"+ + "\7\u0447\1\0\3\u0447\2\u0545\6\u0447\2\u0545\1\0\6\u0447"+ + "\1\0\1\u0545\1\u0447\1\u0545\4\u0447\2\u0545\4\u0447\1\0"+ + "\1\u0545\1\0\3\u0545\2\0\1\u0545\16\u0447\2\u0545\1\0"+ + "\1\u0545\21\u0447\12\0\1\u0546\165\0\1\u0547\174\0\1\u0548"+ + "\137\0\1\u0452\122\0\1\u0549\14\0\1\u054a\150\0\1\u054b"+ + "\111\0\1\u054c\1\0\1\u054d\155\0\1\u054e\141\0\1\u054f"+ + "\134\0\1\u0550\135\0\1\u0551\122\0\1\u0552\120\0\1\u0553"+ + "\156\0\1\u0554\137\0\1\u0555\140\0\1\u0556\141\0\1\u0557"+ + "\137\0\1\u0316\4\0\1\u0449\54\0\3\u0558\1\0\1\u0558"+ + "\7\u045c\1\0\3\u045c\2\u0558\6\u045c\2\u0558\1\0\6\u045c"+ + "\1\0\1\u0558\1\u045c\1\u0558\4\u045c\2\u0558\4\u045c\1\0"+ + "\1\u0558\1\0\3\u0558\2\0\1\u0558\16\u045c\2\u0558\1\0"+ + "\1\u0558\21\u045c\42\0\1\u0559\1\u055a\175\0\1\u055b\135\0"+ + "\1\u055c\140\0\1\u055d\121\0\1\u055e\55\0\10\u0462\1\0"+ + "\26\u0462\1\u055f\102\u0462\1\0\5\u0462\2\u0330\17\u0462\2\u0330"+ + "\1\u0462\1\u0330\2\u0462\1\u0330\1\u0560\5\u0330\5\u0462\1\u0330"+ + "\54\u0462\1\u0330\5\u0462\2\u0330\10\u01cf\1\u032d\3\u01cf\1\u0561"+ + "\7\u01cf\1\u0561\3\u01cf\5\u0561\2\u01cf\1\u032e\4\u01cf\2\u0561"+ + "\4\u01cf\2\u0561\1\u01cf\1\u0561\2\u01cf\2\u0561\15\u01cf\1\u0561"+ + "\1\u01cf\1\u0561\5\u01cf\1\u0561\20\u01cf\1\u0561\5\u01cf\2\u0561"+ + "\2\u0332\1\u0333\6\u0332\1\u01d4\2\u0332\1\u0562\7\u0332\1\u0562"+ + "\3\u0332\5\u0562\7\u0332\2\u0562\4\u0332\2\u0562\1\u0332\1\u0562"+ + "\2\u0332\2\u0562\15\u0332\1\u0562\1\u0332\1\u0562\5\u0332\1\u0562"+ + "\20\u0332\1\u0562\5\u0332\2\u0562\1\250\12\0\1\250\1\u0563"+ + "\4\250\1\0\2\250\1\u0563\2\0\1\250\5\u0563\1\250"+ + "\1\0\5\250\2\u0563\1\0\2\250\1\0\2\u0563\1\250"+ + "\1\u0563\2\0\2\u0563\2\250\7\0\4\250\1\u0563\1\250"+ + "\1\u0563\5\250\1\u0563\3\250\4\0\11\250\1\u0563\5\250"+ + "\2\u0563\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0564\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0565\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u0566"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\15\264\1\u0567"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0568\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0569\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u056a\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u056b\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u056c\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264\1\u056d"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u056e"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u056f\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u033d\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0570"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0571\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0572\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0573"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0574\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0575\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0480\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0576\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u0577\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0578\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0353\2\264\7\0\2\250\5\264\1\u0579\10\264\4\0"+ + "\21\264\1\250\12\0\1\u057a\1\u057b\4\264\1\0\3\264"+ + "\2\0\4\264\1\u057c\2\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u057d\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u057e\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u057f\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u04a4\1\u057f\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0580\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0581"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0582\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u0583\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0584\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\6\264"+ + "\1\u056f\7\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0585\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\11\264"+ + "\1\u0586\4\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0587\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\10\264"+ + "\1\u0588\5\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0589\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u058a\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u058b"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u058c"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u058d\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u058e"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\1\264\1\u058f\2\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0590\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0591\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0592\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0593\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0594\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0595\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0596\11\264\4\0"+ + "\21\264\1\250\12\0\1\u04bf\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\2\264"+ + "\1\u0597\16\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0598\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\264"+ + "\1\u0599\17\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u059a\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\13\264\1\u0480\2\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\1\u059b\6\264\1\0\1\u01d8\1\264\1\u059c\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\u0485\5\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u059d\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\264"+ + "\1\u059e\17\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u059f\1\u05a0\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\2\264\1\u05a1\1\u05a2\2\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u033d\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\u04bf\1\u05a3\4\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u05a4\3\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u0597\16\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u05a5\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u05a6\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u05a7\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u05a8\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\10\264\1\u0490\5\264\4\0\21\264\1\u0200\12\0"+ + "\1\u0200\1\u0378\4\u0200\1\0\2\u0200\1\u0378\2\0\1\u0200"+ + "\5\u0378\1\u04ac\1\0\5\u0200\2\u0378\1\0\2\u0200\1\0"+ + "\2\u0378\1\u0200\1\u0378\2\0\2\u0378\2\u0200\7\0\1\250"+ + "\3\u0200\1\u0378\1\u0200\1\u0378\5\u0200\1\u0378\3\u0200\4\0"+ + "\11\u0200\1\u0378\5\u0200\2\u0378\1\250\12\0\1\264\1\u05a9"+ + "\4\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u05aa\14\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\3\264"+ + "\1\u05ab\12\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u05ac\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u05ad\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u05ae\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u05af\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u05b0\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\13\264\1\u05b1"+ + "\2\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\14\264\1\u0396"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04c2\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u05b2\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u05b3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\17\264"+ + "\1\u05b4\1\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u05b5\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u05b6\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\4\264\1\u05b7"+ + "\2\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0472\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\15\264\1\u0237\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u05b8\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u0480\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u05b9\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u05ba\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\2\264\1\u05bb"+ + "\1\u05bc\1\u05bd\1\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u05be\2\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u05bf\2\0\4\264\7\0\2\250\12\264\1\u05c0"+ + "\3\264\4\0\1\u05c1\1\u05c2\14\264\1\u05c3\2\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u05c4\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u05c5\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u04d0\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u05c6\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u05c7\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\3\264\1\u05c8\12\264\4\0\21\264\1\250"+ + "\12\0\1\250\1\u05c9\4\250\1\0\2\250\1\u05c9\2\0"+ + "\1\250\5\u05c9\1\250\1\0\5\250\2\u05c9\1\0\2\250"+ + "\1\0\2\u05c9\1\250\1\u05c9\2\0\2\u05c9\2\250\7\0"+ + "\4\250\1\u05c9\1\250\1\u05c9\5\250\1\u05c9\3\250\4\0"+ + "\11\250\1\u05c9\5\250\2\u05c9\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\3\264"+ + "\1\u0237\12\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u05ca\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0237\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u05cb\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u0390\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u05cc\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u05cd\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u05ce\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u05cf\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u05d0\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u05d1\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u05d2\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u033d\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\3\264\1\u05d3\2\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\u05d4"+ + "\20\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u05d5\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u05d6\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0242\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u05d7\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\4\264\1\u05d8\1\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u05d9\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u05da\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u05db\15\264\4\0\21\264\1\250"+ + "\12\0\4\264\1\u05dc\1\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u05dd"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u05de\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\6\264\1\u05df\7\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u05e0\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u05e1"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u05e2\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u05e3\13\264\4\0\21\264\24\0\1\u05e4\113\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u05e5\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u05e6\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u05e7\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u05e8\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u05e9\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u05ea\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u05eb\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u05ec"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u05ed\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\1\u04bf\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0480"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\2\264\1\u0597\16\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u05ee"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\10\264\1\u05ef\10\264\2\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\60\333\1\u05f0"+ + "\37\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\16\333\1\u05f1\77\333\22\0\1\u05f2\53\0\1\u05f2\144\0"+ + "\1\u05f3\72\0\1\u05f4\141\0\1\u05f5\162\0\1\u0505\127\0"+ + "\1\u05f6\126\0\1\u05f7\177\0\1\u05f8\140\0\1\337\76\0"+ + "\1\u05f9\207\0\1\337\66\0\1\u05fa\142\0\1\u05fb\135\0"+ + "\1\u050c\173\0\1\u05f9\140\0\1\u05fc\120\0\1\u05fd\161\0"+ + "\1\u05fe\132\0\1\u05ff\55\0\4\u0116\1\u0600\1\u0116\1\0"+ + "\3\u0116\2\0\6\u0116\3\0\6\u0116\4\0\4\u0116\2\0"+ + "\4\u0116\11\0\7\u0116\1\u0600\6\u0116\4\0\21\u0116\13\0"+ + "\6\u0116\1\0\2\u0116\1\u0601\2\0\6\u0116\3\0\6\u0116"+ + "\4\0\4\u0116\2\0\1\u0601\3\u0116\11\0\16\u0116\4\0"+ + "\21\u0116\12\0\1\u03f1\125\0\2\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\120\5\73\1\0\41\73\1\120\56\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\53\73"+ + "\1\u0602\21\73\1\u0602\22\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u02ac\54\73\1\u02ac\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u0603\33\73\1\u0603\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u0604\1\0\20\73\1\u0604\77\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\u0605\3\73\1\0"+ + "\17\73\1\u0605\100\73\1\0\1\73\1\0\2\73\4\0"+ + "\1\u0606\5\73\1\0\41\73\1\u0606\56\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\1\u02b3\53\73\1\u02b3"+ + "\43\73\1\0\1\73\1\0\2\73\4\0\1\u0513\5\73"+ + "\1\0\41\73\1\u0513\56\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\64\73\1\u0607\12\73\1\u0607\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\1\u0403\5\73\1\0"+ + "\41\73\1\u0403\56\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\103\73\1\u0608\5\73\1\u0608\6\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\53\73\1\u0515"+ + "\21\73\1\u0515\22\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\1\73\1\u0513\36\73\1\u0513\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u0609"+ + "\33\73\1\u0609\61\73\1\0\1\73\1\0\2\73\4\0"+ + "\3\73\1\u0149\2\73\1\0\60\73\1\u0149\37\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\u060a\3\73\1\0"+ + "\17\73\1\u060a\100\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\2\73\1\u0290\33\73\1\u0290\61\73\1\0"+ + "\1\73\1\0\2\73\4\0\1\73\1\u060b\4\73\1\0"+ + "\55\73\1\u060b\40\73\16\0\1\u060c\63\0\1\u060c\35\0"+ + "\1\141\12\0\1\141\1\u060d\4\141\1\0\2\141\1\u060d"+ + "\2\0\1\141\5\u060d\1\141\1\0\5\141\2\u060d\1\0"+ + "\2\141\1\0\2\u060d\1\141\1\u060d\2\0\2\u060d\2\141"+ + "\10\0\3\141\1\u060d\1\141\1\u060d\5\141\1\u060d\3\141"+ + "\4\0\11\141\1\u060d\5\141\2\u060d\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\5\152\1\u060e\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u060f"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\5\152\1\u0610\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\4\152\1\u01a1"+ + "\1\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\5\152\1\u0611\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\2\152\1\u0612\1\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\152\1\u0613\2\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\u042a\3\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\4\152"+ + "\1\u02d9\11\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\152\1\u0614\2\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\2\152"+ + "\1\u01a1\13\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0615\4\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u0616\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\2\152\1\u042f\1\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\6\152"+ + "\1\u02ed\7\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\4\152\1\u0617\1\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u0618\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\5\152"+ + "\1\u0619\10\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\11\152"+ + "\1\u061a\4\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\2\152"+ + "\1\u061b\13\152\4\0\21\152\1\141\12\0\3\152\1\u061c"+ + "\2\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\3\152\1\u061d\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\6\152\1\u02e5\7\152\4\0\21\152\16\0\1\u061e\63\0"+ + "\1\u061e\47\0\1\u0443\143\0\1\u061f\63\0\1\u061f\47\0"+ + "\1\u0447\137\0\1\u045c\166\0\1\u0620\137\0\1\u0621\157\0"+ + "\1\u0622\166\0\1\u0623\133\0\1\u0624\137\0\1\u0625\73\0"+ + "\1\u0626\174\0\1\u0627\123\0\1\u0628\136\0\1\u0452\141\0"+ + "\1\u0629\160\0\1\u062a\114\0\1\u062b\120\0\1\u062c\203\0"+ + "\1\u0452\140\0\1\u0452\133\0\1\u062d\115\0\1\u062e\171\0"+ + "\1\u062f\105\0\1\u062f\74\0\1\u0630\202\0\1\u0631\117\0"+ + "\1\u055b\77\0\2\u0462\1\0\145\u0462\1\0\3\u0462\1\u0632"+ + "\7\u0462\1\u0632\3\u0462\5\u0632\2\u0462\1\u055f\4\u0462\2\u0632"+ + "\4\u0462\2\u0632\1\u0462\1\u0632\2\u0462\2\u0632\15\u0462\1\u0632"+ + "\1\u0462\1\u0632\5\u0462\1\u0632\20\u0462\1\u0632\5\u0462\2\u0632"+ + "\10\u01cf\1\u032d\3\u01cf\1\u0633\7\u01cf\1\u0633\3\u01cf\5\u0633"+ + "\2\u01cf\1\u032e\4\u01cf\2\u0633\4\u01cf\2\u0633\1\u01cf\1\u0633"+ + "\2\u01cf\2\u0633\15\u01cf\1\u0633\1\u01cf\1\u0633\5\u01cf\1\u0633"+ + "\20\u01cf\1\u0633\5\u01cf\2\u0633\2\u0332\1\u0333\6\u0332\1\u01d4"+ + "\2\u0332\1\u0634\7\u0332\1\u0634\3\u0332\5\u0634\7\u0332\2\u0634"+ + "\4\u0332\2\u0634\1\u0332\1\u0634\2\u0332\2\u0634\15\u0332\1\u0634"+ + "\1\u0332\1\u0634\5\u0332\1\u0634\20\u0332\1\u0634\5\u0332\2\u0634"+ + "\1\250\12\0\1\250\1\u0635\4\250\1\0\2\250\1\u0635"+ + "\2\0\1\250\5\u0635\1\250\1\0\5\250\2\u0635\1\0"+ + "\2\250\1\0\2\u0635\1\250\1\u0635\2\0\2\u0635\2\250"+ + "\7\0\4\250\1\u0635\1\250\1\u0635\5\250\1\u0635\3\250"+ + "\4\0\11\250\1\u0635\5\250\2\u0635\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u0636\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\6\264\1\u0637\7\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0638"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\5\264"+ + "\1\u0639\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\1\u063a\20\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u063b\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u063c\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u063d\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u063e"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u0499\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u063f\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u033d\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u04a4\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0640\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0641\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0642\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u0643\11\264"+ + "\4\0\21\264\1\250\12\0\1\264\1\u0644\4\264\1\0"+ + "\1\264\1\u0645\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u0646\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\1\264\1\u05c2\5\264\1\u0647"+ + "\11\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u057f\2\264\7\0\2\250\16\264\4\0"+ + "\1\264\1\u0648\17\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u04da\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0649\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u064a"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u056f\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u064b\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u064c\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u064d\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u064e\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u064f\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\1\264"+ + "\1\u0576\2\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0650\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u0651\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u036c\3\264\1\0\1\250\1\264"+ + "\1\0\1\264\1\u0576\2\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0652"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0653\1\264\1\u0654"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0655"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\7\264\1\u0656\6\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0657\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u0658\20\264\1\250\12\0\1\u0659\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\2\264\1\u065a\16\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u065b\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u065c"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u065d\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u065e\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u065f\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0660\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0661\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0662\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\u0663\5\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\16\264\1\u05c3\2\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u0664\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0665\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\6\264"+ + "\1\u04da\7\264\4\0\21\264\1\250\12\0\2\264\1\u05bb"+ + "\1\u05bc\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"; + + private static final String ZZ_TRANS_PACKED_1 = + "\7\0\2\250\16\264\4\0\1\u05c1\15\264\1\u05c3\2\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0666\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0667\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0668\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0669\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u066a\15\264\4\0\21\264\1\250\12\0"+ + "\5\264\1\u066b\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u066c\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u066d\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u066e"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u066f"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0670\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0671\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0672\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0673\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0674\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0675\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0676\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\1\264\1\u0677\1\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\u0678"+ + "\20\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u0679\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u067a\2\264\1\u067b\2\264\1\0"+ + "\1\264\1\u067c\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u033d"+ + "\7\0\2\250\12\264\1\u067d\3\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u067e\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u067f\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0680\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0480\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0681\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0682\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0683\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0362\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\20\264\1\u0684\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0685\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0686"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0687\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0688"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0689\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0596\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u068a\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u068b"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u068c\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u068d\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u068e\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u068f\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u0690\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0691\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0692\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0383\11\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0693\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0694\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0237\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0695\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\250\1\u0696\4\250\1\0\2\250"+ + "\1\u0696\2\0\1\250\5\u0696\1\250\1\0\5\250\2\u0696"+ + "\1\0\2\250\1\0\2\u0696\1\250\1\u0696\2\0\2\u0696"+ + "\2\250\7\0\4\250\1\u0696\1\250\1\u0696\5\250\1\u0696"+ + "\3\250\4\0\11\250\1\u0696\5\250\2\u0696\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0697\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u04d0"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264"+ + "\1\u0698\1\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0699\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\11\264\1\u069a\4\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u069b\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0396\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\6\264\1\u0396\7\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u069c\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u069d\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u069e"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u049f\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u069f"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06a0\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\2\264\1\u06a1\16\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\14\264\1\u0481"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06a2\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u06a3\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u06a4\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u06a5\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u06a6\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u06a7\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\3\264\1\u06a8\12\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u06a9\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u06aa\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06ab\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\43\0\1\u06ac\74\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u06ad\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u06ae\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\7\264"+ + "\1\u06af\6\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u06b0\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u06b1\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\13\264"+ + "\1\u06b2\2\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u06b3\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u06b4\14\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06b5\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\4\264\1\u06b6\2\264\1\0\1\u01d8\1\264"+ + "\1\u033d\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u06b7"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\2\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\31\333\1\u04fb"+ + "\66\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\57\333\1\u03d5\36\333\23\0\1\u06b8\36\0\1\u06b8\135\0"+ + "\1\u03da\141\0\1\u06b9\12\0\1\u06ba\1\0\1\u06bb\123\0"+ + "\1\337\136\0\1\u06bc\153\0\1\337\152\0\1\u06bd\64\0"+ + "\1\u06be\164\0\1\u06bf\151\0\1\u06c0\154\0\1\u06bc\66\0"+ + "\1\337\140\0\1\u06bc\136\0\1\u06c1\111\0\5\u0116\1\u06c2"+ + "\1\0\3\u0116\2\0\6\u0116\3\0\2\u0116\1\u06c2\3\u0116"+ + "\4\0\4\u0116\2\0\4\u0116\11\0\16\u0116\4\0\21\u0116"+ + "\2\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\16\73\1\u028d\61\73\1\u028d\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\32\73\1\120\30\73\1\120"+ + "\34\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u06c3\33\73\1\u06c3\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\2\73\1\u02a8\33\73\1\u02a8"+ + "\61\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\53\73\1\u0128\21\73\1\u0128\22\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\2\73\1\u0513\33\73\1\u0513"+ + "\61\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\16\73\1\u06c4\61\73\1\u06c4\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u06c5\12\73\1\u06c5"+ + "\20\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u0164"+ + "\2\73\1\0\60\73\1\u0164\37\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\53\73\1\u02bc\21\73\1\u02bc"+ + "\20\73\17\0\1\u06c6\64\0\1\u06c6\33\0\1\141\12\0"+ + "\1\141\1\152\4\141\1\0\2\141\1\152\2\0\1\141"+ + "\5\152\1\141\1\0\5\141\2\152\1\0\2\141\1\0"+ + "\2\152\1\141\1\152\2\0\2\152\2\141\10\0\3\141"+ + "\1\152\1\141\1\152\5\141\1\152\3\141\4\0\11\141"+ + "\1\152\5\141\2\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u0612\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\u06c7\3\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\1\u06c8\15\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\152\1\u01a1\14\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u0425\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\2\152\1\u042f\13\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u06c9\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\1\u02e5\5\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u06ca\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\2\152\1\u02d7\13\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\2\152\1\u0531\3\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u06cb"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u06cc\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152"+ + "\1\u06cd\2\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\2\152\1\u06ce"+ + "\1\152\10\0\1\141\16\152\4\0\21\152\17\0\1\u06cf"+ + "\64\0\1\u06cf\52\0\1\u06d0\64\0\1\u06d0\76\0\1\u0452"+ + "\176\0\1\u06d1\136\0\1\u06d2\121\0\1\u0452\136\0\1\u0550"+ + "\117\0\1\u0557\176\0\1\u0550\77\0\1\u0452\160\0\1\u06d3"+ + "\135\0\1\u06d4\154\0\1\u06d5\141\0\1\u06d6\103\0\1\u06d1"+ + "\171\0\1\u0620\103\0\1\u06d7\76\0\64\u062f\1\u0452\53\u062f"+ + "\75\0\1\u06d8\103\0\1\u06d9\76\0\10\u0462\1\0\3\u0462"+ + "\1\u06da\7\u0462\1\u06da\3\u0462\5\u06da\2\u0462\1\u055f\4\u0462"+ + "\2\u06da\4\u0462\2\u06da\1\u0462\1\u06da\2\u0462\2\u06da\15\u0462"+ + "\1\u06da\1\u0462\1\u06da\5\u0462\1\u06da\20\u0462\1\u06da\5\u0462"+ + "\2\u06da\10\u01cf\1\u032d\3\u01cf\1\253\7\u01cf\1\253\3\u01cf"+ + "\5\253\2\u01cf\1\u032e\4\u01cf\2\253\4\u01cf\2\253\1\u01cf"+ + "\1\253\2\u01cf\2\253\15\u01cf\1\253\1\u01cf\1\253\5\u01cf"+ + "\1\253\20\u01cf\1\253\5\u01cf\2\253\2\u0332\1\u0333\6\u0332"+ + "\1\u01d4\2\u0332\1\u01d2\7\u0332\1\u01d2\3\u0332\5\u01d2\7\u0332"+ + "\2\u01d2\4\u0332\2\u01d2\1\u0332\1\u01d2\2\u0332\2\u01d2\15\u0332"+ + "\1\u01d2\1\u0332\1\u01d2\5\u0332\1\u01d2\20\u0332\1\u01d2\5\u0332"+ + "\2\u01d2\1\250\12\0\1\250\1\264\4\250\1\0\2\250"+ + "\1\264\2\0\1\250\5\264\1\250\1\0\5\250\2\264"+ + "\1\0\2\250\1\0\2\264\1\250\1\264\2\0\2\264"+ + "\2\250\7\0\4\250\1\264\1\250\1\264\5\250\1\264"+ + "\3\250\4\0\11\250\1\264\5\250\2\264\1\250\12\0"+ + "\1\264\1\u06db\3\264\1\u06dc\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\2\264\1\u05bb\1\u067b\1\264\1\u06dc\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\1\u06dd\3\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\12\264\1\u06de\3\264\1\u05c3\2\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u06df\16\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u06e0\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\14\264\1\u06e1\1\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u06e2\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u06e3\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u06e4"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u06e5\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u06e6\10\264\4\0\21\264\1\250\12\0\5\264"+ + "\1\u06e7\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u06e8\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u06e9\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06ea\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06eb\2\264\7\0"+ + "\2\250\5\264\1\u06ec\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u068a\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u06ed\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06ee\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u06ef"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u06f0\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06f1\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\14\264\1\u06f2\4\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u06f3\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u06f4\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06f5\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u06f6\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u06f7\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\4\264\1\u06f8\2\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\11\264\1\u06f9\4\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u06fa\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u06fb\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06fc\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u06fd\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06fe\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u06ff\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0700\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0701\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\4\264\1\u0702\11\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\11\264\1\u0703\4\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u0704\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0705\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u0706\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0707\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0708\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0709\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u070a\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u070b\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u070c\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u033d\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\264\1\u070d\14\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u070e\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\1\264\1\u070f\1\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\1\0\1\u0710\4\264\7\0\2\250\12\264\1\u0711\3\264"+ + "\4\0\4\264\1\u0712\14\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04da\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0713\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\1\0\1\u0714\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0715"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\1\264"+ + "\1\u067c\1\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\10\264\1\u0716\10\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u06b4\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0717\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0718\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0719\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0706\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u071a\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u071b\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u071c\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u071d\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\1\264\1\u071e\2\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u071f\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0720\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0721\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0722\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u023e\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0723\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u0724\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0725\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0726"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u0237\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u0727\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0728"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u033d"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0729"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04c2"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u072a"+ + "\3\264\1\0\1\250\1\264\1\0\3\264\1\u072b\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u072c"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u072d\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u072e\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\11\264\1\u072f\4\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0730"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u0731"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u068b"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0732"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0730\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u04d0\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u0733"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u0734\15\264\4\0\21\264\1\250\12\0\1\250\1\u0735"+ + "\4\250\1\0\2\250\1\u0735\2\0\1\250\5\u0735\1\250"+ + "\1\0\5\250\2\u0735\1\0\2\250\1\0\2\u0735\1\250"+ + "\1\u0735\2\0\2\u0735\2\250\7\0\4\250\1\u0735\1\250"+ + "\1\u0735\5\250\1\u0735\3\250\4\0\11\250\1\u0735\5\250"+ + "\2\u0735\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u0396\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0736\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0737\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0738\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0739\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u073a\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u073b\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u069d\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u073c\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\1\u073d\5\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u073e\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\1\u073f"+ + "\2\264\1\u0740\2\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u033d\7\0\2\250\16\264\4\0\1\u0741\20\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0742\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0743\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264\1\u0744"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\14\264\1\u0745\1\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0746\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\2\264\1\u0747\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264\1\u0748"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\2\264\1\u0749"+ + "\16\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u074a\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u074b\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u074c\10\264\4\0\21\264"+ + "\42\0\1\u074d\75\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u074e"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u074f\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0750\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0751\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\15\264\1\u0752\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0753\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0754\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\2\264\1\u0755\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0756\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0757\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0758\7\0\2\250\16\264\4\0\21\264\24\0\1\u0759"+ + "\33\0\1\u0759\140\0\1\u0500\122\0\1\u075a\173\0\1\u075b"+ + "\117\0\1\u075c\137\0\1\337\154\0\1\u06ba\1\0\1\u06bb"+ + "\102\0\1\u075d\136\0\1\u06bd\140\0\1\u075e\75\0\2\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\32\73"+ + "\1\u02ac\30\73\1\u02ac\34\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u012a\21\73\1\u012a\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\4\73\1\u075f\1\73"+ + "\1\0\62\73\1\u075f\33\73\20\0\1\u0760\21\0\1\u0760"+ + "\75\0\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u042f\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u01a1\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u0761\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\2\152\1\u02e5\13\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u0762\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\u0308\3\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u042a\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\1\u0763\15\152\4\0\21\152\20\0"+ + "\1\u0764\21\0\1\u0764\115\0\1\u0765\21\0\1\u0765\156\0"+ + "\1\u0766\141\0\1\u0767\131\0\1\u0768\31\0\1\u0769\72\0"+ + "\1\u0550\136\0\1\u076a\157\0\1\u076b\137\0\1\u076c\153\0"+ + "\1\u076d\144\0\1\u076e\35\0\10\u0462\1\0\3\u0462\1\u076f"+ + "\7\u0462\1\u076f\3\u0462\5\u076f\2\u0462\1\u055f\4\u0462\2\u076f"+ + "\4\u0462\2\u076f\1\u0462\1\u076f\2\u0462\2\u076f\15\u0462\1\u076f"+ + "\1\u0462\1\u076f\5\u0462\1\u076f\20\u0462\1\u076f\5\u0462\2\u076f"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0770\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u0771\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0772"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u0773\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0774\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0775\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0776\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\13\264\1\u0777\5\264\1\250\12\0\1\264\1\u0778\4\264"+ + "\1\0\1\264\1\u0645\1\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\264\1\u0779\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u077a\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u077b\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u077c\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u077d\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u033d\14\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u077e\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u077f\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0780\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0781\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u03b1\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0782\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0783\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0784\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0785\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\14\264\1\u0786\1\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0787\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0788\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\4\264\1\u05bd\1\264\1\0\2\264\1\u04aa"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0789\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u078a\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u078b\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u078c\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u06b4\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u078d\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u078e\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u078f\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0790\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0791\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0792\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\1\264\1\u0793\2\264\1\u0794\1\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\1\u0795\20\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0796\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0797\4\264\1\u0798\1\0\3\264"+ + "\2\0\4\264\1\u0799\2\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\3\264\1\u079a\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u079b\16\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u04f8\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u079c\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\15\264\1\u079d\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\1\u079e\3\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u079f\3\264\1\u07a0\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u07a1\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u07a2\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\14\264\1\u07a3\1\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\1\264\1\u07a4\1\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\4\264\1\u07a5\1\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u07a6\15\264\4\0\21\264\13\0\1\u07a7\106\0"+ + "\1\u07a8\15\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u06df\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u07a9\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u07aa\7\0\2\250\16\264\4\0\21\264"+ + "\14\0\1\u07ab\6\0\1\u07ac\26\0\1\u07ad\2\0\1\u07ae"+ + "\62\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\1\264"+ + "\1\u07af\2\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u07b0\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u07b1\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u07b2\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u07b3\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u07b4\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u07b5\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u07b6"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u07b7"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\15\264\1\u07b8\3\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0479\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07b9"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u0358"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u0472\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u07ba\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u07bb\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u07bc\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u04d0\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\24\0\1\u07bd\62\0\1\u07be\30\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u07bf"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u07c0"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u07c1\1\u07c2"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u07c3"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\4\264\1\u056f\11\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u07c4"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u07c5\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u07c6\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u056f\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u07c7\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\3\264\1\u07c8\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\7\264\1\u0237"+ + "\6\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u07c9\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\250\1\u022f\4\250"+ + "\1\0\2\250\1\u022f\2\0\1\250\5\u022f\1\250\1\0"+ + "\5\250\2\u022f\1\0\2\250\1\0\2\u022f\1\250\1\u022f"+ + "\2\0\2\u022f\2\250\7\0\4\250\1\u022f\1\250\1\u022f"+ + "\5\250\1\u022f\3\250\4\0\11\250\1\u022f\5\250\2\u022f"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0396\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u07ca\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u07cb\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u03b7"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u07cc\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u07cd"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u07ce\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u07cf"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u07d0\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u07d1"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u07d2"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u07d3\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u07d4\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u07d5\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07d6"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u07d7\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u0363\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u07d8\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u07d9\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u07da\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\12\264\1\u07db\3\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u07dc\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\14\264\1\u07dd\1\264\4\0"+ + "\21\264\41\0\1\u07de\76\0\1\250\12\0\2\264\1\u07df"+ + "\3\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u07e0\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u07e1"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u07e2"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u07e3\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\2\264\1\u0755\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\3\264\1\u07e4\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u07e5\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u01f9\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\2\264\1\u07e6\16\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07e7"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u07e8"+ + "\12\264\4\0\21\264\21\0\1\u07e9\154\0\1\u07ea\203\0"+ + "\1\u07eb\136\0\1\337\74\0\1\u07ec\162\0\1\u07ed\56\0"+ + "\2\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\1\73\1\u07ee\36\73\1\u07ee\55\73\21\0\1\u07ef\116\0"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\5\152\1\u07f0\10\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u02d9\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u06cd\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\21\0\1\u07f1\137\0\1\u07f2\200\0\1\u0452\136\0\1\u07f3"+ + "\160\0\1\u07f4\116\0\1\u07f5\154\0\1\u0452\103\0\1\u07f6"+ + "\157\0\1\u062f\117\0\1\u062f\137\0\1\u07f7\75\0\10\u0462"+ + "\1\0\3\u0462\1\u0330\7\u0462\1\u0330\3\u0462\5\u0330\2\u0462"+ + "\1\u055f\4\u0462\2\u0330\4\u0462\2\u0330\1\u0462\1\u0330\2\u0462"+ + "\2\u0330\15\u0462\1\u0330\1\u0462\1\u0330\5\u0462\1\u0330\20\u0462"+ + "\1\u0330\5\u0462\2\u0330\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u07f8\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\15\264\1\u07f9"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u07fa\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u07fb\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u0471\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03c3\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u07fc\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u07fd\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u07fe\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07ff"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\2\264"+ + "\1\u04aa\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\2\264\1\u0800\16\264\1\250\12\0\3\264\1\u05bc"+ + "\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0801\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0802"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0803\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\1\0\1\u0804\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0372\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0805\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\11\264\1\u0806\4\264"+ + "\4\0\21\264\1\250\12\0\1\u0807\5\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0808\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0809\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u080a\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u080b"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u080c\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u080d\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\1\u080e\3\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u080f\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0810"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0811"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0812\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0813\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\1\264\1\u0814\2\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u0815\20\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0816\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0817"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u0818\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0819\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\1\264\1\u081a\2\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u081b"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u081c\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u081d"+ + "\12\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u081e\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u081f\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u0820\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0821"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u0822"+ + "\10\264\4\0\21\264\1\250\12\0\2\264\1\u05bb\1\u05bc"+ + "\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u0823\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\2\264\1\u05a1\1\264"+ + "\1\u05bd\1\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u0824\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0825\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\6\264\1\324\12\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0826\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0827\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0828\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0829\13\264"+ + "\4\0\21\264\42\0\1\u082a\140\0\1\u082b\74\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u082c\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\15\264\1\u033d\4\0\21\264\61\0\1\u082d\137\0"+ + "\1\u082e\116\0\1\u082f\201\0\1\u0830\35\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0831\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0832\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u0833\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u03cd\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0834\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u0835"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0836\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u0837"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0838\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0839\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u07dd\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u083a\10\264"+ + "\4\0\21\264\1\250\12\0\1\u083b\1\u083c\4\264\1\0"+ + "\1\264\1\u067c\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u083d\3\264\1\324\12\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u06b4\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\43\0\1\u083e\154\0\1\u083e\57\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\7\264\1\u083f\6\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\264\1\u0840\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0841"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\1\264\1\u0842\2\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0843\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0844"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0845\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\3\264\1\u05bf\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0846\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0847"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u0848"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0849\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0383\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u084a\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u084b\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u06e9\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u084c\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u084d\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u084e\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u084f\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0850\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\3\264\1\u0851\2\264\1\0\1\264\1\u0852"+ + "\1\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\12\264"+ + "\1\u0853\3\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0854\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0855\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\4\264\1\u0856\2\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0857\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0858\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0859\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u085a\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u085b\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0372\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\76\0\1\u085c\41\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u085d\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u085e\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u085f\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0860\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0861\11\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0862\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0863\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0864\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0865\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\2\264\1\u0597\16\264"+ + "\42\0\1\u0866\157\0\1\u075c\137\0\1\u0867\120\0\1\u0868"+ + "\74\0\2\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u012a\25\73\1\u012a\56\73\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\13\152\1\u06cc\5\152\44\0\1\u0869"+ + "\153\0\1\u086a\121\0\1\u086b\155\0\1\u086c\166\0\1\u086d"+ + "\30\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u086e\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u086f\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\4\264\1\u0870\1\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u072c\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0871\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\4\264\1\u0872\1\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0873\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0874\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0875\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0372\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0876"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0877\15\264\4\0\21\264\52\0\1\u07ad\65\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u0878\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0879\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u087a\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u087b\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u087c\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u087d\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u087e\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\2\264\1\u05bb\3\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\16\264\1\u05c3\2\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\1\0"+ + "\1\u087f\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u0880\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0881\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\264\1\u0882\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u0883\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0884\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\1\264\1\u0885\2\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u0886\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u0887\1\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0888\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0889\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u088a\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u088b"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\15\264\1\u088c\3\264\1\250\12\0\6\264\1\0\1\264"+ + "\1\u088d\1\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u088e\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u088f\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u0890"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u0891"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0892\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0893\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0686\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0894\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u033d\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u056e\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\3\264\1\u0895\2\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0896\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0897\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0898\2\264\7\0\2\250\16\264\4\0\21\264\61\0"+ + "\1\u0899\155\0\1\u089a\40\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u0666\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\42\0\1\u089b\140\0\1\u089c\176\0"+ + "\1\u089d\117\0\1\u089e\55\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u079d\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\3\264"+ + "\1\u0499\12\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u089f\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u08a0\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\13\264\1\u0480\5\264\1\250\12\0\3\264\1\u08a1"+ + "\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\15\264"+ + "\1\u0372\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u08a2\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0472\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0372\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u08a3\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u08a4\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u08a5\1\u08a6\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\77\0\1\u08a7\40\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\2\264\1\u08a8\16\264\1\250\12\0\3\264\1\u05bc\2\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u05c1\20\264\1\250\12\0\1\264\1\u08a9"+ + "\4\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u08aa\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u08ab\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\6\264\1\u08ac\7\264\4\0\21\264\1\250\12\0\1\u0663"+ + "\5\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u08ad\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u08ae"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u08af\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\13\264"+ + "\1\u0739\5\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u0237\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u08b0\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u08b1\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u05ec\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u08b2\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u08b3\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u08b4\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0472\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u08b5\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u08b6\2\264"+ + "\7\0\2\250\1\u08b7\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u08b8\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u08b9\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u08ba"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u08bb\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u08bc\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u08bd\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u08be"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u08bf\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u08c0\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u08c1\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08c2\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u08c3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\3\264\1\u08c4\2\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u08c5\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\1\264\1\u08c6\4\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u08c7\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u077b\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\76\0\1\u08c8\121\0\1\u08c9\21\0\1\u08ca"+ + "\77\0\1\u08cb\155\0\1\u08cc\141\0\1\u086c\136\0\1\u0452"+ + "\157\0\1\u0452\133\0\1\u08cd\42\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u08ce\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u08cf\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08d0\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\2\264"+ + "\1\u08d1\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u08d2\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u08d3\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u08d4\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u08d5\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\1\u059b\6\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u08d6\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u08d7\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06b4\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u08d8\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\2\264\1\u08d9"+ + "\16\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u04da\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u08da\7\0\2\250\16\264\4\0\21\264"+ + "\13\0\1\u08db\106\0\1\u08dc\15\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u08dd"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u08de\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\1\u08df\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u08e0"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u08e1"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u08e2\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u08e3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\1\u08e4\3\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u08e5\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u08e6\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u08e7\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u08e8\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u08e9\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u08ea\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u07dd\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u08eb\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0857\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08ec\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u08ed"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u08ee"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u08ef\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u08f0\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u08f1\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u08bb\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u033d\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\42\0\1\u08f2\156\0\1\u08f3\136\0\1\u08f4"+ + "\162\0\1\u08f5\116\0\1\u08f6\117\0\1\u08f7\75\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u08f8\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u08f9\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u08fa\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u08fb\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u033d\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\14\264\1\u08fc"+ + "\4\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u08fd\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u08fe\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u08ff\6\264\4\0"+ + "\21\264\75\0\1\u08f6\42\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08a5\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u0900\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\52\0\1\u0901\65\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0902\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0903\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u079c\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\7\264\1\u03cd"+ + "\6\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0801\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0904\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0905\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0906\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0907\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0908\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0909\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u090a\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u057f\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0372\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u077f\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u090b\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u090c\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u01ed\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u08bc\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u090d\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\13\264\1\u090e\5\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u090f\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\11\264"+ + "\1\u0910\4\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\4\264"+ + "\1\u0911\11\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\4\264"+ + "\1\u0912\11\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\1\u0372\20\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0913"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0914\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u0915"+ + "\12\264\4\0\21\264\104\0\1\u06bd\75\0\1\u0509\140\0"+ + "\1\u06bd\136\0\1\u076a\174\0\1\u062f\40\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u0865\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u0916\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0917\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0918"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0919\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u091a\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u091b\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u091c\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\2\264\1\u091d"+ + "\3\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u091e\3\264"+ + "\1\u091f\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0920"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u0757\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0921\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0922\10\264\4\0\21\264\40\0\1\u0923\142\0"+ + "\1\u0924\74\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u0925\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0926\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0927\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\3\264\1\u08c4\2\264\1\0\2\264"+ + "\1\u04aa\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0928\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0929\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\5\264\1\u092a\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u092b\15\264\4\0\21\264\1\250\12\0"+ + "\2\264\1\u05bb\3\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u092c\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u0372"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u092d\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u077f\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u092e\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u092f\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0930\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0931\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0932\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u0933"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0934\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0935\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\60\0\1\u085c\117\0\1\u0936\202\0\1\u0937\74\0"+ + "\1\u0938\200\0\1\u0939\116\0\1\u093a\57\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u093b\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u049b"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\3\264"+ + "\1\u093c\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u093d\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u093e\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u093f\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u0940"+ + "\12\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\1\0\1\u0941\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0942\15\264\4\0"+ + "\21\264\102\0\1\u0943\35\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\3\264\1\u0944\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\264\1\u0945\4\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0946\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0947"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0948"+ + "\4\264\4\0\21\264\1\250\12\0\1\u0949\5\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\7\264\1\u094a\11\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u094b\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\6\264"+ + "\1\u033d\7\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0372\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u094c\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u077f\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u094d"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u094e\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u094f\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0950\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\1\264\1\u0951\4\264\1\0"+ + "\2\264\1\u0952\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u0953\20\264\1\250\12\0\6\264\1\0"+ + "\1\264\1\u0954\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0955\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u0956\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u0957\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\13\264\1\u056f\5\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0958\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\13\264\1\u06b4"+ + "\2\264\4\0\21\264\1\250\12\0\4\264\1\u05bd\1\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u0959"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u056f"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u095a\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\117\0\1\u095b\20\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u095c\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u095d"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u095e\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u095f\15\264\4\0\21\264\53\0\1\u0960\166\0\1\u0961"+ + "\35\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u0962\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264"+ + "\1\u0963\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0964\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u01ed\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\1\264\1\u0965\4\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\3\264\1\u0966\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u0967\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\3\264\1\u0372\12\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0968\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0969\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u096a\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u01ed\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u096b\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u096c\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u096d\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u096e\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u096f\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\103\0\1\u0970\131\0\1\u074d"+ + "\123\0\1\u0971\136\0\1\u0972\120\0\1\u0973\76\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\u0974\3\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0975\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0976\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0977\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u0978\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0979"+ + "\15\264\4\0\21\264\13\0\1\u097a\124\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u077b"+ + "\7\0\2\250\16\264\4\0\21\264\103\0\1\u097b\34\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u097c\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u097d\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u097e\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\16\264\1\u05c3\2\264\1\250"+ + "\12\0\1\264\1\u097f\4\264\1\0\2\264\1\u04aa\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u0980\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0981\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0982\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0983\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\264\1\u0984\14\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u0985\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0969\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0986\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0987\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0988\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0989\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u098a\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u098b\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u098c\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u098d"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u066f\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\11\264\1\u098e\4\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u098f"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0990"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\44\0\1\u0991\126\0"+ + "\1\u0992\104\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0993\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0994\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0372\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\63\0\1\u0995\153\0\1\u0996\40\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0997"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u0576\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0998\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0999"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u099a\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u099b\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u099c\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u07dd"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\1\u0797\5\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\1\264"+ + "\1\u099d\2\264\1\u099e\1\264\1\0\2\264\1\u04aa\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u099f\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\16\264\1\u09a0\2\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u096a\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u09a1\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u09a2\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u09a3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\100\0\1\u09a4\142\0\1\u09a5\75\0\1\u085c"+ + "\200\0\1\u09a6\35\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u09a7\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u09a8\10\264"+ + "\4\0\21\264\1\250\12\0\4\264\1\u09a9\1\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u09aa\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0706\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u06b4\11\264"+ + "\4\0\21\264\102\0\1\u09ab\144\0\1\u09ac\30\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u09ad\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u09ae\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u09af\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u09b0\1\264\7\0\2\250\1\u09b1\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u09b2\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u09b3\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u09b4\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u09b5\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\1\u09b6\5\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0979\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u07dd\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\4\264\1\u09b7\2\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\16\264\1\u09a0"+ + "\2\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u09b8\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u09b9\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u09ba\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u09bb\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\1\264\1\u057b\4\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u099f\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u09bc\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0851\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u09bd\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\4\264\1\u09be\11\264\4\0\21\264"+ + "\16\0\1\u09bf\1\u09c0\3\0\1\u09c1\63\0\1\u09c2\103\0"+ + "\1\u09c3\64\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u05ec\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u09c4\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\60\0\1\u09c5\154\0\1\u09c6\42\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\1\0\1\u09c7"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u09c8\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u09c9"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u09ca\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u08e7\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u09cb\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u09cc\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u09cd\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u09ce\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u09cf\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\1\0\1\u09d0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u09d1\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u08e7\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\42\0\1\u09d2\155\0\1\u09d3\122\0"+ + "\1\u09d4\74\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u09d5\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u09d6\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u09d7\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u09d8\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\106\0\1\u09d9\111\0\1\u09da\57\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\6\264\1\u0824\7\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\14\264\1\u09db\1\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u09dc\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u09dd\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u09de\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u09df"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u09e0\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u09e1\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u09e2"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u09e3\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u081e"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u09e4\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u09e5"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u09e6\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\15\264\1\u06b4"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u09e7\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u05ad\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u056e\15\264\4\0"+ + "\21\264\43\0\1\u09c5\135\0\1\u09e8\173\0\1\u09e9\137\0"+ + "\1\u09ea\125\0\1\u09eb\54\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u09ec\10\264\4\0\21\264\42\0\1\u085c\176\0\1\u09ed"+ + "\52\0\1\u09ee\123\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u09ef\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u09f0\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u09f1\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u09f2\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u06f3\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u09f3\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u09f4\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u09f5\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u09f6\11\264\4\0"+ + "\21\264\15\0\1\u09f7\122\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u09f8"+ + "\15\264\4\0\21\264\24\0\1\u09f9\130\0\1\u09fa\225\0"+ + "\1\u09fb\34\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0"; + + private static final String ZZ_TRANS_PACKED_2 = + "\4\264\7\0\2\250\4\264\1\u0576\11\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u09fc\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u09fd\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u09fe\10\264\4\0\21\264\104\0"+ + "\1\u09ff\132\0\1\u0a00\40\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0a01\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\3\264\1\u099f\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0824\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0a02\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u03ce\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0a03\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\4\264\1\u0673\11\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0a04\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\13\264\1\u07dd\5\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0a05\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\4\264\1\u0a06\11\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0a07"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u04a4"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\102\0\1\u0a08"+ + "\100\0\1\u0a09\134\0\1\u0a0a\141\0\1\u0a0b\75\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u09e6\13\264\4\0\21\264\60\0"+ + "\1\u0a0c\154\0\1\u0a0d\42\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0a0e\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0a0f\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u0a10"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u074f\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0a11\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0a12\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\6\264\1\u08e7\7\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u092c\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\60\0\1\u0a13\57\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0a14\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\105\0\1\u0a15\113\0\1\u0a16"+ + "\177\0\1\u0a17\16\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0a18\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\10\264\1\u06e9"+ + "\5\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0a19\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\62\0\1\u0a1a\157\0\1\u0a1b\35\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0a1c\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0a1d\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\11\264\1\u0a1e\4\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0a1f\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\7\264\1\u0a20\11\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0a21\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u08da\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\106\0\1\u0a22\134\0\1\u085c\107\0\1\u0a23\125\0\1\u0a24"+ + "\111\0\1\u0a25\36\0\1\u0a26\130\0\1\u0a27\74\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0a28\10\264\4\0\21\264\1\250"+ + "\12\0\1\264\1\u0a29\4\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\1\264\1\u070f\1\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\4\264\1\u0a2a\1\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u087e\10\264\4\0\21\264\101\0"+ + "\1\u0a2b\36\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\1\0\1\u0a2c\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\77\0\1\u0a2d\103\0\1\u0a2e\171\0\1\u0a2f\42\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u0a30\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u0a31\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\60\0\1\u0a32\165\0\1\u0a33\31\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0a34\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0a35\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\1\0\1\u0a36\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0a37"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0a38\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0a39\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\102\0\1\u0a3a\117\0\1\u08f2\136\0\1\u0a3b"+ + "\155\0\1\u0a3c\122\0\1\u0a3d\117\0\1\u0a3e\75\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u0824\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\3\264\1\u0a3f\12\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u0a40\15\264\4\0\21\264\102\0\1\u0a41"+ + "\154\0\1\u0a42\100\0\1\u0a43\162\0\1\u08f2\135\0\1\u08f2"+ + "\36\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0a44\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\1\264\1\u067c\1\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\16\0\1\u0a45\5\0\1\u05e4\174\0\1\u0a46\56\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0a47\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0a48\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\123\0\1\u0a49\14\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\1\0\1\u0a4a\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0a4b\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\6\264\1\u0372\7\264"+ + "\4\0\21\264\42\0\1\u0a4c\174\0\1\u0a4d\101\0\1\u0a4e"+ + "\173\0\1\u0a4f\103\0\1\u0a50\76\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0a51\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u090c\10\264\4\0\21\264\41\0\1\u0a52\142\0"+ + "\1\u0a53\177\0\1\u0a54\33\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\13\264\1\u0a55\5\264\106\0\1\u0a56\113\0\1\u0a57"+ + "\55\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0a58\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0824\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\60\0\1\u0a59\76\0\1\u0a5a\120\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0680\7\0"+ + "\2\250\16\264\4\0\21\264\102\0\1\u0a5b\77\0\1\u0a5c"+ + "\177\0\1\u0a5d\134\0\1\u0a5e\135\0\1\u0a5f\42\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u05a0\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\60\0"+ + "\1\u0a60\75\0\1\u09bf\4\0\1\u09c1\63\0\1\u09c2\72\0"+ + "\1\u0a61\75\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0a62\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\106\0\1\u0a63\54\0\1\u0a64\114\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0a65\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\42\0\1\u0a66"+ + "\135\0\1\u0a59\210\0\1\u08f2\41\0\1\u0a67\2\0\1\u0a68"+ + "\4\0\1\u0a69\63\0\1\u0a6a\134\0\1\u09c5\145\0\1\u085c"+ + "\107\0\1\u085c\154\0\1\u0a6b\142\0\1\u0a6c\35\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u06b4\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\40\0"+ + "\1\u0a6d\160\0\1\u0a6e\56\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\2\264\1\u065a\16\264\55\0\1\u0a6f\166\0\1\u0a70"+ + "\76\0\1\u0a71\171\0\1\u0a72\137\0\1\u0a73\104\0\1\u0a74"+ + "\172\0\1\u0a75\104\0\1\u0a76\173\0\1\u0a77\143\0\1\u0a78"+ + "\117\0\1\u0a79\117\0\1\u0a7a\140\0\1\u0a7b\134\0\1\u0a7c"+ + "\156\0\1\u0a7d\123\0\1\u0a7e\155\0\1\u0a7f\153\0\1\u0a80"+ + "\122\0\1\u0a81\161\0\1\u0a82\50\0\1\u0a67\227\0\1\u0a7a"+ + "\107\0\1\u0a83\104\0\1\u0a84\246\0\1\u0a85\63\0\1\u0a86"+ + "\124\0\1\u0a87\161\0\1\u0a88\117\0\1\u0a89\157\0\1\u0a8a"+ + "\153\0\1\u0a8b\122\0\1\u0a8c\140\0\1\u0a8d\117\0\1\u0a8e"+ + "\176\0\1\u085c\116\0\1\u0a8f\137\0\1\u0a7a\163\0\1\u08f2"+ + "\76\0\1\u0a90\154\0\1\u04ec\134\0\1\u0a91\123\0\1\u0a92"+ + "\177\0\1\u0a93\133\0\1\u0a94\123\0\1\u0a95\140\0\1\u0939"+ + "\116\0\1\u0a96\140\0\1\u0a97\203\0\1\u085c\126\0\1\u0972"+ + "\42\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[246048]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_2, 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; + } + + + /* 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; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\2\1\1\0\2\1\1\0\2\1\14\0\1\1"+ + "\5\0\2\1\1\11\4\1\1\11\5\1\1\11\2\1"+ + "\2\11\2\1\4\11\1\1\1\11\1\1\1\11\26\1"+ + "\1\11\2\1\2\11\1\1\5\11\1\1\1\11\2\1"+ + "\1\11\2\1\1\11\1\1\2\11\14\1\1\11\7\1"+ + "\1\11\1\1\1\11\11\1\2\11\2\1\2\11\2\1"+ + "\1\11\6\1\1\11\4\1\1\11\2\1\1\11\10\1"+ + "\1\11\57\1\1\11\5\1\2\11\4\1\2\11\1\1"+ + "\2\11\5\1\3\11\4\1\4\11\1\1\1\11\6\1"+ + "\4\11\1\1\3\11\2\1\1\11\2\1\1\11\1\1"+ + "\1\11\1\1\1\11\5\1\2\11\5\0\1\11\105\1"+ + "\1\11\2\0\1\1\1\0\1\1\1\11\1\0\76\1"+ + "\1\11\2\1\3\0\1\11\12\0\1\11\2\0\1\11"+ + "\16\0\1\1\1\11\2\1\1\0\1\11\52\1\1\11"+ + "\130\1\2\11\3\1\1\0\1\11\1\1\15\0\1\1"+ + "\1\0\1\11\5\0\1\1\4\11\3\1\1\11\1\0"+ + "\1\11\1\0\1\11\4\0\101\1\1\11\1\0\1\1"+ + "\1\0\3\1\1\0\72\1\44\0\1\11\1\1\1\0"+ + "\3\1\1\0\242\1\25\0\2\1\2\11\2\0\44\1"+ + "\1\0\1\11\47\1\1\0\1\11\3\0\1\1\3\0"+ + "\1\1\1\11\11\0\1\11\11\0\1\1\5\0\212\1"+ + "\1\0\17\1\23\0\2\1\2\0\24\1\1\0\30\1"+ + "\37\0\205\1\1\0\15\1\16\0\14\1\1\0\21\1"+ + "\24\0\172\1\1\0\13\1\12\0\4\1\1\0\10\1"+ + "\4\0\1\1\6\0\66\1\1\0\3\1\1\0\22\1"+ + "\1\0\45\1\1\0\13\1\6\0\1\1\1\0\3\1"+ + "\13\0\70\1\2\0\2\1\4\0\16\1\2\0\37\1"+ + "\1\0\12\1\1\11\4\0\1\1\1\11\1\1\2\11"+ + "\5\0\14\1\1\0\45\1\2\0\1\1\4\0\15\1"+ + "\1\0\35\1\1\11\11\1\10\0\21\1\1\0\31\1"+ + "\6\0\10\1\1\0\2\1\1\0\35\1\3\0\1\11"+ + "\2\0\15\1\2\0\25\1\6\0\11\1\1\0\34\1"+ + "\1\0\4\1\2\0\21\1\5\0\6\1\1\0\1\1"+ + "\1\0\27\1\2\0\3\1\2\0\16\1\4\0\6\1"+ + "\2\0\25\1\2\0\2\1\2\0\15\1\3\0\4\1"+ + "\2\0\22\1\5\0\1\1\3\0\10\1\1\0\1\1"+ + "\3\0\4\1\2\0\15\1\4\0\1\1\2\0\10\1"+ + "\1\0\1\1\3\0\3\1\2\0\7\1\6\0\5\1"+ + "\1\0\1\1\3\0\2\1\2\0\6\1\6\0\3\1"+ + "\5\0\2\1\2\0\2\1\1\0\3\1\5\0\2\1"+ + "\3\0\1\1\2\0\2\1\2\0\1\1\5\0\1\1"+ + "\3\0\1\1\2\0\1\1\11\0\1\1\2\0\1\1"+ + "\16\0\1\1\43\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[2711]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to JSPTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + private static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to JSPTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + private static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). + */ + private static final int INTERNAL_IN_HIDDEN_COMMENT = -10; + + /** + * Token type specifying we're in a JSP directive (either include, page + * or taglib). + */ + private static final int INTERNAL_IN_JSP_DIRECTIVE = -11; + + /** + * Token type specifying we're in JavaScript. + */ + static final int INTERNAL_IN_JS = -12; + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -13; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -15; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -16; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -17; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -18; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -19; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -20; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * Token type specifying we're in a Java documentation comment. + */ + private static final int INTERNAL_IN_JAVA_DOCCOMMENT = -(4<<11); + + /** + * Token type specifying we're in Java code. + */ + static final int INTERNAL_IN_JAVA_EXPRESSION = -(5<<11); + + /** + * Token type specifying we're in Java multiline comment. + */ + private static final int INTERNAL_IN_JAVA_MLC = -(6<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * The state JSP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int jspInState; + + /** + * Whether closing markup tags are automatically completed for JSP. + */ + private static boolean completeCloseTags; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public JSPTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + jspInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.PREPROCESSOR: + state = PI; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_HIDDEN_COMMENT: + state = HIDDEN_COMMENT; + break; + case INTERNAL_IN_JSP_DIRECTIVE: + state = JSP_DIRECTIVE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { + // INTERNAL_IN_JAVAxxx - jspInState or + // INTERNAL_IN_CSSxxx - cssPrevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_JAVA_DOCCOMMENT: + state = JAVA_DOCCOMMENT; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_EXPRESSION: + state = JAVA_EXPRESSION; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_MLC: + state = JAVA_MLC; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = Token.NULL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public JSPTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public JSPTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 202) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 66: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 139: break; + case 93: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 140: break; + case 75: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 141: break; + case 23: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 142: break; + case 10: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); + } + case 143: break; + case 62: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 144: break; + case 121: + { start = zzMarkedPos-4; yybegin(HIDDEN_COMMENT); + } + case 145: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 146: break; + case 133: + { addToken(Token.RESERVED_WORD_2); + } + case 147: break; + case 111: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 148: break; + case 108: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 149: break; + case 42: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 150: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 151: break; + case 134: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; yybegin(INTAG_SCRIPT); + } + case 152: break; + case 110: + { addToken(Token.REGEX); + } + case 153: break; + case 43: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 154: break; + case 138: + { int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 155: break; + case 120: + { addToken(Token.FUNCTION); + } + case 156: break; + case 100: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; + } + case 157: break; + case 8: + { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 158: break; + case 37: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 159: break; + case 58: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 160: break; + case 112: + { addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + case 161: break; + case 83: + { if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + case 162: break; + case 78: + { if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 163: break; + case 53: + { addToken(Token.ERROR_CHAR); + } + case 164: break; + case 80: + { /* Skip valid '$' that is not part of template literal expression start */ + } + case 165: break; + case 20: + { /* Allowing JSP expressions, etc. */ + } + case 166: break; + case 26: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); + } + case 167: break; + case 36: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); + } + case 168: break; + case 129: + { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.MARKUP_COMMENT); + } + case 169: break; + case 96: + { /* Skip all escaped chars. */ + } + case 170: break; + case 90: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 171: break; + case 29: + { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 172: break; + case 126: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 173: break; + case 118: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 174: break; + case 67: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 175: break; + case 17: + { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); + } + case 176: break; + case 28: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); + } + case 177: break; + case 76: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 178: break; + case 113: + { varDepths.push(Boolean.TRUE); + } + case 179: break; + case 27: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); + } + case 180: break; + case 55: + { addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ + } + case 181: break; + case 7: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 182: break; + case 98: + { /* Invalid latin-1 character \xXX */ validJSString = false; + } + case 183: break; + case 25: + { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 184: break; + case 38: + { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 185: break; + case 124: + { addToken(Token.COMMENT_MULTILINE); + } + case 186: break; + case 48: + { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 187: break; + case 119: + { start = zzMarkedPos-3; yybegin(JAVA_DOCCOMMENT); + } + case 188: break; + case 87: + { start = zzMarkedPos-2; yybegin(PI); + } + case 189: break; + case 135: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 190: break; + case 63: + { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 191: break; + case 9: + { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 192: break; + case 84: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-1); //yypushback(count-1); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 193: break; + case 74: + { /* Skip escaped chars. */ + } + case 194: break; + case 97: + { /* Invalid Unicode character \\uXXXX */ validJSString = false; + } + case 195: break; + case 132: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-5,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; cssPrevState = zzLexicalState; yybegin(INTAG_STYLE); + } + case 196: break; + case 101: + { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); + } + case 197: break; + case 88: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); + } + case 198: break; + case 99: + { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 199: break; + case 85: + { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); + } + case 200: break; + case 31: + { addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 201: break; + case 40: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 202: break; + case 45: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; + } + case 203: break; + case 12: + { addToken(Token.OPERATOR); + } + case 204: break; + case 69: + { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); + } + case 205: break; + case 49: + { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 206: break; + case 122: + { start = zzMarkedPos-4; yybegin(COMMENT); + } + case 207: break; + case 116: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); + } + case 208: break; + case 109: + { addToken(Token.VARIABLE); + } + case 209: break; + case 56: + { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 210: break; + case 104: + { start = zzMarkedPos-2; yybegin(JAVA_MLC); + } + case 211: break; + case 81: + { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 212: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 213: break; + case 127: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 214: break; + case 24: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); + } + case 215: break; + case 103: + { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 216: break; + case 128: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 217: break; + case 65: + { addToken(Token.SEPARATOR); yybegin(CSS); + } + case 218: break; + case 137: + { yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 219: break; + case 32: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 220: break; + case 46: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; + } + case 221: break; + case 73: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 222: break; + case 79: + { if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 223: break; + case 64: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 224: break; + case 52: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 225: break; + case 41: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 226: break; + case 115: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JSP_DIRECTIVE); + } + case 227: break; + case 33: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 228: break; + case 131: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 229: break; + case 92: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 230: break; + case 95: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 231: break; + case 71: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 232: break; + case 106: + { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 233: break; + case 51: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; + } + case 234: break; + case 50: + { addToken(Token.ANNOTATION); + } + case 235: break; + case 30: + { addToken(Token.ERROR_IDENTIFIER); + } + case 236: break; + case 68: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 237: break; + case 123: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 238: break; + case 6: + { addToken(Token.MARKUP_ENTITY_REFERENCE); + } + case 239: break; + case 125: + { addToken(Token.LITERAL_BOOLEAN); + } + case 240: break; + case 18: + { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); + } + case 241: break; + case 3: + { addNullToken(); return firstToken; + } + case 242: break; + case 57: + { addEndToken(INTERNAL_CSS); return firstToken; + } + case 243: break; + case 136: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 244: break; + case 59: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 245: break; + case 54: + { addToken(Token.RESERVED_WORD); + } + case 246: break; + case 105: + { addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; yybegin(jspInState); + } + case 247: break; + case 13: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 248: break; + case 107: + { addToken(Token.LITERAL_CHAR); + } + case 249: break; + case 16: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 250: break; + case 60: + { addToken(Token.DATA_TYPE); + } + case 251: break; + case 47: + { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 252: break; + case 35: + { addToken(Token.SEPARATOR); + } + case 253: break; + case 114: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-2); //yypushback(count-2); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 254: break; + case 72: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 255: break; + case 70: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 256: break; + case 19: + { addToken(Token.MARKUP_TAG_NAME); + } + case 257: break; + case 11: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 258: break; + case 130: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; + } + case 259: break; + case 91: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 260: break; + case 39: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 261: break; + case 94: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 262: break; + case 14: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 263: break; + case 117: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 264: break; + case 102: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 265: break; + case 77: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 266: break; + case 15: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 267: break; + case 34: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 268: break; + case 86: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 269: break; + case 89: + { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); + } + case 270: break; + case 21: + { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); + } + case 271: break; + case 22: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 272: break; + case 44: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 273: break; + case 82: + { // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 274: break; + case 61: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 275: break; + case 1: + { + } + case 276: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INATTR_SINGLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; + } + case 2712: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 2713: break; + case JAVA_EXPRESSION: { + addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 2714: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 2715: break; + case HIDDEN_COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; + } + case 2716: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 2717: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 2718: break; + case JAVA_DOCCOMMENT: { + yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; + } + case 2719: break; + case INTAG_SCRIPT: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; + } + case 2720: break; + case JS_TEMPLATE_LITERAL_EXPR: { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 2721: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 2722: break; + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 2723: break; + case CSS: { + addEndToken(INTERNAL_CSS); return firstToken; + } + case 2724: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 2725: break; + case JSP_DIRECTIVE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_IN_JSP_DIRECTIVE); return firstToken; + } + case 2726: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 2727: break; + case INATTR_DOUBLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; + } + case 2728: break; + case PI: { + addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 2729: break; + case JAVASCRIPT: { + addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 2730: break; + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 2731: break; + case INTAG_CHECK_TAG_NAME: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 2732: break; + case INATTR_SINGLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; + } + case 2733: break; + case DTD: { + addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 2734: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 2735: break; + case INATTR_DOUBLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; + } + case 2736: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; + } + case 2737: break; + case JS_TEMPLATE_LITERAL: { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 2738: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 2739: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; + } + case 2740: break; + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 2741: break; + case JAVA_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; + } + case 2742: break; + case INTAG_STYLE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; + } + case 2743: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex new file mode 100644 index 0000000..5da9b82 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex @@ -0,0 +1,990 @@ +/* + * 02/05/2012 + * + * JavaScriptTokenMaker.java - Parses a document into JavaScript tokens. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for JavaScript files. Its states could be simplified, but are + * kept the way they are to keep a degree of similarity (i.e. copy/paste) + * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in + * performance.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated JavaScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class JavaScriptTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -9; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + private static final int INTERNAL_E4X = -14; + + private static final int INTERNAL_E4X_INTAG = -15; + + private static final int INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION = -16; + + private static final int INTERNAL_IN_E4X_COMMENT = -17; + + private static final int INTERNAL_E4X_DTD = -18; + + private static final int INTERNAL_E4X_DTD_INTERNAL = -19; + + private static final int INTERNAL_E4X_ATTR_SINGLE = -20; + + private static final int INTERNAL_E4X_ATTR_DOUBLE = -21; + + private static final int INTERNAL_E4X_MARKUP_CDATA = -22; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Whether we're in an internal DTD. Only valid if in an e4x DTD. + */ + private boolean e4x_inInternalDtd; + + /** + * The previous e4x state. Only valid if in an e4x state. + */ + private int e4x_prevState; + + /** + * The version of JavaScript being highlighted. + */ + private static String jsVersion; + + /** + * Whether e4x is being highlighted. + */ + private static boolean e4xSupported; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on E4X tokens. + */ + private static final int LANG_INDEX_E4X = 1; + + private Stack varDepths; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public JavaScriptTokenMaker() { + super(); + } + + + static { + jsVersion = "1.7"; // Many folks using JS tend to be bleeding edge + e4xSupported = true; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes} "standard" token type for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + return TokenTypes.COMMENT_DOCUMENTATION; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + return TokenTypes.LITERAL_BACKQUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + return TokenTypes.ERROR_STRING_DOUBLE; + } + return type; + } + + + /** + * Returns the JavaScript version being highlighted. + * + * @return Supported JavaScript version. + * @see #isJavaScriptCompatible(String) + */ + public static String getJavaScriptVersion() { + return jsVersion; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + e4x_prevState = YYINITIAL; + e4x_inInternalDtd = false; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + start = text.offset; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + case INTERNAL_E4X: + state = E4X; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_INTAG: + state = E4X_INTAG; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION: + state = E4X_PI; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD: + state = E4X_DTD; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD_INTERNAL: + state = E4X_DTD; + e4x_inInternalDtd = true; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_SINGLE: + state = E4X_INATTR_SINGLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_DOUBLE: + state = E4X_INATTR_DOUBLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_CDATA: + state = E4X_CDATA; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_E4X_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_E4X_COMMENT: + state = E4X_COMMENT; + break; + } + e4x_prevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_E4X; + } + else { // Shouldn't happen + state = Token.NULL; + } + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether e4x is being highlighted. + * + * @return Whether e4x is being highlighted. + * @see #setE4xSupported(boolean) + */ + public static boolean isE4xSupported() { + return e4xSupported; + } + + + /** + * Returns whether features for a specific JS version should be honored + * while highlighting. + * + * @param version JavaScript version required + * @return Whether the JavaScript version is the same or greater than + * version required. + */ + public static boolean isJavaScriptCompatible(String version) { + return jsVersion.compareTo(version) >= 0; + } + + + /** + * Sets whether e4x should be highlighted. A repaint should be forced on + * all RSyntaxTextAreas editing JavaScript if this property + * is changed to see the difference. + * + * @param supported Whether e4x should be highlighted. + * @see #isE4xSupported() + */ + public static void setE4xSupported(boolean supported) { + e4xSupported = supported; + } + + + /** + * Set the supported JavaScript version because some keywords were + * introduced on or after this version. + * + * @param javaScriptVersion The version of JavaScript to support, such as + * "1.5" or "1.6". + * @see #isJavaScriptCompatible(String) + * @see #getJavaScriptVersion() + */ + public static void setJavaScriptVersion(String javaScriptVersion) { + jsVersion = javaScriptVersion; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrDigit = ({Letter}|{Digit}) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_DocCommentBegin = "/**" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) +JS_E4xAttribute = ("@"{Letter}{LetterOrDigit}*) + +JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| + "callback"|"classdesc"|"constant"|"constructor"|"constructs"| + "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| + "example"|"exports"|"external"|"file"|"fires"|"global"| + "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| + "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| + "name"|"namespace"|"param"|"private"|"property"|"protected"| + "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| + "static"|"summary"|"this"|"throws"|"todo"| + "type"|"typedef"|"variation"|"version") +JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") +JS_TemplateLiteralExprStart = ("${") + +e4x_NameStartChar = ([\:A-Z_a-z]) +e4x_NameChar = ({e4x_NameStartChar}|[\-\.0-9]) +e4x_TagName = ({e4x_NameStartChar}{e4x_NameChar}*) +e4x_Identifier = ([^ \t\n<&;]+) +e4x_EndXml = ([;]) +e4x_EntityReference = ([&][^; \t]*[;]?) +e4x_InTagIdentifier = ([^ \t\n\"\'=\/>]+) +e4x_CDataBegin = ("") + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_DOCCOMMENT +%state JS_EOL_COMMENT +%state E4X +%state E4X_COMMENT +%state E4X_PI +%state E4X_DTD +%state E4X_INTAG +%state E4X_INATTR_DOUBLE +%state E4X_INATTR_SINGLE +%state E4X_CDATA +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR + +%% + + { + + // ECMA 3+ keywords. + "break" | + "continue" | + "delete" | + "else" | + "for" | + "function" | + "if" | + "in" | + "new" | + "this" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //e4X + "each" {if(e4xSupported){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + // e4x miscellaneous + {JS_E4xAttribute} { addToken(isE4xSupported() ? Token.MARKUP_TAG_ATTRIBUTE : Token.ERROR_IDENTIFIER); } + + // Reserved (but not yet used) ECMA keywords. + "abstract" { addToken(Token.RESERVED_WORD); } + "boolean" { addToken(Token.DATA_TYPE); } + "byte" { addToken(Token.DATA_TYPE); } + "case" { addToken(Token.RESERVED_WORD); } + "catch" { addToken(Token.RESERVED_WORD); } + "char" { addToken(Token.DATA_TYPE); } + "class" { addToken(Token.RESERVED_WORD); } + "const" { addToken(Token.RESERVED_WORD); } + "debugger" { addToken(Token.RESERVED_WORD); } + "default" { addToken(Token.RESERVED_WORD); } + "do" { addToken(Token.RESERVED_WORD); } + "double" { addToken(Token.DATA_TYPE); } + "enum" { addToken(Token.RESERVED_WORD); } + "export" { addToken(Token.RESERVED_WORD); } + "extends" { addToken(Token.RESERVED_WORD); } + "final" { addToken(Token.RESERVED_WORD); } + "finally" { addToken(Token.RESERVED_WORD); } + "float" { addToken(Token.DATA_TYPE); } + "goto" { addToken(Token.RESERVED_WORD); } + "implements" { addToken(Token.RESERVED_WORD); } + "import" { addToken(Token.RESERVED_WORD); } + "instanceof" { addToken(Token.RESERVED_WORD); } + "int" { addToken(Token.DATA_TYPE); } + "interface" { addToken(Token.RESERVED_WORD); } + "long" { addToken(Token.DATA_TYPE); } + "native" { addToken(Token.RESERVED_WORD); } + "package" { addToken(Token.RESERVED_WORD); } + "private" { addToken(Token.RESERVED_WORD); } + "protected" { addToken(Token.RESERVED_WORD); } + "public" { addToken(Token.RESERVED_WORD); } + "short" { addToken(Token.DATA_TYPE); } + "static" { addToken(Token.RESERVED_WORD); } + "super" { addToken(Token.RESERVED_WORD); } + "switch" { addToken(Token.RESERVED_WORD); } + "synchronized" { addToken(Token.RESERVED_WORD); } + "throw" { addToken(Token.RESERVED_WORD); } + "throws" { addToken(Token.RESERVED_WORD); } + "transient" { addToken(Token.RESERVED_WORD); } + "try" { addToken(Token.RESERVED_WORD); } + "volatile" { addToken(Token.RESERVED_WORD); } + "null" { addToken(Token.RESERVED_WORD); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + [\+]?"="{Whitespace}*"<" { + int start = zzStartRead; + int operatorLen = yycharat(0)=='+' ? 2 : 1; + int yylen = yylength(); // Cache before first addToken() invalidates it + //System.out.println("'" + yytext() + "': " + yylength() + ", " + (operatorLen+1)); + addToken(zzStartRead,zzStartRead+operatorLen-1, Token.OPERATOR); + if (yylen>operatorLen+1) { + //System.out.println((start+operatorLen) + ", " + (zzMarkedPos-2)); + addToken(start+operatorLen,zzMarkedPos-2, Token.WHITESPACE); + } + zzStartRead = zzCurrentPos = zzMarkedPos = zzMarkedPos - 1; + if (isE4xSupported()) { + // Scanning will continue with "<" as markup tag start + yybegin(E4X, LANG_INDEX_E4X); + } + // Found e4x (or syntax error) but option not enabled; + // Scanning will continue at "<" as operator + } + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} + + { + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(e4x_prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_E4X_COMMENT - e4x_prevState); return firstToken; } +} + + { + [^\n\?]+ {} + "?>" { yybegin(E4X); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); addEndToken(INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n\[\]<>]+ {} + "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } +} + + { + [^\n\?]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n>]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ } + "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } + <> { addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ } + "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { yybegin(AS); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } + <> { addToken(start,zzStartRead-1, INTERNAL_INTAG_SCRIPT); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + [^\]]+ {} + {CDataEnd} { int temp=zzStartRead; yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.MARKUP_CDATA); addToken(temp,zzMarkedPos-1, Token.MARKUP_CDATA_DELIMITER); } + "]" {} + <> { addToken(start,zzStartRead-1, Token.MARKUP_CDATA); return firstToken; } +} + + { + + {AS_EndScriptTag} { + int origStart = zzStartRead; + String text = yytext(); + int tagNameEnd = text.length() - 2; // "-1" is '>' + while (Character.isWhitespace(text.charAt(tagNameEnd))) { + tagNameEnd--; + } + int tagNameLen = tagNameEnd - 1; + yybegin(YYINITIAL); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(origStart+2,origStart+2+tagNameLen-1, Token.MARKUP_TAG_NAME); + if (tagNameEnd> { addEndToken(INTERNAL_IN_AS); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_AS_MLC); return firstToken; } + {AS_MLCEnd} { yybegin(AS); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_AS_MLC); return firstToken; } + +} + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_AS); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java new file mode 100644 index 0000000..5d33214 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java @@ -0,0 +1,2726 @@ +/* The following code was generated by JFlex 1.4.1 on 6/18/15 6:41 PM */ + +/* + * 01/21/2011 + * + * MxmlTokenMaker.java - Generates tokens for MXML syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for MXML. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated MXMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class MxmlTokenMaker extends AbstractMarkupTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int AS_EOL_COMMENT = 13; + public static final int AS_MLC = 12; + public static final int INTAG_SCRIPT = 7; + public static final int INATTR_DOUBLE_SCRIPT = 8; + public static final int CDATA = 10; + public static final int INATTR_SINGLE_SCRIPT = 9; + public static final int DTD = 3; + public static final int INATTR_SINGLE = 6; + public static final int INATTR_DOUBLE = 5; + public static final int YYINITIAL = 0; + public static final int AS = 11; + public static final int INTAG = 4; + public static final int COMMENT = 1; + public static final int PI = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\12\1\10\1\0\1\7\1\36\22\0\1\105\1\16\1\32"+ + "\1\37\1\40\1\63\1\13\1\31\2\73\1\42\1\51\1\61\1\50"+ + "\1\6\1\41\1\3\3\27\4\27\2\2\1\5\1\14\1\11\1\15"+ + "\1\25\1\64\1\72\1\22\1\26\1\20\1\21\1\47\1\45\1\1"+ + "\1\122\1\121\1\1\1\110\1\44\1\111\1\112\1\113\1\116\1\123"+ + "\1\120\1\66\1\23\1\117\1\115\1\1\1\43\2\1\1\17\1\30"+ + "\1\24\1\62\1\4\1\0\1\55\1\35\1\67\1\76\1\54\1\46"+ + "\1\106\1\74\1\70\1\114\1\77\1\56\1\102\1\34\1\100\1\71"+ + "\1\103\1\53\1\57\1\52\1\33\1\107\1\75\1\104\1\101\1\1"+ + "\1\60\1\62\1\60\1\65\uff81\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 = + "\5\0\2\1\1\0\2\1\4\0\2\2\1\3\1\4"+ + "\1\5\1\6\1\1\1\7\5\1\1\10\2\1\1\11"+ + "\1\12\2\13\1\14\1\15\1\16\1\17\1\20\1\1"+ + "\1\21\1\1\1\22\1\23\1\24\1\25\2\1\1\26"+ + "\1\2\2\27\1\2\1\30\2\14\1\2\1\14\1\31"+ + "\3\2\1\31\1\14\1\2\1\32\1\33\3\2\2\26"+ + "\1\14\3\2\2\14\25\2\1\1\1\34\5\1\1\35"+ + "\3\1\1\36\1\37\1\4\1\40\1\6\5\0\1\41"+ + "\1\0\1\26\1\42\2\43\1\27\2\42\1\44\1\42"+ + "\3\0\3\2\1\0\1\14\1\2\1\32\1\45\2\33"+ + "\1\46\5\2\1\47\3\2\1\26\1\50\1\51\21\2"+ + "\1\47\20\2\2\47\12\2\1\47\2\2\1\47\11\2"+ + "\1\52\12\0\1\53\2\0\1\54\2\0\1\55\1\26"+ + "\1\43\1\0\2\44\3\0\3\2\1\56\1\2\2\32"+ + "\1\33\1\57\1\33\6\2\1\47\4\2\1\26\1\0"+ + "\1\60\5\2\1\47\23\2\1\47\10\2\1\60\24\2"+ + "\1\47\1\2\1\60\7\2\11\0\1\61\2\0\1\62"+ + "\1\26\3\0\2\2\1\32\1\63\1\32\1\33\10\2"+ + "\1\26\1\64\6\2\1\0\1\65\13\2\1\66\3\2"+ + "\1\66\36\2\2\0\1\67\2\0\1\70\3\0\1\26"+ + "\2\0\1\2\1\32\1\33\7\2\1\26\5\2\1\47"+ + "\1\0\26\2\1\66\13\2\5\0\1\26\2\0\1\2"+ + "\1\32\1\33\6\2\1\26\5\2\1\0\30\2\3\0"+ + "\4\2\1\26\2\2\1\0\23\2\3\0\1\2\1\66"+ + "\1\2\1\47\21\2\1\71\1\0\1\72\4\2\1\66"+ + "\40\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[624]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\124\0\250\0\374\0\u0150\0\u01a4\0\u01f8\0\u024c"+ + "\0\u02a0\0\u02f4\0\u0348\0\u039c\0\u03f0\0\u0444\0\u0498\0\u04ec"+ + "\0\u0540\0\u0594\0\u05e8\0\u063c\0\u0690\0\u0540\0\u06e4\0\u0738"+ + "\0\u078c\0\u07e0\0\u0834\0\u0540\0\u0888\0\u08dc\0\u0540\0\u0540"+ + "\0\u0930\0\u0984\0\u0540\0\u0540\0\u0540\0\u0540\0\u09d8\0\u0a2c"+ + "\0\u0540\0\u0a80\0\u0540\0\u0540\0\u0540\0\u0540\0\u0ad4\0\u0b28"+ + "\0\u0b7c\0\u0bd0\0\u0c24\0\u0c78\0\u0ccc\0\u0540\0\u0d20\0\u0d74"+ + "\0\u0540\0\u0dc8\0\u0540\0\u0e1c\0\u0e70\0\u0ec4\0\u0f18\0\u0f6c"+ + "\0\u0fc0\0\u1014\0\u1068\0\u10bc\0\u1110\0\u1164\0\u0540\0\u11b8"+ + "\0\u120c\0\u1260\0\u12b4\0\u1308\0\u135c\0\u13b0\0\u1404\0\u1458"+ + "\0\u14ac\0\u1500\0\u1554\0\u15a8\0\u15fc\0\u1650\0\u16a4\0\u16f8"+ + "\0\u174c\0\u17a0\0\u17f4\0\u1848\0\u189c\0\u18f0\0\u1944\0\u1998"+ + "\0\u19ec\0\u1a40\0\u1a94\0\u1ae8\0\u0540\0\u1b3c\0\u1b90\0\u1be4"+ + "\0\u1c38\0\u1c8c\0\u0540\0\u1ce0\0\u1d34\0\u1d88\0\u1ddc\0\u1e30"+ + "\0\u1e84\0\u0540\0\u0540\0\u1ed8\0\u1f2c\0\u1f80\0\u1fd4\0\u2028"+ + "\0\u0540\0\u207c\0\u20d0\0\u2124\0\u2178\0\u2124\0\u2124\0\u21cc"+ + "\0\u2220\0\u2274\0\u22c8\0\u0dc8\0\u231c\0\u2370\0\u23c4\0\u2418"+ + "\0\u246c\0\u24c0\0\u2514\0\u2568\0\u25bc\0\u0540\0\u2610\0\u2664"+ + "\0\u0540\0\u26b8\0\u270c\0\u2760\0\u27b4\0\u2808\0\u285c\0\u28b0"+ + "\0\u2904\0\u2958\0\u29ac\0\u0540\0\u2a00\0\u2a54\0\u2aa8\0\u2afc"+ + "\0\u2b50\0\u2ba4\0\u2bf8\0\u2c4c\0\u2ca0\0\u2cf4\0\u2d48\0\u2d9c"+ + "\0\u2df0\0\u2e44\0\u2e98\0\u2eec\0\u2f40\0\u2f94\0\u0bd0\0\u2fe8"+ + "\0\u303c\0\u3090\0\u30e4\0\u3138\0\u318c\0\u31e0\0\u3234\0\u3288"+ + "\0\u32dc\0\u3330\0\u3384\0\u33d8\0\u342c\0\u3480\0\u34d4\0\u3528"+ + "\0\u357c\0\u35d0\0\u3624\0\u3678\0\u36cc\0\u3720\0\u3774\0\u37c8"+ + "\0\u381c\0\u3870\0\u38c4\0\u3918\0\u396c\0\u39c0\0\u3a14\0\u3a68"+ + "\0\u3abc\0\u3b10\0\u3b64\0\u3bb8\0\u3c0c\0\u3c60\0\u3cb4\0\u3d08"+ + "\0\u0540\0\u3d5c\0\u3db0\0\u3e04\0\u3e58\0\u3eac\0\u3f00\0\u3f54"+ + "\0\u3fa8\0\u3ffc\0\u4050\0\u40a4\0\u40f8\0\u414c\0\u0540\0\u41a0"+ + "\0\u41f4\0\u0540\0\u4248\0\u429c\0\u42f0\0\u2124\0\u4344\0\u4398"+ + "\0\u43ec\0\u4440\0\u4494\0\u44e8\0\u453c\0\u0540\0\u4590\0\u45e4"+ + "\0\u4638\0\u468c\0\u0540\0\u46e0\0\u4734\0\u4788\0\u47dc\0\u4830"+ + "\0\u4884\0\u48d8\0\u492c\0\u4980\0\u49d4\0\u4a28\0\u4a7c\0\u4ad0"+ + "\0\u4b24\0\u4b78\0\u4bcc\0\u4c20\0\u4c74\0\u4cc8\0\u4d1c\0\u4d70"+ + "\0\u4dc4\0\u4e18\0\u4e6c\0\u4ec0\0\u4f14\0\u4f68\0\u4fbc\0\u5010"+ + "\0\u5064\0\u50b8\0\u510c\0\u5160\0\u51b4\0\u5208\0\u525c\0\u52b0"+ + "\0\u5304\0\u5358\0\u53ac\0\u5400\0\u5454\0\u54a8\0\u54fc\0\u5550"+ + "\0\u55a4\0\u55f8\0\u564c\0\u56a0\0\u56f4\0\u5748\0\u579c\0\u57f0"+ + "\0\u5844\0\u5898\0\u58ec\0\u5940\0\u5994\0\u59e8\0\u5a3c\0\u5a90"+ + "\0\u5ae4\0\u5b38\0\u5b8c\0\u5be0\0\u5c34\0\u5c88\0\u5cdc\0\u5d30"+ + "\0\u5d84\0\u5dd8\0\u5e2c\0\u0bd0\0\u5e80\0\u5ed4\0\u5f28\0\u5f7c"+ + "\0\u5fd0\0\u6024\0\u6078\0\u60cc\0\u6120\0\u6174\0\u61c8\0\u621c"+ + "\0\u6270\0\u62c4\0\u6318\0\u636c\0\u0540\0\u63c0\0\u6414\0\u6468"+ + "\0\u64bc\0\u6510\0\u6564\0\u65b8\0\u660c\0\u6660\0\u66b4\0\u0540"+ + "\0\u6708\0\u675c\0\u67b0\0\u6804\0\u6858\0\u68ac\0\u6900\0\u6954"+ + "\0\u69a8\0\u69fc\0\u6a50\0\u0540\0\u6aa4\0\u6af8\0\u6b4c\0\u6ba0"+ + "\0\u6bf4\0\u6c48\0\u6c9c\0\u0bd0\0\u6cf0\0\u6d44\0\u6d98\0\u6dec"+ + "\0\u6e40\0\u6e94\0\u6ee8\0\u6f3c\0\u6f90\0\u6fe4\0\u7038\0\u0bd0"+ + "\0\u708c\0\u70e0\0\u7134\0\u7188\0\u71dc\0\u7230\0\u7284\0\u72d8"+ + "\0\u732c\0\u7380\0\u73d4\0\u7428\0\u747c\0\u74d0\0\u7524\0\u7578"+ + "\0\u75cc\0\u7620\0\u7674\0\u76c8\0\u771c\0\u7770\0\u77c4\0\u7818"+ + "\0\u786c\0\u78c0\0\u7914\0\u7968\0\u79bc\0\u7a10\0\u7a64\0\u7ab8"+ + "\0\u7b0c\0\u7b60\0\u7bb4\0\u7c08\0\u7c5c\0\u7cb0\0\u7d04\0\u7d58"+ + "\0\u7dac\0\u7e00\0\u6468\0\u7e54\0\u7ea8\0\u7efc\0\u7f50\0\u7fa4"+ + "\0\u7ff8\0\u804c\0\u80a0\0\u80f4\0\u8148\0\u819c\0\u81f0\0\u8244"+ + "\0\u8298\0\u82ec\0\u8340\0\u8394\0\u83e8\0\u843c\0\u8490\0\u84e4"+ + "\0\u8538\0\u858c\0\u85e0\0\u8634\0\u8688\0\u86dc\0\u8730\0\u8784"+ + "\0\u87d8\0\u882c\0\u8880\0\u88d4\0\u8928\0\u897c\0\u89d0\0\u8a24"+ + "\0\u8a78\0\u8acc\0\u8b20\0\u8b74\0\u8bc8\0\u8c1c\0\u8c70\0\u8cc4"+ + "\0\u8d18\0\u8d6c\0\u8dc0\0\u8e14\0\u8e68\0\u8ebc\0\u8f10\0\u8f64"+ + "\0\u8fb8\0\u900c\0\u9060\0\u7c5c\0\u90b4\0\u7d58\0\u9108\0\u915c"+ + "\0\u91b0\0\u9204\0\u9258\0\u92ac\0\u9300\0\u9354\0\u93a8\0\u93fc"+ + "\0\u9450\0\u94a4\0\u94f8\0\u954c\0\u95a0\0\u95f4\0\u9648\0\u969c"+ + "\0\u96f0\0\u9744\0\u9798\0\u97ec\0\u9840\0\u9894\0\u98e8\0\u993c"+ + "\0\u9990\0\u99e4\0\u9a38\0\u9a8c\0\u9ae0\0\u9b34\0\u9b88\0\u9bdc"+ + "\0\u9c30\0\u9c84\0\u9cd8\0\u9d2c\0\u9d80\0\u9dd4\0\u9e28\0\u9e7c"+ + "\0\u9ed0\0\u9f24\0\u9f78\0\u9fcc\0\ua020\0\ua074\0\ua0c8\0\ua11c"+ + "\0\ua170\0\ua1c4\0\ua218\0\ua26c\0\ua2c0\0\ua314\0\ua368\0\ua3bc"+ + "\0\ua410\0\ua464\0\ua4b8\0\ua50c\0\ua560\0\ua5b4\0\ua608\0\ua65c"+ + "\0\ua6b0\0\ua704\0\ua758\0\ua7ac\0\ua800\0\ua854\0\ua8a8\0\ua8fc"+ + "\0\ua950\0\ua9a4\0\ua9f8\0\uaa4c\0\u0b7c\0\uaaa0\0\u0540\0\uaaf4"+ + "\0\uab48\0\uab9c\0\uabf0\0\uac44\0\uac98\0\uacec\0\uad40\0\uad94"+ + "\0\uade8\0\uae3c\0\uae90\0\uaee4\0\uaf38\0\uaf8c\0\uafe0\0\ub034"+ + "\0\u0540\0\ub088\0\u0540\0\ub0dc\0\ub130\0\ub184\0\ub1d8\0\ub22c"+ + "\0\ub280\0\ub2d4\0\ub328\0\ub37c\0\ub3d0\0\ub424\0\ub478\0\ub4cc"+ + "\0\ub520\0\ub574\0\ub5c8\0\ub61c\0\ub670\0\ub6c4\0\ub718\0\ub76c"+ + "\0\ub7c0\0\ub814\0\ub868\0\ub8bc\0\ub910\0\ub964\0\ub9b8\0\uba0c"+ + "\0\uba60\0\ubab4\0\ubb08\0\ubb5c\0\ubbb0\0\ubc04\0\ubc58\0\ubcac"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[624]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\7\17\1\20\1\21\1\22\1\23\1\24\71\17\1\23"+ + "\16\17\10\25\1\26\35\25\1\27\1\25\1\30\23\25"+ + "\1\31\1\32\26\25\10\33\1\34\53\33\1\35\37\33"+ + "\10\36\1\37\14\36\1\40\76\36\7\41\1\42\1\0"+ + "\1\41\1\23\2\41\1\43\7\41\1\44\3\41\1\45"+ + "\1\46\6\41\1\47\43\41\1\23\16\41\32\50\1\51"+ + "\71\50\31\52\1\51\72\52\7\41\1\42\1\0\1\41"+ + "\1\23\2\41\1\43\7\41\1\53\3\41\1\54\1\55"+ + "\6\41\1\47\43\41\1\23\16\41\32\50\1\56\71\50"+ + "\31\52\1\56\72\52\24\57\1\60\77\57\1\61\1\62"+ + "\1\63\1\64\1\62\1\43\1\65\1\23\1\66\1\67"+ + "\1\23\1\70\1\71\2\72\1\73\1\74\1\75\1\76"+ + "\1\62\1\77\1\100\1\101\1\63\1\61\1\102\1\103"+ + "\1\104\1\105\1\106\1\107\1\110\1\62\1\111\1\72"+ + "\1\112\1\62\1\113\1\114\1\62\1\115\1\116\1\117"+ + "\1\120\1\121\1\122\1\123\1\124\1\73\1\71\2\72"+ + "\2\43\1\125\1\126\1\127\1\130\1\61\1\73\1\62"+ + "\1\131\1\132\1\62\1\133\1\62\1\134\2\62\1\23"+ + "\1\135\1\136\1\137\1\140\1\141\1\142\1\62\1\143"+ + "\6\62\10\144\1\145\31\144\1\146\3\144\1\147\25\144"+ + "\1\150\1\151\26\144\10\152\1\153\35\152\1\154\25\152"+ + "\1\155\1\156\26\152\10\17\4\0\71\17\1\0\25\17"+ + "\1\20\2\0\1\23\1\0\71\17\1\23\16\17\125\0"+ + "\1\157\3\0\1\157\10\0\1\160\1\0\4\157\2\0"+ + "\1\157\4\0\3\157\3\0\1\161\1\0\5\157\2\0"+ + "\6\157\4\0\1\162\1\0\4\157\2\0\11\157\1\0"+ + "\16\157\7\0\1\23\2\0\1\23\72\0\1\23\16\0"+ + "\12\24\1\0\1\24\1\163\70\24\1\0\16\24\10\25"+ + "\1\0\35\25\1\0\1\25\1\0\23\25\2\0\26\25"+ + "\52\0\1\164\15\0\1\165\103\0\1\166\125\0\1\167"+ + "\146\0\1\170\26\0\10\33\1\0\53\33\1\0\37\33"+ + "\25\0\1\171\76\0\10\36\1\0\14\36\1\0\76\36"+ + "\10\41\1\0\1\41\1\0\2\41\1\0\7\41\1\0"+ + "\3\41\2\0\6\41\1\0\43\41\1\0\25\41\1\42"+ + "\1\0\1\41\1\23\2\41\1\0\7\41\1\0\3\41"+ + "\2\0\6\41\1\0\43\41\1\23\16\41\25\0\1\44"+ + "\76\0\32\50\1\0\71\50\31\52\1\0\72\52\24\57"+ + "\1\0\77\57\24\0\1\172\77\0\5\61\13\0\4\61"+ + "\2\0\3\61\2\0\3\61\1\0\2\61\2\0\5\61"+ + "\2\0\6\61\6\0\5\61\1\0\11\61\1\0\17\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\2\174\2\63"+ + "\1\174\1\0\1\175\11\0\1\174\1\176\2\174\2\0"+ + "\1\174\1\63\1\174\2\0\3\174\1\0\2\174\2\0"+ + "\1\174\1\177\2\176\1\200\2\0\2\174\1\200\1\174"+ + "\1\177\1\174\6\0\5\174\1\0\2\174\1\176\6\174"+ + "\1\0\20\174\1\201\1\202\1\174\1\0\1\175\11\0"+ + "\1\174\1\176\2\174\2\0\1\174\1\202\1\174\2\0"+ + "\3\174\1\0\2\174\2\0\1\203\1\177\2\176\1\200"+ + "\2\0\2\174\1\200\1\174\1\177\1\174\6\0\5\174"+ + "\1\0\2\174\1\176\5\174\1\203\1\0\16\174\2\0"+ + "\2\175\23\0\1\175\105\0\1\204\3\0\1\43\1\205"+ + "\22\0\1\206\75\0\1\43\1\0\1\43\123\0\1\43"+ + "\106\0\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\207\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\210\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\62\1\211\4\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\24\0\1\212\114\0\1\43"+ + "\7\0\1\213\76\0\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\214\4\62\1\0\16\62\30\102\1\215\1\216\72\102"+ + "\10\103\1\217\17\103\1\220\1\103\1\221\71\103\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\1\62"+ + "\1\222\1\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\223\6\0\2\62\1\224\1\225\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\226\2\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\227\1\230\2\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\231\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\232\4\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ + "\1\0\2\61\2\0\5\61\2\0\6\61\6\0\2\61"+ + "\1\233\2\61\1\0\11\61\1\0\16\61\15\0\1\43"+ + "\23\0\1\234\1\235\61\0\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\3\62\1\236\12\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\237\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\240\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\241\1\62"+ + "\1\242\6\0\2\62\1\243\1\62\1\61\1\0\4\62"+ + "\1\244\4\62\1\0\16\62\15\0\1\43\32\0\1\43"+ + "\70\0\1\43\33\0\1\43\52\0\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\245\1\246\1\247"+ + "\2\62\6\0\4\62\1\61\1\0\1\250\3\62\1\251"+ + "\1\252\3\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\253\1\254\2\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\255\1\256"+ + "\6\0\4\62\1\61\1\0\7\62\1\257\1\260\1\0"+ + "\1\62\1\261\14\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\262\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\2\62\1\262\6\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\257\1\62\1\257"+ + "\1\263\2\62\6\0\4\62\1\61\1\0\4\62\1\264"+ + "\4\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\265\2\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\266\1\62\1\267\3\62\6\0"+ + "\1\62\1\270\2\62\1\61\1\0\1\62\1\271\7\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\272\1\62\1\273\3\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\274\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\275\1\276"+ + "\1\62\6\0\4\62\1\61\1\0\4\62\1\277\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\62\1\300\1\62\1\0\1\61\1\62"+ + "\2\0\3\62\1\301\1\62\2\0\5\62\1\302\6\0"+ + "\4\62\1\61\1\0\6\62\1\303\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\304\2\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\305\1\62\1\306\1\307\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\2\62\1\310"+ + "\1\62\1\61\1\0\1\311\10\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\312"+ + "\3\62\6\0\4\62\1\61\1\0\4\62\1\257\1\313"+ + "\3\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\314\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\257\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\1\62\1\315\14\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\316\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\257\1\62\1\317\3\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\320\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\3\62\1\321\2\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\322\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\323\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\324\2\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\325\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\326\2\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\2\62\1\327\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\330\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\10\144\1\0\31\144"+ + "\1\0\3\144\1\0\25\144\2\0\26\144\41\0\1\331"+ + "\134\0\1\332\15\0\1\333\105\0\1\334\146\0\1\335"+ + "\26\0\10\152\1\0\35\152\1\0\25\152\2\0\26\152"+ + "\52\0\1\336\15\0\1\337\105\0\1\340\146\0\1\341"+ + "\27\0\3\157\1\0\2\157\11\0\4\157\2\0\2\157"+ + "\3\0\3\157\5\0\6\157\1\0\6\157\6\0\4\157"+ + "\2\0\11\157\1\0\16\157\17\0\1\342\30\0\1\343"+ + "\54\0\1\344\3\0\1\344\12\0\4\344\2\0\1\344"+ + "\4\0\3\344\5\0\5\344\2\0\6\344\6\0\4\344"+ + "\2\0\11\344\1\0\16\344\71\0\1\345\110\0\1\346"+ + "\72\0\1\347\150\0\1\350\146\0\1\351\53\0\1\352"+ + "\76\0\5\61\13\0\4\61\2\0\3\61\2\0\1\353"+ + "\2\61\1\0\2\61\2\0\5\61\2\0\6\61\6\0"+ + "\5\61\1\0\11\61\1\0\16\61\5\174\13\0\4\174"+ + "\2\0\3\174\2\0\3\174\1\0\2\174\2\0\5\174"+ + "\2\0\6\174\6\0\5\174\1\0\11\174\1\0\20\174"+ + "\2\175\1\174\13\0\1\174\1\176\2\174\2\0\1\174"+ + "\1\175\1\174\2\0\3\174\1\0\2\174\2\0\2\174"+ + "\2\176\1\200\2\0\2\174\1\200\3\174\6\0\5\174"+ + "\1\0\2\174\1\176\6\174\1\0\20\174\2\354\1\174"+ + "\13\0\4\174\2\0\1\174\1\354\1\174\2\0\3\174"+ + "\1\0\2\174\2\0\5\174\2\355\6\174\6\0\5\174"+ + "\1\0\11\174\1\0\20\174\2\201\1\174\1\0\1\175"+ + "\11\0\1\174\1\176\2\174\2\0\1\174\1\201\1\174"+ + "\2\0\3\174\1\0\2\174\2\0\2\174\2\176\1\200"+ + "\2\0\2\174\1\200\3\174\6\0\5\174\1\0\2\174"+ + "\1\176\6\174\1\0\20\174\1\201\1\202\1\174\1\0"+ + "\1\175\11\0\1\174\1\176\2\174\2\0\1\174\1\202"+ + "\1\174\2\0\3\174\1\0\2\174\2\0\1\174\1\356"+ + "\2\176\1\200\2\0\2\174\1\200\1\174\1\356\1\174"+ + "\6\0\5\174\1\0\2\174\1\176\6\174\1\0\20\174"+ + "\2\357\1\174\13\0\3\357\1\174\2\0\2\357\1\174"+ + "\2\0\2\174\1\357\1\0\2\174\2\0\2\174\3\357"+ + "\2\0\2\174\2\357\2\174\6\0\1\174\1\357\3\174"+ + "\1\0\2\174\1\357\6\174\1\0\16\174\17\0\1\360"+ + "\105\0\1\361\3\0\1\361\12\0\4\361\2\0\1\361"+ + "\4\0\3\361\5\0\5\361\2\0\6\361\6\0\1\362"+ + "\3\361\2\0\11\361\1\0\16\361\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\4\62\1\363\1\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\364\5\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\62\1\365\4\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\25\0"+ + "\1\366\113\0\1\43\7\0\1\72\76\0\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\367\4\62\1\0\16\62\3\370"+ + "\1\102\4\370\1\0\16\370\4\102\1\371\2\102\10\370"+ + "\1\102\3\370\2\102\50\370\30\217\1\372\1\217\1\373"+ + "\74\217\1\103\4\217\1\0\16\217\4\103\1\374\2\103"+ + "\10\217\1\103\3\217\2\103\50\217\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\2\62\1\375\1\62\1\376"+ + "\1\62\6\0\4\62\1\61\1\0\2\62\1\377\6\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\257\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0100\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\2\62\1\u0101\6\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\4\62\1\u0102\1\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\1\62\1\u0103\6\62\1\u0104\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0105"+ + "\5\62\6\0\4\62\1\61\1\0\6\62\1\u0106\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\257\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u0107\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\5\61\13\0\4\61\2\0\3\61"+ + "\2\0\1\61\1\u0108\1\61\1\0\2\61\2\0\5\61"+ + "\2\0\6\61\6\0\5\61\1\0\11\61\1\0\16\61"+ + "\42\0\1\u0109\61\0\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\1\62\1\u010a\3\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u010b\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\u010c\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u010d\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\1\62\1\u010e\2\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u010f\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\u0110\4\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\u0111\2\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u0112\2\62\6\0\4\62\1\61"+ + "\1\0\5\62\1\257\3\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u0113\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0114"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\u0115\4\62\6\0\2\62\1\u0116\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\1\u0117\15\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\3\62\1\u0118\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\u0119\5\62\6\0\4\62\1\61\1\0"+ + "\6\62\1\u011a\2\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\u011b\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\5\62\1\223\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\1\62"+ + "\1\u011c\2\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u011d\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u011e"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\257\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\2\62\1\u011f\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u0120\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\3\62\1\u0121\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u0122\2\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\u0123\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u0124\5\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u0125\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ + "\1\u0126\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0127"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u0128\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\u0129\2\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\u012a\3\62\1\u011e\1\223\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u012b\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u012c\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u012d\5\62\6\0\1\62"+ + "\1\u012e\2\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\2\62\1\u012f\2\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\2\62\1\u0130\2\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\4\62\1\u0131\11\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\3\62\1\u0132\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\2\62\1\u0133\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u0134\3\62\6\0\2\62\1\u0135"+ + "\1\62\1\61\1\0\4\62\1\u0136\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\u0137\4\62\6\0\1\62\1\u0138\2\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u0139\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u013a\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u013b\1\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\3\62\1\u013c\1\62\2\0\4\62\1\u013d"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u013e\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\1\u013f\3\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\u0140\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\10\62\1\u0141"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u0142\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u0143\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\62\1\257\4\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\262\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\5\62\1\u0144\3\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u0145\5\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\u0146\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\1\62\1\u0147\14\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0148"+ + "\1\62\6\0\4\62\1\61\1\0\6\62\1\u0149\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\6\62\1\u014a\7\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\u014b\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\71\0\1\u014c\110\0\1\u014d"+ + "\117\0\1\u014e\146\0\1\u014f\117\0\1\u0150\110\0\1\u0151"+ + "\117\0\1\u0152\146\0\1\u0153\46\0\1\u0154\153\0\1\u0155"+ + "\54\0\3\344\1\0\2\344\11\0\4\344\2\0\2\344"+ + "\3\0\3\344\5\0\6\344\1\0\6\344\6\0\4\344"+ + "\2\0\11\344\1\0\16\344\5\0\1\u0156\172\0\1\345"+ + "\140\0\1\u0157\40\0\1\u0158\115\0\2\61\2\u0159\1\61"+ + "\13\0\3\u0159\1\61\2\0\2\u0159\1\61\2\0\2\61"+ + "\1\u0159\1\0\2\61\2\0\2\61\3\u0159\2\0\2\61"+ + "\2\u0159\2\61\6\0\1\61\1\u0159\3\61\1\0\2\61"+ + "\1\u0159\6\61\1\0\16\61\2\174\2\354\1\174\13\0"+ + "\1\174\1\176\2\174\2\0\1\174\1\354\1\174\2\0"+ + "\3\174\1\0\2\174\2\0\2\174\2\176\1\174\2\0"+ + "\6\174\6\0\5\174\1\0\2\174\1\176\6\174\1\0"+ + "\16\174\2\0\2\354\23\0\1\354\74\0\2\174\2\357"+ + "\1\174\13\0\3\357\1\174\2\0\2\357\1\174\2\0"+ + "\2\174\1\357\1\0\2\174\2\0\1\174\1\356\3\357"+ + "\2\0\2\174\2\357\1\356\1\174\6\0\1\174\1\357"+ + "\3\174\1\0\2\174\1\357\6\174\1\0\16\174\20\0"+ + "\1\u015a\104\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ + "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\6\361"+ + "\6\0\4\361\2\0\11\361\1\0\16\361\1\0\3\361"+ + "\1\0\1\u015b\1\361\11\0\4\361\2\0\2\361\3\0"+ + "\3\361\5\0\6\361\1\0\6\361\6\0\1\361\1\u015c"+ + "\2\361\2\0\11\361\1\0\16\361\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u015d\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0144\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\323"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u015e\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\30\370\1\u015f\1\u0160\74\370\2\u0161\14\370\3\u0161"+ + "\3\370\2\u0161\1\u015f\1\u0160\3\370\1\u0161\7\370\3\u0161"+ + "\4\370\2\u0161\11\370\1\u0161\6\370\1\u0161\25\370\10\217"+ + "\1\0\115\217\2\u0162\14\217\3\u0162\3\217\2\u0162\1\372"+ + "\1\217\1\373\2\217\1\u0162\7\217\3\u0162\4\217\2\u0162"+ + "\11\217\1\u0162\6\217\1\u0162\25\217\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\5\62\1\256\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u0163\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0164\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0144\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u0165"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\257\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\4\62\1\u0166\1\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u0167\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u0168\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u0169\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\3\62\1\u016a\2\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\5\61\13\0\4\61"+ + "\2\0\3\61\2\0\3\61\1\0\2\61\2\0\5\61"+ + "\2\0\6\61\6\0\1\61\1\u016b\3\61\1\0\11\61"+ + "\1\0\16\61\41\0\1\u016c\62\0\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\u016d\3\62"+ + "\1\61\1\0\11\62\1\0\4\62\1\u016e\11\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\1\62\1\u016f\2\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\1\62\1\u0170\2\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\u0111\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\u0171\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u0172\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\u0173\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u0174\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\u0175\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u0176\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\1\u0177\15\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u0178\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\5\62\1\257\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\1\u0179\15\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u017a\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\1\u017b"+ + "\2\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u017c\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u017d\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u017e\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u017f\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\4\62\1\u0180\1\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\u0102\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\2\62\1\u0181\6\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\321\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0182\1\u0183"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\3\62\1\u0184\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\10\62\1\u0185"+ + "\5\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\u0186\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u012a\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u0187\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u010b\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u0188\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\u013a"+ + "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\5\62\1\u0116\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\u0189\4\62\1\231"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u018a"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u018b\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\u018c\4\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u018d\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u018e\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u018f\1\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u0190\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0182"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\1\62\1\u0167"+ + "\14\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\62\1\u0191\1\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\1\62\1\u0192\14\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u0193\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\5\62\1\u0194\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\3\62\1\u0195\5\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\5\62\1\u0180\3\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\1\257\10\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\223\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u0196"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\u0197\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u0198\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\4\62\1\u0199\1\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\62\1\u019a\4\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\5\62\1\u019b\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\3\62"+ + "\1\u019c\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\7\62\1\u019d\1\u0185\1\u019e\4\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\4\62\1\u019f\4\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\1\u0144\10\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\364\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\2\62\1\u01a0\1\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\4\62\1\u0144\1\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\2\62\1\u01a1\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u01a2\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\363\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\5\0\1\u01a3\172\0\1\u014c"+ + "\140\0\1\u01a4\40\0\1\u01a5\122\0\1\u01a6\172\0\1\u0150"+ + "\140\0\1\u01a7\40\0\1\u01a8\136\0\1\u01a9\143\0\1\u01aa"+ + "\67\0\1\u0156\51\0\1\345\45\0\3\u0158\3\u01ab\4\0"+ + "\5\u01ab\4\u0158\1\u01ab\1\0\2\u0158\1\0\1\u01ab\1\0"+ + "\3\u0158\1\0\1\u01ab\2\u0158\1\u01ab\5\u0158\2\u01ab\6\u0158"+ + "\1\0\1\u01ab\1\0\3\u01ab\4\u0158\2\u01ab\11\u0158\1\0"+ + "\16\u0158\2\61\2\u01ac\1\61\13\0\3\u01ac\1\61\2\0"+ + "\2\u01ac\1\61\2\0\2\61\1\u01ac\1\0\2\61\2\0"+ + "\2\61\3\u01ac\2\0\2\61\2\u01ac\2\61\6\0\1\61"+ + "\1\u01ac\3\61\1\0\2\61\1\u01ac\6\61\1\0\16\61"+ + "\21\0\1\u01ad\103\0\3\361\1\0\1\u015b\1\361\11\0"+ + "\4\361\2\0\2\361\3\0\3\361\5\0\6\361\1\0"+ + "\6\361\6\0\1\362\3\361\2\0\11\361\1\0\16\361"+ + "\1\0\3\361\1\0\1\u015b\1\361\11\0\4\361\2\0"+ + "\2\361\3\0\3\361\5\0\6\361\1\0\1\361\1\u01ae"+ + "\4\361\6\0\4\361\2\0\11\361\1\0\16\361\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0144"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\u01af\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\10\370\1\0\115\370\2\u01b0\14\370\3\u01b0\3\370"+ + "\2\u01b0\1\u015f\1\u0160\3\370\1\u01b0\7\370\3\u01b0\4\370"+ + "\2\u01b0\11\370\1\u01b0\6\370\1\u01b0\25\370\2\217\2\u01b1"+ + "\14\217\3\u01b1\3\217\2\u01b1\1\372\1\217\1\373\2\217"+ + "\1\u01b1\7\217\3\u01b1\4\217\2\u01b1\11\217\1\u01b1\6\217"+ + "\1\u01b1\25\217\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u01b2\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\3\62\1\u01b3\1\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u01b4\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u01b5\1\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\2\62\1\u01b6\2\62\2\0\6\62\6\0"+ + "\1\u01b7\3\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\1\62\1\223\14\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\5\62"+ + "\1\u01b8\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\3\62\1\257\5\62\1\0"+ + "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ + "\1\0\2\61\2\0\5\61\2\0\4\61\1\u01b9\1\61"+ + "\6\0\5\61\1\0\11\61\1\0\17\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u01ba\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u01bb\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u01bc\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u01bd\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\6\62\1\u01be\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u01bf\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\54\0\1\u01c0\47\0\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\u0180\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\3\62\1\u01c1\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\2\62\1\u01c2\3\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\1\62\1\257\7\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u01c3"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\4\62\1\u01c4\4\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\u01c5\4\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\1\62\1\u01c6\14\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\u01c7\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\3\62\1\u0175\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u01c8\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\3\62\1\u01c9\3\62\1\u01ca\6\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u01cb\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\u01cc\5\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\1\62\1\u01cd\1\u01ce\1\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\62\1\u01cf\4\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u011e\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\u01d0\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\2\62\1\u0144\6\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u01d1\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\u01d2\4\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\u01d3\2\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u01d4\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\62\1\u01d5\1\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\4\62\1\u0180\11\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\u01d6\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\231\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\u01d7\5\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\u0197\2\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01d8"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\u01d9\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u01da\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\u01db\2\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\223\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\6\62\1\u0182"+ + "\2\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\u01dc\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\62\1\u01dd\4\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\270"+ + "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ + "\1\u01de\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01df"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\12\62\1\u01e0"+ + "\3\62\1\61\4\62\13\0\2\62\1\u01e1\1\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u01e2\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u015d\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\1\62\1\u0100\2\62"+ + "\1\61\1\0\11\62\1\0\16\62\41\0\1\u01e3\67\0"+ + "\1\u01a3\51\0\1\u014c\45\0\3\u01a5\3\u01e4\4\0\5\u01e4"+ + "\4\u01a5\1\u01e4\1\0\2\u01a5\1\0\1\u01e4\1\0\3\u01a5"+ + "\1\0\1\u01e4\2\u01a5\1\u01e4\5\u01a5\2\u01e4\6\u01a5\1\0"+ + "\1\u01e4\1\0\3\u01e4\4\u01a5\2\u01e4\11\u01a5\1\0\16\u01a5"+ + "\41\0\1\u01e5\67\0\1\u01a6\51\0\1\u0150\45\0\3\u01a8"+ + "\3\u01e6\4\0\5\u01e6\4\u01a8\1\u01e6\1\0\2\u01a8\1\0"+ + "\1\u01e6\1\0\3\u01a8\1\0\1\u01e6\2\u01a8\1\u01e6\5\u01a8"+ + "\2\u01e6\6\u01a8\1\0\1\u01e6\1\0\3\u01e6\4\u01a8\2\u01e6"+ + "\11\u01a8\1\0\16\u01a8\22\0\1\u01e7\142\0\1\u0158\62\0"+ + "\2\61\2\u01e8\1\61\13\0\3\u01e8\1\61\2\0\2\u01e8"+ + "\1\61\2\0\2\61\1\u01e8\1\0\2\61\2\0\2\61"+ + "\3\u01e8\2\0\2\61\2\u01e8\2\61\6\0\1\61\1\u01e8"+ + "\3\61\1\0\2\61\1\u01e8\6\61\1\0\16\61\22\0"+ + "\1\u01e9\102\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ + "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\6\361"+ + "\6\0\2\361\1\u01ea\1\361\2\0\11\361\1\0\16\361"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\u01eb\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\2\370\2\u01ec\14\370\3\u01ec\3\370\2\u01ec\1\u015f"+ + "\1\u0160\3\370\1\u01ec\7\370\3\u01ec\4\370\2\u01ec\11\370"+ + "\1\u01ec\6\370\1\u01ec\25\370\2\217\2\u01ed\14\217\3\u01ed"+ + "\3\217\2\u01ed\1\372\1\217\1\373\2\217\1\u01ed\7\217"+ + "\3\u01ed\4\217\2\u01ed\11\217\1\u01ed\6\217\1\u01ed\25\217"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u01ee\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\2\62\1\u01ef\1\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u01f0\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0175\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\62\1\u01f1\4\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\u01f2"+ + "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\3\62"+ + "\1\u01f3\1\61\1\0\11\62\1\0\16\62\5\61\13\0"+ + "\4\61\2\0\3\61\2\0\1\u01f4\2\61\1\0\2\61"+ + "\2\0\5\61\2\0\6\61\6\0\5\61\1\0\11\61"+ + "\1\0\17\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\1\62\1\u01f5\2\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\2\62\1\364"+ + "\6\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\u01f6\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u01f7\1\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\6\62\1\u01f8\2\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u01f9\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\55\0"+ + "\1\u01fa\46\0\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u01fb\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\u01fc\5\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u01fd\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\3\62\1\257\1\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\257\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u01fe\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\6\62\1\u0180\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u0116\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\u01ff\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u0200\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\257\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\1\62"+ + "\1\u01cd\2\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u0201\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u0202\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u0203\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\1\u0144\15\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u0204\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\62\1\u0205\1\62\1\0\1\61\1\62\2\0"+ + "\3\62\1\u01f3\1\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\2\62\1\223\6\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\6\62\1\u0206\2\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ + "\1\u0207\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\6\62\1\u0208\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\2\62\1\u0209\1\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\4\62\1\u020a\11\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\u020b\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\2\62\1\u020c\2\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\13\62\1\u020d\2\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\1\223\15\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\231"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\3\62\1\u020e\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u01d3\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\6\62\1\u020f\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\62\1\u0210\4\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\1\62\1\u0180\3\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u0211\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\1\u0212\3\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\41\0\1\u01a5\123\0"+ + "\1\u01a8\105\0\1\u0213\100\0\2\61\2\62\1\61\13\0"+ + "\3\62\1\61\2\0\2\62\1\61\2\0\2\61\1\62"+ + "\1\0\2\61\2\0\2\61\3\62\2\0\2\61\2\62"+ + "\2\61\6\0\1\61\1\62\3\61\1\0\2\61\1\62"+ + "\6\61\1\0\16\61\23\0\1\u0214\101\0\3\361\1\0"+ + "\1\u015b\1\361\11\0\4\361\2\0\2\361\3\0\3\361"+ + "\5\0\6\361\1\0\6\361\6\0\3\361\1\u0215\2\0"+ + "\11\361\1\0\16\361\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0144\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\2\370\2\102\14\370\3\102"+ + "\3\370\2\102\1\u015f\1\u0160\3\370\1\102\7\370\3\102"+ + "\4\370\2\102\11\370\1\102\6\370\1\102\25\370\2\217"+ + "\2\103\14\217\3\103\3\217\2\103\1\372\1\217\1\373"+ + "\2\217\1\103\7\217\3\103\4\217\2\103\11\217\1\103"+ + "\6\217\1\103\25\217\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\3\62\1\u01c9\12\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u0216\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\2\62\1\u0217\1\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\u0218\2\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01b5"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\u0219\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ + "\1\0\2\61\2\0\5\61\2\0\6\61\6\0\5\61"+ + "\1\0\2\61\1\u021a\6\61\1\0\17\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\3\62\1\u021b\5\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u01eb\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u01c5\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\u021c\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\5\62\1\257\3\62"+ + "\1\0\16\62\67\0\1\u021d\34\0\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u021e\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\10\62\1\u021f\5\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\14\62\1\u0220\1\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\3\62\1\u0221"+ + "\12\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\1\62"+ + "\1\u0222\14\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\62\1\u0223\4\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u0224\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u0225\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\3\62\1\u0226"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\223\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\3\62\1\u0102\2\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0227\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0175\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u0228"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\5\62"+ + "\1\u0229\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\u01c7\2\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0216"+ + "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u022a\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\62\1\u022b\1\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\4\62"+ + "\1\u022c\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u022d\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\5\62\1\u022e\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\2\62"+ + "\1\u022f\6\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u0230\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\22\0\1\u0231\123\0"+ + "\1\u0232\102\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ + "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\1\u0233"+ + "\5\361\6\0\4\361\2\0\11\361\1\0\16\361\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\262"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\3\62\1\u0234\1\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\6\62\1\u0175\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\1\62\1\223\2\62\1\61\1\0"+ + "\11\62\1\0\16\62\5\61\13\0\4\61\2\0\3\61"+ + "\2\0\3\61\1\0\2\61\2\0\5\61\2\0\2\61"+ + "\1\u0235\3\61\6\0\5\61\1\0\11\61\1\0\17\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u0100"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u0236\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\74\0\1\u0237\27\0\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\1\u0238\15\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\3\62\1\u0239\2\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\2\62\1\u023a"+ + "\1\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u023b\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u023c\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u023d\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\1\u0180"+ + "\15\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\1\u023e\3\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\u023f\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\1\62"+ + "\1\u0240\3\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0241\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\1\u0242\1\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\u0243\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u0180\5\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\1\62\1\u0244\14\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\62\1\u0180\4\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u0245\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\1\u0246\3\62\1\61\1\0\11\62\1\0\10\62"+ + "\1\u0247\5\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u0248\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\17\0\1\u0249\123\0\1\366\105\0"+ + "\3\361\1\0\1\u015b\1\361\1\u024a\2\0\1\u024a\5\0"+ + "\4\361\1\0\1\u024b\2\361\3\0\3\361\5\0\6\361"+ + "\1\0\6\361\6\0\4\361\2\0\11\361\1\u024a\16\361"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u024c"+ + "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u0180\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\231\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u024d\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\1\u024e\15\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\1\62\1\u024f\14\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u0250\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\3\62\1\u0251\2\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u0252\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\62\1\u0253\4\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u0254\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0116"+ + "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u0255\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u022b\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u0256\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\u0257\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u0258\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\307\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\3\62\1\u0144"+ + "\1\61\1\0\11\62\1\0\16\62\7\0\1\u024a\2\0"+ + "\1\u024a\12\0\1\u024b\57\0\1\u024a\16\0\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0259\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\1\u0180\10\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\1\u025a\10\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u025b\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\4\62\1\u020a"+ + "\11\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\2\62\1\u025c\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\u025d\2\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\u0139\5\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u025e\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u025f\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\62\1\231\1\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0180\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\u0260\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u0261\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\15\62\1\u0262\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0263\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0264"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u0265\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\2\62\1\u0216\6\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\6\62\1\u0266"+ + "\2\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\3\62\1\u0180\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\4\62\1\u0267\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\u0268\2\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\1\u0269\3\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u026a\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\2\62\1\u026b\6\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\3\62\1\u026c\2\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\1\62\1\u026d\14\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u026e"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u026f\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\u0250\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\u0180\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\3\62\1\u0250\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\u020d\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\4\62\1\u0270\1\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\u0260\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u0253\1\62"+ + "\1\61\1\0\11\62\1\0\16\62"; + + private static int [] zzUnpackTrans() { + int [] result = new int[48384]; + 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; + } + + + /* 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; + + /* 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 = + "\5\0\2\1\1\0\2\1\4\0\2\1\1\11\4\1"+ + "\1\11\5\1\1\11\2\1\2\11\2\1\4\11\2\1"+ + "\1\11\1\1\4\11\7\1\1\11\2\1\1\11\1\1"+ + "\1\11\13\1\1\11\35\1\1\11\5\1\1\11\6\1"+ + "\2\11\5\0\1\11\1\0\11\1\3\0\3\1\1\0"+ + "\3\1\1\11\2\1\1\11\12\1\1\11\74\1\1\11"+ + "\12\0\1\1\2\0\1\11\2\0\1\11\2\1\1\0"+ + "\2\1\3\0\3\1\1\11\4\1\1\11\15\1\1\0"+ + "\102\1\11\0\1\11\2\0\2\1\3\0\3\1\1\11"+ + "\13\1\1\11\6\1\1\0\57\1\2\0\1\1\2\0"+ + "\1\1\3\0\1\1\2\0\21\1\1\0\42\1\5\0"+ + "\1\1\2\0\17\1\1\0\30\1\3\0\7\1\1\0"+ + "\23\1\3\0\3\1\1\11\21\1\1\11\1\0\1\11"+ + "\45\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[624]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to this class; this signals that the user has + * ended a line with an unclosed XML tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to this class; this signals that the user has + * ended a line with an unclosed Script tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in the middle of a double-quoted attribute in a Script + * tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in the middle of a single-quoted attribute in a Script + * tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in an ActionScript code block (text content inside a + * Script tag). + */ + public static final int INTERNAL_IN_AS = -7; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in an MLC in an ActionScript code block (text content + * inside a Script tag). + */ + public static final int INTERNAL_IN_AS_MLC = -8; + + /** + * Whether closing markup tags are automatically completed for HTML. + */ + private static boolean completeCloseTags; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public MxmlTokenMaker() { + } + + + static { + completeCloseTags = true; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns whether markup close tags should be completed. For XML, the + * default value is true. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + /** + * Static version of {@link #getCompleteCloseTags()}. This hack is + * unfortunately needed for applications to be able to query this value + * without instantiating this class. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + public static boolean getCompleteCloseMarkupTags() { + return completeCloseTags; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in XML files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + start = text.offset; + break; + case Token.MARKUP_DTD: + state = DTD; + start = text.offset; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + start = text.offset; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + start = text.offset; + break; + case Token.MARKUP_PROCESSING_INSTRUCTION: + state = PI; + start = text.offset; + break; + case INTERNAL_INTAG: + state = INTAG; + start = text.offset; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + start = text.offset; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + start = text.offset; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + start = text.offset; + break; + case INTERNAL_IN_AS: + state = AS; + start = text.offset; + break; + case INTERNAL_IN_AS_MLC: + state = AS_MLC; + start = text.offset; + break; + case Token.MARKUP_CDATA: + state = CDATA; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public MxmlTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public MxmlTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 190) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: + { addToken(Token.IDENTIFIER); + } + case 59: break; + case 53: + { addToken(Token.LITERAL_BOOLEAN); + } + case 60: break; + case 29: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_AS); return firstToken; + } + case 61: break; + case 50: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 62: break; + case 51: + { addToken(Token.ERROR_CHAR); + } + case 63: break; + case 34: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 64: break; + case 24: + { addEndToken(INTERNAL_IN_AS); return firstToken; + } + case 65: break; + case 19: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 66: break; + case 13: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 67: break; + case 26: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 68: break; + case 38: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 69: break; + case 54: + { addToken(Token.FUNCTION); + } + case 70: break; + case 43: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-2), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + case 71: break; + case 31: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 72: break; + case 27: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 73: break; + case 21: + { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 74: break; + case 57: + { addToken(Token.MARKUP_CDATA_DELIMITER); start = zzMarkedPos; yybegin(CDATA); + } + case 75: break; + case 22: + { addToken(Token.ERROR_IDENTIFIER); + } + case 76: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 77: break; + case 28: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_AS_MLC); return firstToken; + } + case 78: break; + case 46: + { addToken(Token.MARKUP_CDATA_DELIMITER); + } + case 79: break; + case 45: + { int temp=zzStartRead; yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.MARKUP_CDATA); addToken(temp,zzMarkedPos-1, Token.MARKUP_CDATA_DELIMITER); + } + case 80: break; + case 17: + { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 81: break; + case 37: + { addToken(Token.LITERAL_CHAR); + } + case 82: break; + case 32: + { start = zzMarkedPos-2; yybegin(PI); + } + case 83: break; + case 15: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 84: break; + case 42: + { yybegin(AS); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 85: break; + case 7: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 86: break; + case 9: + { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 87: break; + case 36: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 88: break; + case 8: + { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 89: break; + case 20: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 90: break; + case 41: + { start = zzMarkedPos-2; yybegin(AS_MLC); + } + case 91: break; + case 16: + { addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ + } + case 92: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 93: break; + case 30: + { int count = yylength(); + String tag = yytext(); // Get before addToken calls + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + if (tag.endsWith(":Script") || tag.equals("' + while (Character.isWhitespace(text.charAt(tagNameEnd))) { + tagNameEnd--; + } + int tagNameLen = tagNameEnd - 1; + yybegin(YYINITIAL); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(origStart+2,origStart+2+tagNameLen-1, Token.MARKUP_TAG_NAME); + if (tagNameEnd + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated NSISTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + * + */ +%% + +%public +%class NSISTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public NSISTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = ([A-Za-z]) +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = ([1-9]) +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|[$/]) +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +MLCBegin = ("/*") +MLCEnd = ("*/") +LineCommentBegin = ([;#]) + +IntegerLiteral = (({NonzeroDigit}{Digit}*)|"0") +HexLiteral = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +VariableStart = ("$") +Variable = ({VariableStart}({Identifier}|"{"{Identifier}"}")) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state STRING +%state CHAR_LITERAL +%state BACKTICKS +%state MLC +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "function" | + "functionend" | + "section" | + "sectionend" | + "subsection" | + "subsectionend" { addToken(Token.RESERVED_WORD); } + + /* Instructions */ + "addbrandingimage" | + "addsize" | + "allowrootdirinstall" | + "allowskipfiles" | + "autoclosewindow" | + "bggradient" | + "brandingtext" | + "bringtofront" | + "callinstdll" | + "caption" | + "changeui" | + "checkbitmap" | + "completedtext" | + "componenttext" | + "copyfiles" | + "crccheck" | + "createdirectory" | + "createfont" | + "createshortcut" | + "delete" | + "deleteinisec" | + "deleteinistr" | + "deleteregkey" | + "deleteregvalue" | + "detailprint" | + "detailsbuttontext" | + "dirshow" | + "dirtext" | + "enumregkey" | + "enumregvalue" | + "exch" | + "exec" | + "execshell" | + "execwait" | + "expandenvstrings" | + "file" | + "fileclose" | + "fileerrortext" | + "fileopen" | + "fileread" | + "filereadbyte" | + "fileseek" | + "filewrite" | + "filewritebyte" | + "findclose" | + "findfirst" | + "findnext" | + "findwindow" | + "flushini" | + "getcurinsttype" | + "getcurrentaddress" | + "getdlgitem" | + "getdllversion" | + "getdllversionlocal" | + "getfiletime" | + "getfiletimelocal" | + "getfullpathname" | + "getfunctionaddress" | + "getlabeladdress" | + "gettempfilename" | + "getwindowtext" | + "hidewindow" | + "icon" | + "initpluginsdir" | + "installbuttontext" | + "installcolors" | + "installdir" | + "installdirregkey" | + "instprogressflags" | + "insttype" | + "insttypegettext" | + "insttypesettext" | + "intfmt" | + "intop" | + "langstring" | + "langstringup" | + "licensebkcolor" | + "licensedata" | + "licenseforceselection" | + "licensetext" | + "loadlanguagefile" | + "loadlanguagefile" | + "logset" | + "logtext" | + "miscbuttontext" | + "name" | + "nop" | + "outfile" | + "page" | + "plugindir" | + "pop" | + "push" | + "readenvstr" | + "readinistr" | + "readregdword" | + "readregstr" | + "regdll" | + "rename" | + "requestexecutionlevel" | + "reservefile" | + "rmdir" | + "searchpath" | + "sectiongetflags" | + "sectiongetinsttypes" | + "sectiongetsize" | + "sectiongettext" | + "sectionin" | + "sectionsetflags" | + "sectionsetinsttypes" | + "sectionsetsize" | + "sectionsettext" | + "sendmessage" | + "setautoclose" | + "setbkcolor" | + "setbrandingimage" | + "setcompress" | + "setcompressor" | + "setcurinsttype" | + "setdatablockoptimize" | + "setdatesave" | + "setdetailsprint" | + "setdetailsview" | + "setfileattributes" | + "setfont" | + "setoutpath" | + "setoverwrite" | + "setpluginunload" | + "setrebootflag" | + "setshellvarcontext" | + "setstaticbkcolor" | + "setwindowlong" | + "showinstdetails" | + "showuninstdetails" | + "showwindow" | + "silentinstall" | + "silentuninstall" | + "sleep" | + "spacetexts" | + "strcpy" | + "strlen" | + "subcaption" | + "uninstallbuttontext" | + "uninstallcaption" | + "uninstallicon" | + "uninstallsubcaption" | + "uninstalltext" | + "uninstpage" | + "unregdll" | + "var" | + "viaddversionkey" | + "videscription" | + "vicompanyname" | + "vicomments" | + "vilegalcopyrights" | + "vilegaltrademarks" | + "viproductname" | + "viproductversion" | + "windowicon" | + "writeinistr" | + "writeregbin" | + "writeregdword" | + "writeregexpandstr" | + "writeregstr" | + "writeuninstaller" | + "xpstyle" | + + /* Flow control instructions */ + "abort" | + "call" | + "clearerrors" | + "goto" | + "ifabort" | + "iferrors" | + "iffileexists" | + "ifrebootflag" | + "intcmp" | + "intcmpu" | + "iswindow" | + "messagebox" | + "reboot" | + "return" | + "quit" | + "seterrors" | + "strcmp" | + "strcmps" { addToken(Token.FUNCTION); } + + /* Compiler utility commands */ + "!addincludedir" | + "!addplugindir" | + "!define" | + "!include" | + "!cd" | + "!echo" | + "!error" | + "!insertmacro" | + "!packhdr" | + "!system" | + "!warning" | + "!undef" | + "!verbose" | + + /* Conditional compilation */ + "!ifdef" | + "!ifndef" | + "!if" | + "!else" | + "!endif" | + "!macro" | + "!macroend" { addToken(Token.RESERVED_WORD); } + + /* Global variables */ + "$0" | + "$1" | + "$2" | + "$3" | + "$4" | + "$5" | + "$6" | + "$7" | + "$8" | + "$9" | + "$INSTDIR" | + "$OUTDIR" | + "$CMDLINE" | + "$LANGUAGE" | + + /* Local variables */ + ("$R0"{Digit}) | + + /* Constants */ + "ARCHIVE" | + "CENTER" | + "CONTROL" | + "CUR" | + "EXT" | + ("F"{NonzeroDigit}) | + ("F1"{Digit}) | + ("F2"[0-4]) | + "FILE_ATTRIBUTE_ARCHIVE" | + "MB_ABORTRETRYIGNORE" | + "RIGHT" | + "RO" | + "SET" | + "SHIFT" | + "SW_SHOWMAXIMIZED" | + "SW_SHOWMINIMIZED" | + "SW_SHOWNORMAL" | + "a" | + "admin" | + "all" | + "alwaysoff" | + "auto" | + "both" | + "bottom" | + "bzip2" | + "checkbox" | + "colored" | + "components" | + "current" | + "custom" | + "directory" | + "force" | + "hide" | + "highest" | + "ifnewer" | + "instfiles" | + "license" | + "listonly" | + "manual" | + "nevershow" | + "none" | + "off" | + "on" | + "r" | + "radiobuttons" | + "show" | + "silent" | + "silentlog" | + "smooth" | + "textonly" | + "top" | + "try" | + "uninstConfirm" | + "user" | + "w" | + "zlib" | + "$$" | + "$DESKTOP" | + "$EXEDIR" | + "$HWNDPARENT" | + "$PLUGINSDIR" | + "$PROGRAMFILES" | + "$QUICKLAUNCH" | + "$SMPROGRAMS" | + "$SMSTARTUP" | + "$STARTMENU" | + "$SYSDIR" | + "$TEMP" | + "$WINDIR" | + "$\n" | + "$\r" | + "${NSISDIR}" | + "ALT" | + "END" | + "FILE_ATTRIBUTE_HIDDEN" | + "FILE_ATTRIBUTE_NORMAL" | + "FILE_ATTRIBUTE_OFFLINE" | + "FILE_ATTRIBUTE_READONLY" | + "FILE_ATTRIBUTE_SYSTEM" | + "FILE_ATTRIBUTE_TEMPORARY" | + "HIDDEN" | + "HKCC" | + "HKCR" | + "HKCU" | + "HKDD" | + "HKLM" | + "HKPD" | + "HKU" | + "SHCTX" | + "IDABORT" | + "IDCANCEL" | + "IDIGNORE" | + "IDNO" | + "IDOK" | + "IDRETRY" | + "IDYES" | + "LEFT" | + "MB_DEFBUTTON1" | + "MB_DEFBUTTON2" | + "MB_DEFBUTTON3" | + "MB_DEFBUTTON4" | + "MB_ICONEXCLAMATION" | + "MB_ICONINFORMATION" | + "MB_ICONQUESTION" | + "MB_ICONSTOP" | + "MB_OK" | + "MB_OKCANCEL" | + "MB_RETRYCANCEL" | + "MB_RIGHT" | + "MB_SETFOREGROUND" | + "MB_TOPMOST" | + "MB_YESNO" | + "MB_YESNOCANCEL" | + "NORMAL" | + "OFFLINE" | + "READONLY" | + "SYSTEM" | + "TEMPORARY" { addToken(Token.VARIABLE); } + + {LineTerminator} { addNullToken(); return firstToken; } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + {Identifier} { addToken(Token.IDENTIFIER); } + {Variable} { addToken(Token.VARIABLE); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + \" { start = zzMarkedPos-1; yybegin(STRING); } + \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } + \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as identifiers. */ + . { addToken(Token.IDENTIFIER); } + +} + + + { + [^\n\\\$\"]+ {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + return firstToken; + } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } +} + + + { + [^\n\\\$\']+ {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_CHAR); + return firstToken; + } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; } +} + + + { + [^\n\\\$\`]+ {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + return firstToken; + } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } +} + + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } +} + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java new file mode 100644 index 0000000..4b4cb91 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java @@ -0,0 +1,2976 @@ +/* The following code was generated by JFlex 1.4.1 on 10/2/15 11:34 PM */ + +/* + * 07/14/2014 + * + * NSISTokenMaker.java - Scanner for NSIS installer scripts. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for NSIS installer scripts.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated NSISTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + * + */ + +public class NSISTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 5; + public static final int STRING = 1; + public static final int CHAR_LITERAL = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 4; + public static final int BACKTICKS = 3; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\16\1\15\1\0\1\16\1\75\22\0\1\16\1\42\1\10"+ + "\1\11\1\13\1\41\1\44\1\51\2\31\1\17\1\33\1\52\1\34"+ + "\1\32\1\14\1\4\1\72\1\73\1\74\1\74\1\6\1\6\1\6"+ + "\1\3\1\3\1\45\1\20\1\35\1\36\1\40\1\43\1\50\1\26"+ + "\1\5\1\60\1\62\1\24\1\25\1\63\1\53\1\55\1\1\1\66"+ + "\1\27\1\64\1\57\1\61\1\54\1\71\1\23\1\30\1\22\1\7"+ + "\1\70\1\56\1\21\1\67\1\65\1\31\1\12\1\31\1\37\1\2"+ + "\1\76\1\26\1\5\1\60\1\62\1\24\1\77\1\63\1\100\1\55"+ + "\1\1\1\66\1\27\1\64\1\57\1\61\1\54\1\71\1\23\1\30"+ + "\1\22\1\7\1\70\1\101\1\21\1\67\1\65\1\46\1\37\1\47"+ + "\1\43\uff81\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 = + "\6\0\2\1\2\2\2\1\1\3\1\4\1\1\1\5"+ + "\1\6\1\7\1\5\2\1\1\10\2\1\1\10\2\1"+ + "\1\11\7\5\1\12\3\1\1\10\11\1\1\13\1\14"+ + "\1\15\1\16\1\14\1\17\1\14\1\20\1\21\1\22"+ + "\1\14\1\23\1\14\1\24\1\25\1\14\1\26\10\14"+ + "\1\27\6\14\1\0\1\30\1\31\1\30\6\1\2\10"+ + "\5\1\1\0\10\1\1\32\17\1\2\10\23\1\14\0"+ + "\45\1\1\33\1\34\1\0\1\35\1\0\1\36\4\14"+ + "\4\0\4\14\5\0\1\31\17\1\1\0\11\1\1\0"+ + "\33\1\1\10\12\1\1\10\13\1\10\0\1\37\2\0"+ + "\1\37\3\0\7\1\1\40\26\1\1\10\16\1\1\10"+ + "\20\1\4\0\4\14\4\0\4\14\5\0\14\1\1\0"+ + "\6\1\1\41\1\1\1\42\11\1\1\40\4\1\1\40"+ + "\1\1\1\10\34\1\1\10\5\1\16\0\1\10\30\1"+ + "\1\40\43\1\2\0\1\34\2\0\1\35\3\14\1\43"+ + "\2\0\3\14\1\44\3\0\11\1\1\0\101\1\14\0"+ + "\61\1\1\10\11\1\4\0\1\14\2\0\1\14\3\0"+ + "\10\1\1\0\41\1\1\40\22\1\1\10\1\1\7\0"+ + "\1\37\3\1\1\40\25\1\1\40\32\1\4\0\12\1"+ + "\1\0\30\1\1\10\20\1\1\37\6\1\5\0\55\1"+ + "\4\0\7\1\1\0\11\1\1\37\1\1\1\40\42\1"+ + "\3\0\2\1\1\40\45\1\2\0\44\1\3\0\60\1"+ + "\1\40\13\1\1\37\4\1\3\0\2\1\1\40\45\1"+ + "\1\40\6\1\1\0\10\1\1\40\147\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[1321]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\102\0\204\0\306\0\u0108\0\u014a\0\u018c\0\u01ce"+ + "\0\u0210\0\u0252\0\u0294\0\u02d6\0\u018c\0\u018c\0\u0318\0\u035a"+ + "\0\u018c\0\u039c\0\u03de\0\u0420\0\u0462\0\u04a4\0\u04e6\0\u0528"+ + "\0\u056a\0\u05ac\0\u05ee\0\u018c\0\u0630\0\u0672\0\u06b4\0\u06f6"+ + "\0\u0738\0\u018c\0\u077a\0\u018c\0\u07bc\0\u07fe\0\u0840\0\u0882"+ + "\0\u08c4\0\u0906\0\u0948\0\u098a\0\u09cc\0\u0a0e\0\u0a50\0\u0a92"+ + "\0\u0ad4\0\u018c\0\u0b16\0\u018c\0\u0b58\0\u0b9a\0\u018c\0\u0bdc"+ + "\0\u0b58\0\u018c\0\u018c\0\u0c1e\0\u0b58\0\u0c60\0\u018c\0\u018c"+ + "\0\u0ca2\0\u018c\0\u0ce4\0\u0d26\0\u0d68\0\u0daa\0\u0dec\0\u0e2e"+ + "\0\u0e70\0\u0eb2\0\u018c\0\u0ef4\0\u0f36\0\u0f78\0\u0fba\0\u0ffc"+ + "\0\u103e\0\u1080\0\u10c2\0\u1104\0\u1146\0\u1188\0\u11ca\0\u120c"+ + "\0\u124e\0\u1290\0\u12d2\0\u01ce\0\u018c\0\u1314\0\u1356\0\u1398"+ + "\0\u13da\0\u141c\0\u145e\0\u14a0\0\u14e2\0\u1524\0\u1566\0\u15a8"+ + "\0\u15ea\0\u162c\0\u166e\0\u16b0\0\u16f2\0\u1734\0\u1776\0\u17b8"+ + "\0\u17fa\0\u183c\0\u187e\0\u18c0\0\u1902\0\u1944\0\u1986\0\u19c8"+ + "\0\u1a0a\0\u1a4c\0\u1a8e\0\u1ad0\0\u1b12\0\u1b54\0\u1b96\0\u1bd8"+ + "\0\u1c1a\0\u1c5c\0\u1c9e\0\u1ce0\0\u1d22\0\u1d64\0\u1da6\0\u1de8"+ + "\0\u1e2a\0\u1e6c\0\u1eae\0\u1ef0\0\u1f32\0\u1f74\0\u1fb6\0\u1ff8"+ + "\0\u03de\0\u203a\0\u207c\0\u20be\0\u2100\0\u2142\0\u2184\0\u21c6"+ + "\0\u2208\0\u224a\0\u228c\0\u22ce\0\u2310\0\u2352\0\u2394\0\u23d6"+ + "\0\u2418\0\u245a\0\u249c\0\u24de\0\u2520\0\u2562\0\u25a4\0\u25e6"+ + "\0\u2628\0\u266a\0\u26ac\0\u26ee\0\u2730\0\u2772\0\u27b4\0\u27f6"+ + "\0\u2838\0\u287a\0\u28bc\0\u28fe\0\u2940\0\u2982\0\u29c4\0\u2a06"+ + "\0\u2a48\0\u2a8a\0\u2acc\0\u2b0e\0\u2b50\0\u2b92\0\u2bd4\0\u2c16"+ + "\0\u2c58\0\u018c\0\u2c9a\0\u2cdc\0\u2d1e\0\u2d60\0\u018c\0\u2da2"+ + "\0\u2de4\0\u2e26\0\u2e68\0\u2eaa\0\u2eec\0\u2f2e\0\u2f70\0\u2fb2"+ + "\0\u2ff4\0\u3036\0\u3078\0\u30ba\0\u30fc\0\u313e\0\u3180\0\u31c2"+ + "\0\u1146\0\u3204\0\u3246\0\u3288\0\u32ca\0\u330c\0\u334e\0\u3390"+ + "\0\u33d2\0\u3414\0\u1ad0\0\u3456\0\u3498\0\u34da\0\u351c\0\u355e"+ + "\0\u35a0\0\u35e2\0\u3624\0\u3666\0\u36a8\0\u36ea\0\u372c\0\u376e"+ + "\0\u37b0\0\u37f2\0\u3834\0\u3876\0\u38b8\0\u38fa\0\u393c\0\u397e"+ + "\0\u39c0\0\u3a02\0\u3a44\0\u3a86\0\u3ac8\0\u3b0a\0\u3b4c\0\u3b8e"+ + "\0\u3bd0\0\u3c12\0\u3c54\0\u3c96\0\u3cd8\0\u3d1a\0\u3d5c\0\u3d9e"+ + "\0\u3de0\0\u3e22\0\u3e64\0\u3ea6\0\u3ee8\0\u3f2a\0\u3f6c\0\u3fae"+ + "\0\u3ff0\0\u4032\0\u4074\0\u40b6\0\u40f8\0\u413a\0\u417c\0\u41be"+ + "\0\u4200\0\u4242\0\u4284\0\u42c6\0\u4308\0\u434a\0\u438c\0\u43ce"+ + "\0\u4410\0\u4452\0\u4494\0\u44d6\0\u4518\0\u455a\0\u459c\0\u45de"+ + "\0\u4620\0\u4662\0\u46a4\0\u46e6\0\u4728\0\u476a\0\u47ac\0\u47ee"+ + "\0\u018c\0\u4830\0\u4872\0\u48b4\0\u48f6\0\u4938\0\u497a\0\u49bc"+ + "\0\u49fe\0\u4a40\0\u4a82\0\u01ce\0\u4ac4\0\u4b06\0\u4b48\0\u4b8a"+ + "\0\u4bcc\0\u4c0e\0\u4c50\0\u4c92\0\u4cd4\0\u4d16\0\u4d58\0\u4d9a"+ + "\0\u4ddc\0\u4e1e\0\u4e60\0\u4ea2\0\u4ee4\0\u4f26\0\u4f68\0\u4faa"+ + "\0\u4fec\0\u502e\0\u5070\0\u50b2\0\u50f4\0\u5136\0\u5178\0\u51ba"+ + "\0\u51fc\0\u523e\0\u5280\0\u52c2\0\u5304\0\u5346\0\u5388\0\u53ca"+ + "\0\u540c\0\u544e\0\u5490\0\u54d2\0\u5514\0\u5556\0\u5598\0\u55da"+ + "\0\u561c\0\u565e\0\u56a0\0\u56e2\0\u5724\0\u5766\0\u57a8\0\u57ea"+ + "\0\u582c\0\u586e\0\u58b0\0\u58f2\0\u5934\0\u5976\0\u59b8\0\u59fa"+ + "\0\u5a3c\0\u5a7e\0\u5ac0\0\u5b02\0\u5b44\0\u5b86\0\u5bc8\0\u5c0a"+ + "\0\u5c4c\0\u5c8e\0\u5cd0\0\u5d12\0\u5d54\0\u5d96\0\u5dd8\0\u5e1a"+ + "\0\u5e5c\0\u5e9e\0\u5ee0\0\u5f22\0\u5f64\0\u5fa6\0\u5fe8\0\u602a"+ + "\0\u606c\0\u60ae\0\u60f0\0\u6132\0\u6174\0\u61b6\0\u61f8\0\u544e"+ + "\0\u623a\0\u627c\0\u018c\0\u62be\0\u01ce\0\u6300\0\u6342\0\u6384"+ + "\0\u63c6\0\u6408\0\u644a\0\u648c\0\u64ce\0\u6510\0\u6552\0\u6594"+ + "\0\u65d6\0\u6618\0\u665a\0\u669c\0\u66de\0\u6720\0\u6762\0\u67a4"+ + "\0\u67e6\0\u6828\0\u686a\0\u68ac\0\u68ee\0\u6930\0\u6972\0\u69b4"+ + "\0\u69f6\0\u6a38\0\u6a7a\0\u6abc\0\u6afe\0\u6b40\0\u6b82\0\u6bc4"+ + "\0\u6c06\0\u6c48\0\u6c8a\0\u6ccc\0\u6d0e\0\u6d50\0\u6d92\0\u6dd4"+ + "\0\u6e16\0\u6e58\0\u6e9a\0\u6edc\0\u6f1e\0\u6f60\0\u6fa2\0\u6fe4"+ + "\0\u7026\0\u7068\0\u70aa\0\u70ec\0\u712e\0\u7170\0\u71b2\0\u71f4"+ + "\0\u7236\0\u7278\0\u72ba\0\u72fc\0\u733e\0\u7380\0\u24de\0\u73c2"+ + "\0\u7404\0\u7446\0\u7488\0\u74ca\0\u750c\0\u754e\0\u7590\0\u75d2"+ + "\0\u7614\0\u7656\0\u7698\0\u76da\0\u771c\0\u775e\0\u77a0\0\u77e2"+ + "\0\u7824\0\u7866\0\u78a8\0\u78ea\0\u792c\0\u796e\0\u79b0\0\u79f2"+ + "\0\u7a34\0\u7a76\0\u7ab8\0\u7afa\0\u7b3c\0\u7b7e\0\u7bc0\0\u7c02"+ + "\0\u7c44\0\u7c86\0\u7cc8\0\u7d0a\0\u7d4c\0\u7d8e\0\u7dd0\0\u7e12"+ + "\0\u7e54\0\u7e96\0\u7ed8\0\u7f1a\0\u7f5c\0\u7f9e\0\u7fe0\0\u8022"+ + "\0\u8064\0\u80a6\0\u80e8\0\u812a\0\u816c\0\u81ae\0\u81f0\0\u8232"+ + "\0\u8274\0\u82b6\0\u82f8\0\u833a\0\u837c\0\u018c\0\u83be\0\u8400"+ + "\0\u018c\0\u8442\0\u8484\0\u84c6\0\u8508\0\u854a\0\u858c\0\u85ce"+ + "\0\u8610\0\u8652\0\u8694\0\u86d6\0\u8718\0\u875a\0\u879c\0\u87de"+ + "\0\u8820\0\u8862\0\u88a4\0\u88e6\0\u8928\0\u896a\0\u89ac\0\u89ee"+ + "\0\u8a30\0\u8a72\0\u8ab4\0\u8af6\0\u8b38\0\u8b7a\0\u8bbc\0\u8bfe"+ + "\0\u8c40\0\u8c82\0\u8cc4\0\u8d06\0\u8d48\0\u8d8a\0\u8dcc\0\u8e0e"+ + "\0\u8e50\0\u8e92\0\u8ed4\0\u8f16\0\u8f58\0\u8f9a\0\u8fdc\0\u901e"+ + "\0\u9060\0\u90a2\0\u90e4\0\u9126\0\u9168\0\u91aa\0\u91ec\0\u922e"+ + "\0\u9270\0\u92b2\0\u92f4\0\u9336\0\u9378\0\u93ba\0\u93fc\0\u943e"+ + "\0\u9480\0\u94c2\0\u9504\0\u9546\0\u9588\0\u95ca\0\u960c\0\u964e"+ + "\0\u9690\0\u96d2\0\u9714\0\u9756\0\u9798\0\u97da\0\u981c\0\u985e"+ + "\0\u98a0\0\u98e2\0\u9924\0\u9966\0\u99a8\0\u99ea\0\u9a2c\0\u9a6e"+ + "\0\u9ab0\0\u9af2\0\u9b34\0\u9b76\0\u9bb8\0\u9bfa\0\u9c3c\0\u9c7e"+ + "\0\u9cc0\0\u9d02\0\u9d44\0\u9d86\0\u9dc8\0\u9e0a\0\u9e4c\0\u9e8e"+ + "\0\u9ed0\0\u9f12\0\u9f54\0\u9f96\0\u9fd8\0\ua01a\0\ua05c\0\ua09e"+ + "\0\ua0e0\0\ua122\0\ua164\0\ua1a6\0\ua1e8\0\ua22a\0\ua26c\0\ua2ae"+ + "\0\ua2f0\0\ua332\0\ua374\0\ua3b6\0\ua3f8\0\ua43a\0\ua47c\0\ua4be"+ + "\0\ua500\0\ua542\0\ua584\0\ua5c6\0\ua608\0\ua64a\0\ua68c\0\ua6ce"+ + "\0\ua710\0\ua752\0\ua794\0\ua7d6\0\ua818\0\ua85a\0\ua89c\0\ua8de"+ + "\0\ua920\0\ua962\0\ua9a4\0\ua9e6\0\uaa28\0\uaa6a\0\uaaac\0\uaaee"+ + "\0\uab30\0\uab72\0\uabb4\0\uabf6\0\uac38\0\uac7a\0\uacbc\0\uacfe"+ + "\0\uad40\0\uad82\0\uadc4\0\uae06\0\uae48\0\u8508\0\uae8a\0\uaecc"+ + "\0\u8694\0\uaf0e\0\uaf50\0\uaf92\0\uafd4\0\ub016\0\ub058\0\ub09a"+ + "\0\ub0dc\0\ub11e\0\ub160\0\ub1a2\0\ub1e4\0\ub226\0\ub268\0\ub2aa"+ + "\0\ub2ec\0\ub32e\0\ub370\0\ub3b2\0\ub3f4\0\ub436\0\ub478\0\ub4ba"+ + "\0\ub4fc\0\ub53e\0\ub580\0\ub5c2\0\ub604\0\ub646\0\ub688\0\ub6ca"+ + "\0\ub70c\0\ub74e\0\ub790\0\ub7d2\0\ub814\0\ub856\0\ub898\0\ub8da"+ + "\0\ub91c\0\ub95e\0\ub9a0\0\ub9e2\0\uba24\0\uba66\0\ubaa8\0\ubaea"+ + "\0\ubb2c\0\ubb6e\0\ubbb0\0\ubbf2\0\ubc34\0\ubc76\0\ubcb8\0\ubcfa"+ + "\0\ubd3c\0\ubd7e\0\ubdc0\0\ube02\0\ube44\0\ube86\0\ubec8\0\ubf0a"+ + "\0\ubf4c\0\ubf8e\0\ubfd0\0\uc012\0\uc054\0\uc096\0\uc0d8\0\uc11a"+ + "\0\uc15c\0\uc19e\0\uc1e0\0\uc222\0\uc264\0\uc2a6\0\uc2e8\0\uc32a"+ + "\0\uc36c\0\uc3ae\0\uc3f0\0\uc432\0\uc474\0\uc4b6\0\uc4f8\0\uc53a"+ + "\0\uc57c\0\uc5be\0\uc600\0\uc642\0\uc684\0\uc6c6\0\uc708\0\uc74a"+ + "\0\uc78c\0\uc7ce\0\uc810\0\uc852\0\uc894\0\uc8d6\0\uc918\0\uc95a"+ + "\0\uc99c\0\uc9de\0\uca20\0\uca62\0\ucaa4\0\ucae6\0\ucb28\0\ucb6a"+ + "\0\ucbac\0\ucbee\0\ucc30\0\ucc72\0\uccb4\0\uccf6\0\ucd38\0\ucd7a"+ + "\0\ucdbc\0\ucdfe\0\uce40\0\uce82\0\ucec4\0\ucf06\0\ucf48\0\ucf8a"+ + "\0\ucfcc\0\ud00e\0\ud050\0\ud092\0\ud0d4\0\ud116\0\ud158\0\ud19a"+ + "\0\ud1dc\0\ud21e\0\ud260\0\ud2a2\0\ud2e4\0\u5070\0\ud326\0\ud368"+ + "\0\ud3aa\0\ud3ec\0\ud42e\0\ud470\0\ud4b2\0\ud4f4\0\ud536\0\ud578"+ + "\0\ud5ba\0\ud5fc\0\ud63e\0\ud680\0\ud6c2\0\ud704\0\ud746\0\ud788"+ + "\0\ud7ca\0\ud80c\0\ud84e\0\ud890\0\ud8d2\0\ud914\0\ud956\0\ud998"+ + "\0\ud9da\0\uda1c\0\uda5e\0\udaa0\0\udae2\0\udb24\0\udb66\0\udba8"+ + "\0\udbea\0\udc2c\0\udc6e\0\udcb0\0\udcf2\0\udd34\0\udd76\0\uddb8"+ + "\0\uddfa\0\ude3c\0\ude7e\0\udec0\0\udf02\0\udf44\0\udf86\0\udfc8"+ + "\0\ue00a\0\ue04c\0\ue08e\0\uba66\0\ue0d0\0\ue112\0\ue154\0\ue196"+ + "\0\ue1d8\0\ue21a\0\ue25c\0\ue29e\0\ue2e0\0\ue322\0\ue364\0\ue3a6"+ + "\0\ue3e8\0\ue42a\0\ue46c\0\ue4ae\0\ue4f0\0\ue532\0\ue574\0\ue5b6"+ + "\0\ue5f8\0\ue63a\0\ue67c\0\ue6be\0\ue700\0\ue742\0\ue784\0\ue7c6"+ + "\0\ue808\0\ue84a\0\ue88c\0\ue8ce\0\ue910\0\ue952\0\ue994\0\ue9d6"+ + "\0\uea18\0\uea5a\0\uea9c\0\ueade\0\ueb20\0\ueb62\0\ueba4\0\uebe6"+ + "\0\uec28\0\uec6a\0\uecac\0\uecee\0\ued30\0\ued72\0\uedb4\0\uedf6"+ + "\0\uee38\0\uee7a\0\ueebc\0\ueefe\0\uef40\0\uef82\0\uefc4\0\uf006"+ + "\0\uf048\0\uf08a\0\uf0cc\0\uf10e\0\uf150\0\uf192\0\uf1d4\0\uf216"+ + "\0\uf258\0\uf29a\0\uf2dc\0\uf31e\0\uf360\0\uf3a2\0\uf3e4\0\uf426"+ + "\0\uf468\0\uf4aa\0\uf4ec\0\uf52e\0\uf570\0\uf5b2\0\uf5f4\0\uf636"+ + "\0\uf678\0\uf6ba\0\uf6fc\0\uf73e\0\uf780\0\uf7c2\0\uf804\0\uf846"+ + "\0\uf888\0\uf8ca\0\uf90c\0\uf94e\0\uf990\0\uf9d2\0\ufa14\0\ufa56"+ + "\0\ufa98\0\ufada\0\ufb1c\0\ufb5e\0\ufba0\0\ufbe2\0\ufc24\0\ufc66"+ + "\0\ufca8\0\ufcea\0\ufd2c\0\ufd6e\0\ufdb0\0\ufdf2\0\ufe34\0\ufe76"+ + "\0\ufeb8\0\ufefa\0\uff3c\0\uff7e\0\uffc0\1\2\1\104\1\206"+ + "\1\310\1\u010a\1\u014c\1\u018e\1\u01d0\1\u0212\0\uaaac\1\u0254"+ + "\1\u0296\1\u02d8\1\u031a\1\u035c\1\u039e\1\u03e0\1\u0422\1\u0464"+ + "\1\u04a6\1\u04e8\1\u052a\1\u056c\1\u05ae\1\u05f0\1\u0632\1\u0674"+ + "\1\u06b6\1\u06f8\1\u073a\1\u077c\1\u07be\1\u0800\1\u0842\1\u0884"+ + "\1\u08c6\1\u0908\1\u094a\1\u098c\1\u09ce\1\u0a10\1\u0a52\1\u0a94"+ + "\1\u0ad6\1\u0b18\1\u0b5a\1\u0b9c\1\u0bde\1\u0c20\1\u0c62\1\u0ca4"+ + "\1\u0ce6\1\u0d28\1\u0d6a\1\u0dac\1\u0dee\1\u0e30\1\u0e72\1\u0eb4"+ + "\1\u0ef6\1\u0f38\1\u0f7a\1\u0fbc\1\u0ffe\1\u1040\1\u1082\1\u10c4"+ + "\1\u1106\1\u1148\1\u118a\1\u11cc\1\u120e\1\u1250\1\u1292\1\u12d4"+ + "\1\u1316\1\u1358\1\u139a\1\u13dc\1\u141e\1\u1460\1\u14a2\1\u14e4"+ + "\1\u1526\1\u1568\1\u15aa\1\u15ec\1\u162e\1\u1670\1\u16b2\1\u16f4"+ + "\1\u1736\1\u1778\1\u17ba\1\u17fc\1\u183e\1\u1880\1\u18c2\1\u1904"+ + "\1\u1946\1\u1988\1\u19ca\1\u1a0c\1\u1a4e\1\u1a90\1\u1ad2\1\u1b14"+ + "\1\u1b56\1\u1b98\1\u1bda\1\u1c1c\1\u1c5e\1\u1ca0\1\u1ce2\1\u1d24"+ + "\1\u1d66\1\u1da8\1\u1dea\1\u1e2c\1\u1e6e\1\u1eb0\1\u1ef2\1\u1f34"+ + "\1\u1f76\0\u01ce\1\u1fb8\1\u1ffa\1\u203c\1\u207e\1\u20c0\1\u2102"+ + "\1\u2144\1\u2186\1\u21c8\1\u220a\1\u224c\1\u228e\1\u22d0\1\u2312"+ + "\1\u2354\1\u2396\1\u23d8\1\u241a\1\u245c\1\u249e\1\u24e0\1\u2522"+ + "\1\u2564\1\u25a6\1\u25e8\1\u262a\1\u266c\1\u26ae\1\u26f0\1\u2732"+ + "\1\u2774\1\u27b6\1\u27f8\1\u283a\1\u287c\1\u28be\1\u2900\1\u2942"+ + "\1\u2984\1\u29c6\1\u2a08\1\u2a4a\1\u2a8c\1\u2ace\1\u2b10\1\u2b52"+ + "\1\u2b94\0\uf52e\1\u2bd6\1\u2c18\1\u2c5a\1\u2c9c\1\u2cde\1\u2d20"+ + "\1\u2d62\1\u2da4\1\u2de6\1\u2e28\1\u2e6a\1\u2eac\1\u2eee\1\u2f30"+ + "\1\u2f72\1\u2fb4\1\u2ff6\1\u3038\1\u307a\1\u30bc\1\u30fe\1\u3140"+ + "\1\u3182\1\u31c4\1\u3206\1\u3248\1\u328a\1\u32cc\1\u330e\1\u3350"+ + "\1\u3392\1\u33d4\1\u3416\1\u3458\1\u349a\1\u34dc\1\u351e\1\u3560"+ + "\1\u35a2\1\u35e4\1\u3626\1\u3668\1\u36aa\1\u36ec\1\u372e\1\u3770"+ + "\1\u37b2\1\u37f4\1\u3836\1\u3878\1\u38ba\1\u38fc\1\u393e\1\u3980"+ + "\1\u39c2\1\u3a04\1\u3a46\1\u3a88\1\u3aca\1\u3b0c\1\u3b4e\1\u3b90"+ + "\1\u3bd2\1\u3c14\1\u3c56\1\u3c98\1\u3cda\1\u3d1c\1\u3d5e\1\u3da0"+ + "\1\u3de2\1\u3e24\1\u3e66\1\u3ea8\1\u3eea\1\u3f2c\1\u3f6e\1\u3fb0"+ + "\1\u3ff2\1\u4034\1\u4076\1\u40b8\1\u40fa\1\u413c\1\u417e\1\u41c0"+ + "\1\u4202\1\u4244\1\u4286\1\u42c8\1\u430a\1\u434c\1\u438e\1\u43d0"+ + "\1\u4412\1\u4454\1\u4496\1\u44d8\1\u451a\1\u455c\1\u459e\1\u45e0"+ + "\1\u4622\1\u4664\1\u46a6\1\u46e8\1\u472a\1\u476c\1\u47ae\1\u47f0"+ + "\1\u4832\1\u4874\1\u48b6\1\u48f8\1\u493a\1\u497c\1\u49be\1\u4a00"+ + "\1\u4a42"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[1321]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\7\2\10\1\11\1\12\1\13\1\11\1\14\1\15"+ + "\1\16\1\7\1\17\1\20\1\21\1\22\1\23\1\16"+ + "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\7\1\35\1\36\1\37\2\23\1\40\1\23"+ + "\1\41\1\42\1\43\1\42\2\34\1\7\1\44\1\7"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ + "\1\55\1\56\1\57\2\10\1\60\1\61\3\11\1\7"+ + "\1\62\1\30\1\45\1\50\10\63\1\64\1\63\1\65"+ + "\1\66\1\63\1\67\64\63\12\70\1\71\1\66\1\70"+ + "\1\72\33\70\1\73\30\70\12\74\1\75\1\76\1\74"+ + "\1\77\60\74\1\100\3\74\15\101\1\102\1\101\1\103"+ + "\5\101\1\104\25\101\1\105\2\101\1\106\20\101\1\107"+ + "\1\110\1\111\15\112\1\113\7\112\1\114\25\112\1\115"+ + "\2\112\1\116\20\112\1\117\1\120\1\121\103\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\3\123\2\11\1\123\1\11\1\123\1\0\3\123"+ + "\5\0\10\123\17\0\1\123\2\0\17\123\3\11\1\0"+ + "\10\123\1\124\1\123\1\124\1\123\1\0\3\123\5\0"+ + "\1\125\7\123\17\0\1\123\2\0\17\123\3\124\1\0"+ + "\4\123\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\126\5\10\22\0\6\10\1\127\1\10\1\130\1\10"+ + "\1\131\7\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\132\22\0\4\10\1\133\15\10"+ + "\2\0\3\10\1\0\2\10\2\134\1\10\1\134\1\10"+ + "\2\0\1\122\1\134\1\10\1\135\3\0\1\10\1\136"+ + "\1\137\1\140\2\10\1\141\1\142\15\0\1\143\4\0"+ + "\1\144\1\145\1\146\1\147\1\10\1\150\1\151\1\152"+ + "\6\10\1\153\3\134\1\135\1\0\1\10\1\144\1\147"+ + "\1\0\7\10\2\0\1\122\2\10\2\0\1\154\1\0"+ + "\10\10\5\0\1\42\14\0\22\10\2\0\3\10\16\0"+ + "\1\22\121\0\1\42\44\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\155\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\156"+ + "\1\157\4\10\22\0\6\10\1\160\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\161"+ + "\1\10\1\162\2\10\22\0\2\10\1\163\3\10\1\134"+ + "\2\10\1\164\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\165\7\10\22\0\4\10\1\166"+ + "\15\10\2\0\3\10\1\0\2\10\1\134\2\10\1\134"+ + "\1\167\2\0\1\122\2\10\4\0\5\10\1\170\1\171"+ + "\1\10\22\0\2\10\1\172\3\10\1\173\10\10\1\174"+ + "\1\175\1\134\2\0\3\10\1\0\4\10\1\176\1\10"+ + "\1\177\2\0\1\122\2\10\4\0\2\10\1\200\3\10"+ + "\1\201\1\10\22\0\7\10\1\202\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\203"+ + "\1\10\1\204\2\10\22\0\2\10\1\205\3\10\1\206"+ + "\13\10\2\0\3\10\1\0\6\10\1\207\2\0\1\122"+ + "\2\10\4\0\1\10\1\210\1\10\1\211\2\10\1\212"+ + "\1\10\22\0\1\213\1\214\1\215\1\216\5\10\1\217"+ + "\2\10\1\220\5\10\2\0\1\10\1\213\1\216\33\0"+ + "\1\42\2\0\1\42\77\0\1\42\1\0\1\42\100\0"+ + "\1\221\1\42\101\0\1\42\1\0\1\23\50\0\1\222"+ + "\14\0\1\223\1\0\1\224\1\0\1\225\5\0\1\42"+ + "\15\0\1\226\1\227\1\230\1\0\1\231\1\0\1\232"+ + "\1\0\1\233\3\0\1\234\10\0\1\230\36\0\1\42"+ + "\5\0\1\42\36\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\235\10\10\1\236\6\10\2\0"+ + "\3\10\1\0\6\10\1\237\2\0\1\122\2\10\4\0"+ + "\5\10\1\240\1\241\1\10\22\0\6\10\1\242\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\243\2\10\1\244\22\0\4\10\1\245\1\246"+ + "\1\10\1\247\12\10\2\0\1\243\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\250\5\10\22\0"+ + "\2\10\1\251\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\252\1\10\1\253\2\10"+ + "\22\0\6\10\1\254\13\10\2\0\3\10\1\0\6\10"+ + "\1\255\2\0\1\122\2\10\4\0\2\10\1\256\1\257"+ + "\1\10\1\260\1\261\1\10\22\0\1\262\5\10\1\263"+ + "\13\10\2\0\1\10\1\262\1\10\1\0\6\10\1\264"+ + "\2\0\1\122\2\10\4\0\4\10\1\265\3\10\22\0"+ + "\4\10\1\134\15\10\2\0\1\265\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\266\4\10\22\0"+ + "\2\10\1\267\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\270\4\10\22\0\6\10"+ + "\1\271\13\10\2\0\3\10\1\0\4\10\1\272\2\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\273\1\10\1\274"+ + "\2\10\22\0\2\10\1\275\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\276\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\277\2\10\22\0\2\10\1\300"+ + "\17\10\2\0\3\10\1\0\6\10\1\301\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\10\63"+ + "\1\0\1\63\2\0\1\63\1\0\64\63\15\302\1\0"+ + "\64\302\1\0\2\303\2\0\1\303\1\0\1\303\3\0"+ + "\2\303\4\0\10\303\15\0\1\304\4\0\17\303\5\0"+ + "\3\303\12\70\2\0\1\70\1\0\33\70\1\0\30\70"+ + "\12\74\2\0\1\74\1\0\60\74\1\0\3\74\1\0"+ + "\2\305\2\0\1\305\1\0\1\305\3\0\2\305\4\0"+ + "\10\305\15\0\1\306\4\0\17\305\5\0\3\305\15\101"+ + "\1\0\1\101\1\0\57\101\17\0\1\307\65\0\15\101"+ + "\1\0\1\101\1\0\2\101\1\310\32\101\1\311\21\101"+ + "\3\0\15\101\1\0\1\101\1\0\2\101\1\312\54\101"+ + "\3\0\15\101\1\0\1\101\1\0\36\101\1\313\20\101"+ + "\2\0\1\314\22\0\1\315\32\0\1\316\46\0\1\317"+ + "\135\0\1\314\22\0\1\314\15\112\1\0\61\112\3\0"+ + "\15\112\1\0\4\112\1\320\32\112\1\321\21\112\3\0"+ + "\15\112\1\0\4\112\1\322\54\112\3\0\15\112\1\0"+ + "\40\112\1\323\20\112\2\0\1\324\22\0\1\325\32\0"+ + "\1\326\46\0\1\327\135\0\1\324\22\0\1\324\7\0"+ + "\1\330\72\0\10\123\1\0\3\123\5\0\10\123\17\0"+ + "\1\123\2\0\22\123\1\0\10\123\1\124\1\123\1\124"+ + "\1\123\1\0\3\123\5\0\10\123\17\0\1\123\2\0"+ + "\17\123\3\124\1\0\7\123\4\331\1\123\1\0\3\123"+ + "\5\0\3\123\3\331\2\123\17\0\1\123\2\0\5\123"+ + "\1\331\1\123\1\331\7\123\3\331\1\0\1\123\1\331"+ + "\2\123\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\332\2\10\22\0\2\10\1\333\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\334"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\10\10\1\335\11\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\336\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\337\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\340\5\10\22\0\2\10\1\341"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\342\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\3\10\1\343\3\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\344\7\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\345\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\346\6\10\22\0"+ + "\11\10\1\347\2\10\1\350\5\10\2\0\3\10\1\0"+ + "\2\351\2\0\1\351\1\0\1\351\3\0\2\351\4\0"+ + "\10\351\22\0\17\351\5\0\3\351\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\352\16\10"+ + "\2\0\2\10\1\352\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\353\3\10\1\354\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\355\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\356\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\11\10\1\357\10\10\2\0"+ + "\3\10\1\0\6\10\1\360\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\361\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\362\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\17\0\1\363"+ + "\63\0\7\10\2\0\1\122\2\10\4\0\7\10\1\364"+ + "\22\0\22\10\2\0\3\10\1\0\6\10\1\365\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\134\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\366\7\10\22\0\11\10\1\367\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\134\20\10\2\0\3\10\1\0\4\10\1\370"+ + "\2\10\2\0\1\122\2\10\4\0\1\10\1\371\3\10"+ + "\1\372\1\10\1\373\22\0\4\10\1\374\3\10\1\375"+ + "\5\10\1\376\3\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\377\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u0100\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ + "\1\u0101\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\134\1\10\1\u0102\4\10\22\0"+ + "\1\10\1\u0103\3\10\1\u0104\14\10\2\0\3\10\1\0"+ + "\6\10\1\u0105\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\134\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u0106\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u0107\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u0108\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0109\1\10\22\0\4\10\1\u010a\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u010b\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\2\10\2\134\1\10\1\134\1\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\17\10\3\134\2\0\3\10\1\0"+ + "\3\10\1\134\3\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\17\10\3\134\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u010c\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u010d\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u010e\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\134\4\10\1\u010f\1\10\22\0"+ + "\3\10\1\u0110\16\10\2\0\2\10\1\u0110\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u0111"+ + "\1\10\1\u0112\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\4\10\1\u0113\3\10\22\0\22\10"+ + "\2\0\1\u0113\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0114\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\366"+ + "\22\0\5\10\1\u0115\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0116\2\10\22\0"+ + "\10\10\1\u0117\11\10\2\0\3\10\1\0\4\10\1\u0118"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0119\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u011a\3\10"+ + "\1\u011b\2\10\22\0\4\10\1\u011c\1\u011d\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u011e\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\203"+ + "\2\10\1\u011f\1\u0120\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0121\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0122\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\1\10\1\u0123\5\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0124\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u0125\22\0\22\10\2\0\3\10\57\0\1\u0126"+ + "\45\0\1\u0127\3\0\1\u0128\27\0\1\u0129\1\u012a\103\0"+ + "\1\u012b\106\0\1\u012c\40\0\1\u012d\100\0\1\u012e\31\0"+ + "\1\u012f\17\0\1\u012e\30\0\1\u0130\135\0\1\u0131\43\0"+ + "\1\u0132\103\0\1\u0133\77\0\1\u0134\56\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u0135\1\u0136"+ + "\11\10\2\0\3\10\1\0\6\10\1\134\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0137\1\10\22\0\1\10\1\u0138"+ + "\3\10\1\u0139\1\10\1\u0138\12\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0104\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u013a\11\10\2\0\3\10"+ + "\1\0\6\10\1\u013b\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\1\10\1\u013c\20\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u013d\1\u013e\1\u013f\1\u0140\2\10\22\0\4\10\1\u0141"+ + "\15\10\2\0\1\u013f\2\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\3\10\1\u0142\16\10\2\0"+ + "\2\10\1\u0142\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0143\5\10\1\u0144\22\0\2\10\1\u0145\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0146\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0147\2\10"+ + "\1\u0148\2\10\22\0\2\10\1\u0149\1\10\1\u014a\1\u014b"+ + "\1\u014c\5\10\1\u014d\5\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u014e"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u014f\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u0150\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u013a\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0151\5\10\22\0\1\10\1\u013c\2\10\1\u0152"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0153\4\10\1\u0154\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0155\4\10\22\0\5\10\1\u0156\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0157\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u0158\1\10\22\0\1\10"+ + "\1\u0159\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u015a\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u015b\1\10\1\u015c\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u015d"+ + "\1\10\22\0\1\10\1\u015e\2\10\1\u015f\4\10\1\u0160"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0161\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\4\10\1\u0162"+ + "\3\10\22\0\22\10\2\0\1\u0162\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0163\4\10\1\u0164"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u0165\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0166\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0167\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\1\10\1\u0168\5\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u0169\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u016a\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u016b\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u016c"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u013c\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u016d"+ + "\1\u016e\1\10\22\0\1\10\1\u016f\3\10\1\u0170\1\10"+ + "\1\u0171\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0172\17\10\2\0"+ + "\3\10\1\0\7\303\2\0\1\u0173\2\303\4\0\10\303"+ + "\22\0\22\303\2\0\3\303\1\0\2\u0174\2\0\1\u0174"+ + "\1\0\1\u0174\3\0\2\u0174\4\0\10\u0174\22\0\17\u0174"+ + "\5\0\3\u0174\1\0\7\305\2\0\1\u0175\2\305\4\0"+ + "\10\305\22\0\22\305\2\0\3\305\1\0\2\u0176\2\0"+ + "\1\u0176\1\0\1\u0176\3\0\2\u0176\4\0\10\u0176\22\0"+ + "\17\u0176\5\0\3\u0176\15\101\1\0\1\101\1\0\34\101"+ + "\1\u0177\22\101\3\0\15\101\1\0\1\101\1\0\7\101"+ + "\1\u0178\47\101\3\0\15\101\1\0\1\101\1\0\2\101"+ + "\1\u0179\54\101\3\0\15\101\1\0\1\101\1\0\36\101"+ + "\1\u017a\20\101\2\0\1\u017b\56\0\1\u017b\22\0\1\u017b"+ + "\54\0\1\u017c\54\0\1\u017d\74\0\1\u017e\57\0\15\112"+ + "\1\0\36\112\1\u017f\22\112\3\0\15\112\1\0\11\112"+ + "\1\u0180\47\112\3\0\15\112\1\0\4\112\1\u0181\54\112"+ + "\3\0\15\112\1\0\40\112\1\u0182\20\112\2\0\1\u0183"+ + "\56\0\1\u0183\22\0\1\u0183\54\0\1\u0184\54\0\1\u0185"+ + "\74\0\1\u0186\62\0\4\u0187\15\0\3\u0187\31\0\1\u0187"+ + "\1\0\1\u0187\7\0\3\u0187\2\0\1\u0187\3\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0188"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0189\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u018a"+ + "\6\10\22\0\1\134\21\10\2\0\1\10\1\134\1\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u018b"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u018c\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\134\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u018d\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u018e\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\11\10\1\160\10\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u018f\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0190\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0191"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0192\22\0\1\10\1\u0193"+ + "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u018f\22\0\22\10\2\0\3\10\1\0"+ + "\7\351\2\0\1\u0194\2\351\4\0\10\351\16\0\1\135"+ + "\3\0\22\351\2\0\3\351\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u0195\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0196\13\10\2\0\3\10\1\0\6\10"+ + "\1\u0197\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\360\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u018f"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u0198\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u018f"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0199\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u019a\17\10\2\0\3\10\14\0\1\u019b"+ + "\66\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u019c"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u019d\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u019e\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ + "\1\u019f\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u01a0\13\10\2\0"+ + "\3\10\1\0\6\10\1\u01a1\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u01a2\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u01a3\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\253\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u01a4\12\10\2\0"+ + "\3\10\1\0\6\10\1\u01a5\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u01a6\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\1\u0113\21\10\2\0\1\10\1\u0113\1\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\277\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u01a7\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u01a8\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\u013c"+ + "\21\10\2\0\1\10\1\u013c\1\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u01a9\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u01aa\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\365\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u01ab\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01ac\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u01ad\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\5\10\1\u0152\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0172\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u01ae\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u01af\21\10\2\0\1\10\1\u01af\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u01b0"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u01b1\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\4\10\1\u01b2\2\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u01b3\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u01b4"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\134\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\u01b5\11\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u01b6\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\7\10\1\u01b7\12\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u01b8\5\10"+ + "\1\u01b9\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u01ba\22\0\5\10\1\u01bb"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u01bc\1\10\22\0\5\10\1\u01bd\14\10"+ + "\2\0\3\10\1\0\4\10\1\u01be\2\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u013d\1\u013e\1\u01bf\1\u01c0\1\10"+ + "\1\u01c1\22\0\1\10\1\u01c2\1\10\1\u01c3\1\10\1\u01c4"+ + "\1\u01c5\1\u01c6\12\10\2\0\1\u01bf\1\10\1\u01c3\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u01c7\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u01c8\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01c9\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\242\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u01ca\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\3\10\1\u01cb\16\10\2\0\2\10\1\u01cb\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u01cc"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u01cd\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u01ce"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u01cf\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01d0\6\10\22\0\22\10\2\0\3\10\62\0\1\u01d1"+ + "\42\0\1\u01d2\106\0\1\u01d3\133\0\1\u01d4\72\0\1\u01d5"+ + "\24\0\1\u01d5\63\0\1\u01d6\47\0\1\u01d7\131\0\1\u01d8"+ + "\100\0\1\u0126\2\0\1\u01d1\47\0\1\u01d9\27\0\1\u01da"+ + "\44\0\1\u01db\103\0\1\u01dc\51\0\1\u01dc\62\0\1\u01dd"+ + "\44\0\1\u01de\57\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u01df\4\10\22\0\7\10\1\u01e0\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\u01e1\21\10\2\0\1\10\1\u01e1\1\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ + "\1\134\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\134\12\10\2\0"+ + "\3\10\1\0\6\10\1\134\2\0\1\122\2\10\4\0"+ + "\2\10\1\134\5\10\22\0\5\10\1\134\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u013c\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u01e2"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u01e3\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u01e4"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u01e5\17\10"+ + "\2\0\3\10\1\0\4\10\1\176\2\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01e6\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u01e7\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\4\10"+ + "\1\u01e8\3\10\22\0\5\10\1\u01e9\1\242\13\10\2\0"+ + "\1\u01e8\2\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u01ea\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u01eb\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u013c\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u01ec\4\10\22\0\22\10\2\0\3\10\1\0\4\10"+ + "\1\u01ed\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u01ee\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\134\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u01ef\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\13\10\1\134\6\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01f0\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u01f1\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u01f2\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u01f3\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u01f4\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\134"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u01f5\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u018a\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u01f6\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u01f7\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\132\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u01f8\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u01f9\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u01fa"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u01fb\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u01fc\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u01fd\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\14\10\1\u01fe\5\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01ff\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\1\10\1\u0200"+ + "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\4\10\1\u0201\3\10\22\0\22\10\2\0\1\u0201"+ + "\2\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u0202\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0203\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u0204\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u01b8"+ + "\1\10\1\u0205\3\10\1\u0206\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0207"+ + "\2\10\1\u0208\1\10\1\u0209\1\10\22\0\3\10\1\u020a"+ + "\1\10\1\u020b\1\10\1\u020c\12\10\2\0\1\u0208\1\10"+ + "\1\u020a\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u013c\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u020d\1\u020e\2\10"+ + "\1\u020f\1\10\1\u0210\22\0\2\10\1\u0211\3\10\1\u0212"+ + "\1\u0213\4\10\1\u0214\5\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u0215\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\u01f4\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u0216"+ + "\14\10\2\0\3\10\1\0\4\10\1\134\2\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u0217\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0218\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0219\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u021a\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u021b\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u013c\6\10\22\0\22\10\2\0\3\10\7\0\1\u021c"+ + "\73\0\7\u0174\2\0\1\u021d\2\u0174\4\0\10\u0174\16\0"+ + "\1\u021e\3\0\22\u0174\2\0\3\u0174\7\0\1\u021f\73\0"+ + "\7\u0176\2\0\1\u0220\2\u0176\4\0\10\u0176\16\0\1\u0221"+ + "\3\0\22\u0176\2\0\3\u0176\15\101\1\0\1\101\1\0"+ + "\25\101\1\u0222\31\101\3\0\15\101\1\0\1\101\1\0"+ + "\4\101\1\u0177\52\101\3\0\15\101\1\0\1\101\1\0"+ + "\34\101\1\u0223\22\101\3\0\15\101\1\0\1\101\1\0"+ + "\12\101\1\u0224\44\101\35\0\1\u0225\114\0\1\u0226\60\0"+ + "\1\u017c\131\0\1\u0227\25\0\15\112\1\0\27\112\1\u0228"+ + "\31\112\3\0\15\112\1\0\6\112\1\u017f\52\112\3\0"+ + "\15\112\1\0\36\112\1\u0229\22\112\3\0\15\112\1\0"+ + "\14\112\1\u022a\44\112\35\0\1\u022b\114\0\1\u022c\60\0"+ + "\1\u0184\131\0\1\u022d\30\0\4\u022e\15\0\3\u022e\31\0"+ + "\1\u022e\1\0\1\u022e\7\0\3\u022e\2\0\1\u022e\3\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ + "\1\u022f\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u0230\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0137\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0231\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\20\10\1\134\1\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\375\11\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0232\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u0233\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u0234"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0235\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0236"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u0237\5\10\22\0\22\10"+ + "\2\0\3\10\7\0\1\u0238\73\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u0239\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u023a\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u023b"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\13\10\1\u023c\6\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u023d\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u023e\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u023f\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0240\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u0172\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0146\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0241\1\u0242\4\10"+ + "\22\0\2\10\1\u0243\3\10\1\u023f\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0244"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u0245\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0246\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0247\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u0248\22\0\3\10\1\u0249\16\10"+ + "\2\0\2\10\1\u0249\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u024a\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u024b"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u024c\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\1\u024d\21\10\2\0\1\10\1\u024d\1\10"+ + "\1\0\1\10\1\u024e\5\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u024f\1\u0250\3\10\1\u0251\22\0\3\10\1\u0252"+ + "\1\10\1\u0253\1\u0254\13\10\2\0\2\10\1\u0252\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0255\3\10"+ + "\22\0\3\10\1\u0142\1\u01b8\1\u0253\14\10\2\0\1\u0255"+ + "\1\10\1\u0142\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u0256\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0257\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\3\10\1\u0258\16\10\2\0"+ + "\2\10\1\u0258\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\14\10\1\u0259\5\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u025a\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u025b\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\134\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u025c\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u025d\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u025e\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u025f\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0172\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0106\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u0260\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0146"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u0261\7\10"+ + "\1\u0262\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u025a\5\10\22\0\13\10\1\u0263"+ + "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0264\3\10\1\u0265\13\10"+ + "\2\0\3\10\1\0\6\10\1\u0266\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0267\6\10\22\0"+ + "\1\u0268\21\10\2\0\1\10\1\u0268\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u0269\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u026a\17\10\2\0\3\10"+ + "\1\0\6\10\1\u026b\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u026c\13\10\2\0\3\10\1\0\6\10"+ + "\1\u026d\2\0\1\122\2\10\4\0\10\10\22\0\15\10"+ + "\1\u026e\4\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u026f\1\10\1\u0270\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\5\10\1\u0271\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\11\10\1\u0272\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0273\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\134\7\10\22\0\22\10\2\0\3\10\1\0\6\10"+ + "\1\u0274\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0275\1\u0142\16\10\2\0\2\10\1\u0142\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0276\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0277\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u0278\21\10\2\0\1\10\1\u0278\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0279\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u0137\4\10\22\0\22\10\2\0\3\10"+ + "\24\0\1\u027a\136\0\1\u027b\44\0\1\u0131\132\0\1\u027a"+ + "\105\0\1\u0131\74\0\1\u027c\1\u027d\46\0\1\u027e\145\0"+ + "\1\u027f\37\0\1\u0280\104\0\1\u0281\131\0\1\u0282\77\0"+ + "\1\u0283\47\0\1\u0284\63\0\1\u0285\75\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u01b4\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0286\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0287\17\10\2\0\3\10\1\0\4\10\1\u0288\2\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0289\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u028a\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\3\10\1\132\16\10\2\0\2\10"+ + "\1\132\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u028b\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u0172"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u028c\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u028d"+ + "\2\10\1\u028e\1\u028f\2\10\22\0\1\10\1\u0290\20\10"+ + "\2\0\1\u028e\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u0291\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0292"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0293\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u0294\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u0295\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\134\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0296"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0297\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0298\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u0299\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u029a\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u029b\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\1\u029c\21\10"+ + "\2\0\1\10\1\u029c\1\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u029d\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\246\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u029e\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\13\10\1\u029f\6\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\u02a0\11\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u02a1\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u02a2\3\10\22\0\22\10\2\0\1\u02a2\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u02a3"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u02a4\1\10\22\0\6\10"+ + "\1\u02a5\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u023e\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u02a6\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u02a7"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u02a8\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u02a9\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\u02aa\21\10\2\0"+ + "\1\10\1\u02aa\1\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u02ab\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\6\10\1\u02ac\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u02ad\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u02ae\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u02af\17\10\2\0\3\10"+ + "\1\0\6\10\1\u02b0\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u02b1\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u02b2\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02b3\4\10\22\0"+ + "\2\10\1\163\17\10\2\0\3\10\1\0\4\10\1\u02b4"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u02b5\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u02b6\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\13\10\1\u02b7\6\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u02b8\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02b9\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u02ba\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\4\10\1\u02bb\2\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u02bc\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u02bd\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u02be\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\11\10\1\u02bf\10\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u02c0\22\0\22\10\2\0\3\10\3\0\4\u02c1\15\0"+ + "\3\u02c1\31\0\1\u02c1\1\0\1\u02c1\7\0\3\u02c1\2\0"+ + "\1\u02c1\11\0\1\u02c2\75\0\4\u02c3\15\0\3\u02c3\31\0"+ + "\1\u02c3\1\0\1\u02c3\7\0\3\u02c3\2\0\1\u02c3\11\0"+ + "\1\u02c4\72\0\14\101\1\u02c5\1\0\1\101\1\0\57\101"+ + "\3\0\15\101\1\0\1\101\1\0\10\101\1\u0177\14\101"+ + "\1\u0222\31\101\3\0\1\101\7\u0224\1\101\1\u0224\1\101"+ + "\2\u0224\1\0\1\101\1\u02c6\15\u0224\1\101\1\u0224\2\101"+ + "\5\u0224\2\101\25\u0224\2\101\3\u0225\1\0\1\u0225\1\u02c6"+ + "\5\u0225\1\0\1\u02c6\1\0\2\u0225\2\0\2\u02c6\10\u0225"+ + "\4\u02c6\1\0\1\u02c6\2\0\5\u02c6\2\0\3\u02c6\22\u0225"+ + "\2\0\3\u0225\14\0\1\u02c7\115\0\1\u017c\14\0\1\u0226"+ + "\34\0\14\112\1\u02c8\1\0\61\112\3\0\15\112\1\0"+ + "\12\112\1\u017f\14\112\1\u0228\31\112\3\0\1\112\7\u022a"+ + "\1\112\1\u022a\1\112\2\u022a\1\0\1\112\16\u022a\1\112"+ + "\1\u022a\2\112\5\u022a\2\112\25\u022a\2\112\3\u022b\1\0"+ + "\1\u022b\1\u02c9\5\u022b\1\0\1\u02c9\1\0\2\u022b\2\0"+ + "\2\u02c9\10\u022b\4\u02c9\1\0\1\u02c9\2\0\5\u02c9\2\0"+ + "\3\u02c9\22\u022b\2\0\3\u022b\14\0\1\u02ca\115\0\1\u0184"+ + "\14\0\1\u022c\37\0\4\u02cb\15\0\3\u02cb\31\0\1\u02cb"+ + "\1\0\1\u02cb\7\0\3\u02cb\2\0\1\u02cb\3\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u02cc"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u02cd\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u02ce\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02cf\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\337\17\10\2\0\3\10\1\0"+ + "\6\10\1\u02d0\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u02d1\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u02d2"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u02d3\13\10"+ + "\2\0\3\10\3\0\4\u02d4\15\0\3\u02d4\31\0\1\u02d4"+ + "\1\0\1\u02d4\7\0\3\u02d4\2\0\1\u02d4\3\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\1\10\1\u02d5"+ + "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u02d6\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u02d7\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02d8\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\13\10\1\u02d9\6\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u013a\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u02da\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u02db\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02dc\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u02dd\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u02de\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\15\10\1\u02df\4\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u013c\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u02e0\22\0"+ + "\22\10\2\0\3\10\1\0\4\10\1\u02e1\2\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u02e2\21\10\2\0\1\10\1\u02e2\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\301\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u02e3\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u02e4"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u02e5\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u02e6\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u02e7\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u02e8\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u02e9\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02ea\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u02eb\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u02ec"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u01bc\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u02ed\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u02ee\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\15\10\1\u0152\4\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u02ef\4\10\1\u02f0\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u02f1\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u02f2\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\12\10\1\u013a\7\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02f3\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u02f4\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u02f5\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\u0172\7\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ + "\1\u0159\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\14\10\1\u013c\5\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\10\1\u02f6\20\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u02f7"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u02f8\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0172\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02f9\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u02fa\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u02fb\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\6\10\1\u02fc\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u02fd\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u02fe\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\11\10\1\u02ff\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0300\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u0301\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0302\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0303\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\u0300\21\10\2\0\1\10\1\u0300"+ + "\1\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0304\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0305"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0306\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0307\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0308\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0309\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u030a\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\1\134\21\10\2\0\1\10"+ + "\1\134\1\10\25\0\1\u0131\51\0\1\u0131\25\0\1\u0131"+ + "\105\0\1\u030b\131\0\1\u030c\46\0\1\u030d\130\0\1\u030e"+ + "\24\0\1\u030e\24\0\1\u030f\65\0\1\u0310\147\0\1\u0311"+ + "\103\0\1\u01d3\103\0\1\u0312\101\0\1\u0128\21\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u0113\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\164\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0313\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u0314\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0315\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u02aa"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u0316\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\14\10\1\u0317\5\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0318\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u0319\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u031a\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u031b\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u031c\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0113\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u031d\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u031e\14\10\2\0\3\10\1\0\6\10\1\u031f"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0320\5\10\22\0"+ + "\2\10\1\u0243\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\u0321\16\10"+ + "\2\0\2\10\1\u0321\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u0322\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\134\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u0113\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0323\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0324\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0325\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u013e"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\4\10\1\u0326"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0327\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0138\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0328\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0299\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0329\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u032a\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0152\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u032b\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u032c\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u032d\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u032e\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\11\10\1\u032f\10\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u0330\1\10\22\0"+ + "\4\10\1\u0331\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u0332\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\4\10\1\u0333\2\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u0334\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0335\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u0336\1\10\22\0\10\10\1\u0337\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u0338\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0339\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u033a\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u033b\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u033c\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\5\10\1\u014b\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\4\10\1\u033d\3\10\22\0"+ + "\22\10\2\0\1\u033d\2\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u033e\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\u033f\11\10\2\0\3\10\1\0\6\10\1\u0340"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\15\10\1\u0341\4\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0342\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u0343\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u0344\7\10\1\u0345\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u0346\14\10\2\0\3\10\3\0\4\u0347\15\0\3\u0347"+ + "\31\0\1\u0347\1\0\1\u0347\7\0\3\u0347\2\0\1\u0347"+ + "\5\0\4\u0348\15\0\3\u0348\31\0\1\u0348\1\0\1\u0348"+ + "\7\0\3\u0348\2\0\1\u0348\5\0\4\u0349\15\0\3\u0349"+ + "\31\0\1\u0349\1\0\1\u0349\7\0\3\u0349\2\0\1\u0349"+ + "\5\0\4\u034a\15\0\3\u034a\31\0\1\u034a\1\0\1\u034a"+ + "\7\0\3\u034a\2\0\1\u034a\2\0\14\101\1\u0224\1\0"+ + "\1\101\1\0\57\101\17\0\1\u0225\65\0\14\112\1\u022a"+ + "\1\0\61\112\17\0\1\u022b\70\0\4\10\15\0\3\10"+ + "\31\0\1\10\1\0\1\10\7\0\3\10\2\0\1\10"+ + "\3\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u034b\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u034c\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u034d\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u034e\2\10"+ + "\22\0\1\10\1\u034f\3\10\1\u0350\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0351"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u0352\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0353\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ + "\1\u0354\11\10\2\0\3\10\3\0\4\u0355\15\0\3\u0355"+ + "\31\0\1\u0355\1\0\1\u0355\7\0\3\u0355\2\0\1\u0355"+ + "\3\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0356"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u0357\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\350\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\160\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0358\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u031c\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0292\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u0359\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u035a\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u035a\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0161\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u035b\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\6\10\1\u035c\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u01a4"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u035d\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u035e\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u035f\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u0360\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0361\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0362\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0363\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0364"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0365\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0366\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0367\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u0368\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0369\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\13\10\1\u036a"+ + "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u036b\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u036c\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u036d\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u036e\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u036f\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u013c\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u0370\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0371\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0372\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0373\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0374\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u0375\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u0376"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0377\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u0378\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u0379\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u037a\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u037b\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u037c\1\10\1\u037d\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u037e\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u037f\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0275\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u0380\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0381\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\u0382\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0383\1\10\22\0\2\10\1\u0384\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\3\10\1\u0385\16\10\2\0\2\10\1\u0385"+ + "\7\0\1\u0386\152\0\1\u0387\105\0\1\u0131\77\0\1\u027b"+ + "\41\0\1\u0388\141\0\1\u01d3\76\0\1\u0389\46\0\1\u038a"+ + "\56\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u038b\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u038c\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u038d\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u013c\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u038e\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u014d"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u038f\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0390\13\10\2\0\3\10\1\0"+ + "\6\10\1\u0391\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\14\10\1\134\5\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0152"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0299\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u0392\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0393\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0394\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\u0395\21\10\2\0\1\10\1\u0395\1\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0396\2\10"+ + "\1\u0397\22\0\7\10\1\u0398\12\10\2\0\1\u0396\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u0364\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0399\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u039a\3\10\1\u01ca\13\10\2\0\3\10"+ + "\1\0\6\10\1\u0360\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u039b\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u039c\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u039d\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u0216\22\0\1\10\1\u039e\20\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u024b\5\10\22\0\2\10\1\u039f\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u0292\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\u013c\16\10"+ + "\2\0\2\10\1\u013c\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u03a0\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u03a1"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u03a2\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u03a3\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u03a4\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u03a5\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u03a6\5\10\22\0\2\10\1\u0377\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u03a7\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u03a8\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\11\10\1\u03a9\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u03aa\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u03ab\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\4\10"+ + "\1\u03ac\3\10\22\0\22\10\2\0\1\u03ac\2\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u03ad\15\10\2\0\3\10\1\0\4\10\1\u03ae\2\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u03af\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u03b0\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u03b1\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u03b2"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u03b3\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\u03b4\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u03b5\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u03b6\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u03b7"+ + "\5\10\22\0\22\10\2\0\3\10\3\0\4\u03b8\15\0"+ + "\3\u03b8\31\0\1\u03b8\1\0\1\u03b8\7\0\3\u03b8\2\0"+ + "\1\u03b8\5\0\4\u03b9\15\0\3\u03b9\31\0\1\u03b9\1\0"+ + "\1\u03b9\7\0\3\u03b9\2\0\1\u03b9\5\0\4\u03ba\15\0"+ + "\3\u03ba\31\0\1\u03ba\1\0\1\u03ba\7\0\3\u03ba\2\0"+ + "\1\u03ba\5\0\4\u03bb\15\0\3\u03bb\31\0\1\u03bb\1\0"+ + "\1\u03bb\7\0\3\u03bb\2\0\1\u03bb\3\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\10\10\1\u03bc\11\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u03bd\3\10\22\0\22\10\2\0\1\u03bd\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0265"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u03be\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\240\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u03bf\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u0152\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u03c0\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u03c1\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u03c2\5\10\22\0\22\10\2\0\3\10"+ + "\3\0\4\u03c3\15\0\3\u03c3\31\0\1\u03c3\1\0\1\u03c3"+ + "\7\0\3\u03c3\2\0\1\u03c3\3\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\11\10\1\u03c4\10\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u03c5\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u03c6\22\0\7\10"+ + "\1\u03c7\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u03c6\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u03c8"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u03c9\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u03ca\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u03cb\1\10\1\u03cc\4\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u03cd"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u013c\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u03ce"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u03cf\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u03d0\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u013c\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u03d1\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u013a\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0172\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u03d2\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u03d3\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u03d4\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u03d5\3\10"+ + "\22\0\22\10\2\0\1\u03d5\2\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u03d6\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u03d7\17\10\2\0\3\10\1\0"+ + "\4\10\1\u03d8\2\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01b8\2\10\1\u03d9\3\10\22\0\7\10\1\u03da\12\10"+ + "\2\0\1\u03d9\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u03db\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u03dc"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u03dd\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u0253\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u03de\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u03df\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u03e0\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u03e1"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u03e2\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u03e3"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u03e4\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\3\10\1\u03e5\16\10\2\0\2\10\1\u03e5"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u03e6\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u03e7\22\0\22\10\2\0"+ + "\3\10\1\0\4\10\1\u03e8\2\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u034f\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u03e9\3\10\1\u03ea\22\0\2\10\1\u0146\5\10"+ + "\1\u03ea\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u03eb\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\u03ec"+ + "\7\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u03ed\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u03ee\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u03ef\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u03f0\4\10\1\u03f1"+ + "\10\10\2\0\3\10\63\0\1\u03f2\45\0\1\u03f3\136\0"+ + "\1\u03f4\100\0\1\u0131\75\0\1\231\23\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u03f5\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\u03f6\7\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u03f7\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\4\10\1\u02bb\2\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u03f8\1\10"+ + "\1\u03f9\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u03fa\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u03fb\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u03fc"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u03fd\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\246\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u03fe\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0265\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\u03ff"+ + "\21\10\2\0\1\10\1\u03ff\1\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0400\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\375\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0401\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u038c\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0402\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0403"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0404\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0405\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\4\10\1\u0406\3\10\22\0\22\10"+ + "\2\0\1\u0406\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u0407\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0408"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0409\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u040a\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u040b\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u040c\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u040d\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u040e\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u0286\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\14\10\1\u040f\5\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0410\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0411\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0412\3\10"+ + "\1\u023c\22\0\2\10\1\u0413\13\10\1\u0414\3\10\2\0"+ + "\3\10\1\0\6\10\1\u0415\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u02b7\13\10"+ + "\2\0\3\10\1\0\4\10\1\u0416\2\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0417\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0418\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0419\6\10\22\0\5\10\1\u041a\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u041b\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u041c\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u03ec\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0260\17\10\2\0\3\10\3\0\4\303\15\0\3\303"+ + "\31\0\1\303\1\0\1\303\7\0\3\303\2\0\1\303"+ + "\5\0\4\u041d\15\0\3\u041d\31\0\1\u041d\1\0\1\u041d"+ + "\7\0\3\u041d\2\0\1\u041d\5\0\4\305\15\0\3\305"+ + "\31\0\1\305\1\0\1\305\7\0\3\305\2\0\1\305"+ + "\5\0\4\u041e\15\0\3\u041e\31\0\1\u041e\1\0\1\u041e"+ + "\7\0\3\u041e\2\0\1\u041e\3\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u01b8\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0396\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u041f\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0420\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0421\15\10\2\0\3\10\1\0\6\10\1\160"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u0422\2\10\22\0\22\10\2\0\3\10\3\0\4\351"+ + "\15\0\3\351\31\0\1\351\1\0\1\351\7\0\3\351"+ + "\2\0\1\351\3\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u028e\3\10\22\0\22\10\2\0\1\u028e\2\10"+ + "\1\0\6\10\1\u0423\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\277\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\3\10\1\u0424\16\10\2\0\2\10\1\u0424\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\u0425\7\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0426\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u0427\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0261\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u0428\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u03e9\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0429\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\4\10\1\u042a\2\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u03bc\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u03cf\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\244"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u042b\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\1\10\1\u01fe\20\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\134\3\10"+ + "\22\0\22\10\2\0\1\134\2\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u042c\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u042d\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u0263\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u042e\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u042f\2\10\22\0\22\10\2\0\3\10\1\0\6\10"+ + "\1\u0430\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\277\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0431\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u0432\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\15\10\1\u0433\4\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0434"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\3\10\1\u0435\16\10\2\0\2\10"+ + "\1\u0435\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u0436\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0437\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0104\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0438\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0439\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u043a\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u043b\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u043c\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u043d"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u043e\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u038c\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0384\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\134\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u043f\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0440\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u0441\2\10\22\0\2\10\1\u0442\17\10\2\0"+ + "\3\10\55\0\1\u0443\33\0\1\u0444\120\0\1\u0445\54\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0446\3\10"+ + "\22\0\22\10\2\0\1\u0446\2\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0447\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u0448\22\0\10\10\1\u0448\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u0449\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u044a\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u044b\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u044c\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u044d\15\10\2\0"+ + "\3\10\1\0\4\10\1\u044e\2\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u044f\3\10\1\u03c6\22\0\7\10\1\u03c7"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\3\10\1\134\16\10\2\0\2\10"+ + "\1\134\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0450\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0451\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u0452\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u03bc\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0453\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u0265\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0454\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0455\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u0456\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u0457"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0458\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0459"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\u03bc\16\10"+ + "\2\0\2\10\1\u03bc\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u045a\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u045b"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u045c\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u045d\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u045e\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\u045f\7\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0460\15\10\2\0\3\10\1\0\6\10\1\u0461"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0462\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0463"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u0464\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u0465"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0466\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0467\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0468\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\14\10\1\u0469\5\10\2\0\3\10"+ + "\3\0\4\u0174\15\0\3\u0174\31\0\1\u0174\1\0\1\u0174"+ + "\7\0\3\u0174\2\0\1\u0174\5\0\4\u0176\15\0\3\u0176"+ + "\31\0\1\u0176\1\0\1\u0176\7\0\3\u0176\2\0\1\u0176"+ + "\3\0\4\10\1\u02bb\2\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u01b8\5\10\1\u046a\22\0\2\10\1\u0394\2\10"+ + "\1\u01bb\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\4\10\1\u046b\3\10\22\0\22\10\2\0"+ + "\1\u046b\2\10\1\0\6\10\1\134\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u01f0"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u046c\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u046d\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u046e\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u046f\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0470\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0471\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u0472\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u0473\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\7\10\1\u0474\12\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u0475\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u0476\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0477\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0478\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u0479\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u047a"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\4\10\1\u03d8"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u047b\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u047c\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u047d\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u047e"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u047f\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u0473\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u0480\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\15\10\1\u013a\4\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0481\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u0482\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0483\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0484\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0485\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0151"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\u0486\7\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u0486\15\10\2\0\3\10\57\0\1\u0487"+ + "\104\0\1\u0488\77\0\1\u0489\22\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u048a\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u03ec\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u048b\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u0289\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u048c\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u048d\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u048e\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u048f\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u0146\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\u0490\7\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0491\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0492"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\242\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u01b8\5\10\1\134\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u0493"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0494\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0495\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0496"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u0497\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u0498\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u040a\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u0499\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u013c"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u049a\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u049b"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u049c\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u049d\3\10\22\0\22\10\2\0\1\u049d\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u049e"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u049f\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\u013c\7\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u03bc"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u04a0\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04a1"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u04a2\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\374\10\10\1\u04a3\4\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\374\15\10\2\0\3\10\1\0\6\10"+ + "\1\u04a4\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u04a5\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u0279\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u04a6\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\5\10\1\u04a7\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u01f0"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u04a8\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\6\10\1\u013a\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\4\10\1\u04a9\2\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u013a\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u04aa"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u04ab\11\10\2\0\3\10"+ + "\1\0\6\10\1\242\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u04ac\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u013c\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u02df"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u04ad\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04ae"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u04af\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u04b0\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04b1\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u04b2\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u039e\13\10\1\u04b3\4\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u04b4\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u01b8\2\10\1\u04b5\2\10\1\u01b3"+ + "\22\0\2\10\1\u04b6\17\10\2\0\1\u04b5\2\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04b7\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u01a4\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u04b8\17\10\2\0\3\10\62\0\1\u04b9"+ + "\43\0\1\u0487\100\0\1\u01d5\57\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u04ba\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u03bc\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u04bb\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u04bc\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\164\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u04bd\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u04be\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u04bf\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u04c0\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\277\1\10"+ + "\1\u04c1\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0469\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\u0469\21\10\2\0\1\10\1\u0469"+ + "\1\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u040a\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u04c2\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u04c3\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u04c4\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u04c5\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u04c6\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u04c7\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u04c8\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u04c9\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u04ca\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u04cb\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ + "\1\u04cc\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\14\10\1\u04cd\5\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u04ce\4\10\22\0\22\10\2\0\3\10\1\0\4\10"+ + "\1\u04cf\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0137\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u013c\12\10\2\0\3\10\1\0\6\10\1\u04d0"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u04d1\5\10\22\0\22\10\2\0\3\10\1\0\6\10"+ + "\1\u04d2\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u03ed\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u04d3\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u04d4\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u04d5\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u0417"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u04d6\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u04ba\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u04d7\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u04d8\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u04d9\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u04da\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u04db\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u04dc\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u04dd\10\10\2\0\3\10"+ + "\55\0\1\u027b\25\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u013c\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u04de\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u04df\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04e0"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u04e1\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u04e2\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04e3\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u013c\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u04e4\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u04e5\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u04e6\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04e7"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u04e8\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u04e9\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u04e9\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u04ea\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u04eb\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u04ec"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u04ed\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04ee"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u04ef\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u01bb\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04f0\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u04f1\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u04f2\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u034f"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u04f3\22\0\22\10\2\0\3\10\1\0"+ + "\4\10\1\u04f4\2\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u04f5\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\10\1\u013a\20\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u032e\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u04f6\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04f7"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u04f8\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u04f9\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u04fa"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u04ec\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\4\10\1\u04b5"+ + "\3\10\22\0\22\10\2\0\1\u04b5\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u04fb\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u04fc\15\10\2\0\3\10"+ + "\1\0\6\10\1\u0172\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u04fd\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u04fe\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u04ff\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u04c2\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\14\10\1\u0500\5\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0501\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\11\10\1\u0502\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0503\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\17\10\3\134\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\13\10\1\u03cb\6\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u0504\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u0505\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u01f9\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0506\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u04f7\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0507\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0508\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u0509\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u04a6\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u050a\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\10\10\1\u038c\11\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u050b\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u038c\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\12\10\1\u02a1\7\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u050c\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u035a"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0261\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u050d\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u038c\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u0149\17\10\2\0\3\10\1\0\6\10"+ + "\1\u050e\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u04c9\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u01b4\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u050f\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u0510\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0511"+ + "\13\10\2\0\3\10\1\0\1\10\1\u0512\5\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u0513"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u039b\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0514\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0515\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\277\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u0245\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0138"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0516\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u03ec\21\10\2\0\1\10\1\u03ec\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0517"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0518\1\u0519\2\10\1\u051a\1\10\1\u051b"+ + "\22\0\1\u051c\3\10\1\u03f0\1\10\1\u051d\13\10\2\0"+ + "\1\10\1\u051c\1\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u051e\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u051f\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u0520\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\13\10\1\u038c\6\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u0521\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u0522\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0523\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\200\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\14\10\1\220\5\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u0524\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\4\10\1\u0525\3\10\22\0\22\10"+ + "\2\0\1\u0525\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\5\10\1\u0159\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\11\10\1\u01b3\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u039b\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0526\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ + "\1\367\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u0527\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u0528\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\4\10\1\u0198\3\10\22\0"+ + "\22\10\2\0\1\u0198\2\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\15\10\1\u0529\4\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u019e\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u01e0"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u0245\4\10\22\0\22\10\2\0\3\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[84612]; + 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; + } + + + /* 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; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\1\11\5\1\2\11\2\1\1\11\12\1\1\11"+ + "\5\1\1\11\1\1\1\11\15\1\1\11\1\1\1\11"+ + "\2\1\1\11\2\1\2\11\3\1\2\11\1\1\1\11"+ + "\10\1\1\11\6\1\1\0\12\1\1\11\5\1\1\0"+ + "\55\1\14\0\45\1\1\11\1\1\1\0\1\1\1\0"+ + "\1\11\4\1\4\0\4\1\5\0\20\1\1\0\11\1"+ + "\1\0\62\1\10\0\1\1\2\0\1\11\3\0\76\1"+ + "\4\0\4\1\4\0\4\1\5\0\14\1\1\0\6\1"+ + "\1\11\65\1\16\0\75\1\2\0\1\11\2\0\1\11"+ + "\4\1\2\0\4\1\3\0\11\1\1\0\101\1\14\0"+ + "\73\1\4\0\1\1\2\0\1\1\3\0\10\1\1\0"+ + "\66\1\7\0\65\1\4\0\12\1\1\0\60\1\5\0"+ + "\55\1\4\0\7\1\1\0\56\1\3\0\50\1\2\0"+ + "\44\1\3\0\101\1\3\0\57\1\1\0\160\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[1321]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public NSISTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public NSISTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public NSISTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 204) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { addToken(Token.IDENTIFIER); + } + case 37: break; + case 34: + { addToken(Token.LITERAL_BOOLEAN); + } + case 38: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 39: break; + case 19: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + return firstToken; + } + case 40: break; + case 27: + { /* Skip all escaped chars. */ + } + case 41: break; + case 24: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 42: break; + case 3: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 43: break; + case 32: + { addToken(Token.FUNCTION); + } + case 44: break; + case 8: + { addToken(Token.VARIABLE); + } + case 45: break; + case 16: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_CHAR); + return firstToken; + } + case 46: break; + case 14: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + return firstToken; + } + case 47: break; + case 17: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; + } + case 48: break; + case 18: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 49: break; + case 25: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 50: break; + case 26: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 51: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 52: break; + case 30: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 53: break; + case 10: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 54: break; + case 2: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 55: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 56: break; + case 4: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 57: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + } + case 58: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 59: break; + case 15: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; + } + case 60: break; + case 31: + { addToken(Token.RESERVED_WORD); + } + case 61: break; + case 35: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 62: break; + case 20: + { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 63: break; + case 23: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 64: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 65: break; + case 6: + { addNullToken(); return firstToken; + } + case 66: break; + case 22: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 67: break; + case 5: + { addToken(Token.OPERATOR); + } + case 68: break; + case 36: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 69: break; + case 33: + { addToken(Token.COMMENT_MULTILINE); + } + case 70: break; + case 11: + { start = zzMarkedPos-1; yybegin(BACKTICKS); + } + case 71: break; + case 12: + { + } + case 72: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 1322: break; + case STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; + } + case 1323: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; + } + case 1324: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 1325: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 1326: break; + case BACKTICKS: { + addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 1327: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex new file mode 100644 index 0000000..d92fe72 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex @@ -0,0 +1,2574 @@ +/* + * 01/28/2009 + * + * PHPTokenMaker.java - Generates tokens for PHP syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for PHP files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PHPTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class PHPTokenMaker +%extends AbstractMarkupTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to PHPTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + private static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to PHPTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + private static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in JavaScript. + */ + private static final int INTERNAL_IN_JS = -10; + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -12; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -13; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -14; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -15; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -16; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -17; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -18; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -19; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * Token type specifying we're in PHP. This particular field is public so + * that we can hack and key off of it for code completion. + */ + public static final int INTERNAL_IN_PHP = -(4<<11); + + /** + * Token type specifying we're in a PHP multiline comment. + */ + private static final int INTERNAL_IN_PHP_MLC = -(5<<11); + + /** + * Token type specifying we're in a PHP multiline string. + */ + private static final int INTERNAL_IN_PHP_STRING = -(6<<11); + + /** + * Token type specifying we're in a PHP multiline char. + */ + private static final int INTERNAL_IN_PHP_CHAR = -(7<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether closing markup tags are automatically completed for PHP. + */ + private static boolean completeCloseTags; + + /** + * The state PHP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int phpInState; + + /** + * The language index we were in when PHP was started. + */ + private int phpInLangIndex; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + + /** + * Language state set on PHP. + */ + private static final int LANG_INDEX_PHP = 3; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PHPTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds an end token that encodes the information necessary to return + * to the pre-PHP state and language index. + * + * @param endTokenState The PHP-related end-token state. + */ + private void addPhpEndToken(int endTokenState) { + addEndToken(endTokenState - phpInState - (phpInLangIndex<<16)); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS || + languageIndex==LANG_INDEX_PHP; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + case LANG_INDEX_PHP: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + phpInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_PHPxxx - phpInState + int main = -(-initialTokenType & 0x0000ff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_PHP: + state = PHP; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_MLC: + state = PHP_MLC; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_STRING: + state = PHP_STRING; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_CHAR: + state = PHP_CHAR; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = YYINITIAL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Overridden to remember the language index we're leaving. + */ + @Override + protected void yybegin(int state, int languageIndex) { + phpInLangIndex = getLanguageIndex(); + yybegin(state); + setLanguageIndex(languageIndex); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +// HTML-specific stuff. +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) +Identifier = ([^ \t\n<&]+) +EntityReference = ([&][^; \t]*[;]?) +InTagIdentifier = ([^ \t\n\"\'/=>]+) +EndScriptTag = ("") +EndStyleTag = ("") + + +// General stuff. +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrUnderscore = ({Letter}|"_") +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + + +// JavaScript stuff. +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_DocCommentBegin = "/**" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) +JS_BooleanLiteral = ("true"|"false") + +JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| + "callback"|"classdesc"|"constant"|"constructor"|"constructs"| + "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| + "example"|"exports"|"external"|"file"|"fires"|"global"| + "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| + "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| + "name"|"namespace"|"param"|"private"|"property"|"protected"| + "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| + "static"|"summary"|"this"|"throws"|"todo"| + "type"|"typedef"|"variation"|"version") +JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") +JS_TemplateLiteralExprStart = ("${") + +// PHP stuff (most PHP stuff is shared with JS for simplicity) +PHP_Start = (" { + "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } +} + + { + [^\n>]+ {} + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } +} + + { + [Aa] | + [aA][bB][bB][rR] | + [aA][cC][rR][oO][nN][yY][mM] | + [aA][dD][dD][rR][eE][sS][sS] | + [aA][pP][pP][lL][eE][tT] | + [aA][rR][eE][aA] | + [aA][rR][tT][iI][cC][lL][eE] | + [aA][sS][iI][dD][eE] | + [aA][uU][dD][iI][oO] | + [bB] | + [bB][aA][sS][eE] | + [bB][aA][sS][eE][fF][oO][nN][tT] | + [bB][dD][oO] | + [bB][gG][sS][oO][uU][nN][dD] | + [bB][iI][gG] | + [bB][lL][iI][nN][kK] | + [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] | + [bB][oO][dD][yY] | + [bB][rR] | + [bB][uU][tT][tT][oO][nN] | + [cC][aA][nN][vV][aA][sS] | + [cC][aA][pP][tT][iI][oO][nN] | + [cC][eE][nN][tT][eE][rR] | + [cC][iI][tT][eE] | + [cC][oO][dD][eE] | + [cC][oO][lL] | + [cC][oO][lL][gG][rR][oO][uU][pP] | + [cC][oO][mM][mM][aA][nN][dD] | + [cC][oO][mM][mM][eE][nN][tT] | + [dD][dD] | + [dD][aA][tT][aA][gG][rR][iI][dD] | + [dD][aA][tT][aA][lL][iI][sS][tT] | + [dD][aA][tT][aA][tT][eE][mM][pP][lL][aA][tT][eE] | + [dD][eE][lL] | + [dD][eE][tT][aA][iI][lL][sS] | + [dD][fF][nN] | + [dD][iI][aA][lL][oO][gG] | + [dD][iI][rR] | + [dD][iI][vV] | + [dD][lL] | + [dD][tT] | + [eE][mM] | + [eE][mM][bB][eE][dD] | + [eE][vV][eE][nN][tT][sS][oO][uU][rR][cC][eE] | + [fF][iI][eE][lL][dD][sS][eE][tT] | + [fF][iI][gG][uU][rR][eE] | + [fF][oO][nN][tT] | + [fF][oO][oO][tT][eE][rR] | + [fF][oO][rR][mM] | + [fF][rR][aA][mM][eE] | + [fF][rR][aA][mM][eE][sS][eE][tT] | + [hH][123456] | + [hH][eE][aA][dD] | + [hH][eE][aA][dD][eE][rR] | + [hH][rR] | + [hH][tT][mM][lL] | + [iI] | + [iI][fF][rR][aA][mM][eE] | + [iI][lL][aA][yY][eE][rR] | + [iI][mM][gG] | + [iI][nN][pP][uU][tT] | + [iI][nN][sS] | + [iI][sS][iI][nN][dD][eE][xX] | + [kK][bB][dD] | + [kK][eE][yY][gG][eE][nN] | + [lL][aA][bB][eE][lL] | + [lL][aA][yY][eE][rR] | + [lL][eE][gG][eE][nN][dD] | + [lL][iI] | + [lL][iI][nN][kK] | + [mM][aA][pP] | + [mM][aA][rR][kK] | + [mM][aA][rR][qQ][uU][eE][eE] | + [mM][eE][nN][uU] | + [mM][eE][tT][aA] | + [mM][eE][tT][eE][rR] | + [mM][uU][lL][tT][iI][cC][oO][lL] | + [nN][aA][vV] | + [nN][eE][sS][tT] | + [nN][oO][bB][rR] | + [nN][oO][eE][mM][bB][eE][dD] | + [nN][oO][fF][rR][aA][mM][eE][sS] | + [nN][oO][lL][aA][yY][eE][rR] | + [nN][oO][sS][cC][rR][iI][pP][tT] | + [oO][bB][jJ][eE][cC][tT] | + [oO][lL] | + [oO][pP][tT][gG][rR][oO][uU][pP] | + [oO][pP][tT][iI][oO][nN] | + [oO][uU][tT][pP][uU][tT] | + [pP] | + [pP][aA][rR][aA][mM] | + [pP][lL][aA][iI][nN][tT][eE][xX][tT] | + [pP][rR][eE] | + [pP][rR][oO][gG][rR][eE][sS][sS] | + [qQ] | + [rR][uU][lL][eE] | + [sS] | + [sS][aA][mM][pP] | + [sS][cC][rR][iI][pP][tT] | + [sS][eE][cC][tT][iI][oO][nN] | + [sS][eE][lL][eE][cC][tT] | + [sS][eE][rR][vV][eE][rR] | + [sS][mM][aA][lL][lL] | + [sS][oO][uU][rR][cC][eE] | + [sS][pP][aA][cC][eE][rR] | + [sS][pP][aA][nN] | + [sS][tT][rR][iI][kK][eE] | + [sS][tT][rR][oO][nN][gG] | + [sS][tT][yY][lL][eE] | + [sS][uU][bB] | + [sS][uU][pP] | + [tT][aA][bB][lL][eE] | + [tT][bB][oO][dD][yY] | + [tT][dD] | + [tT][eE][xX][tT][aA][rR][eE][aA] | + [tT][fF][oO][oO][tT] | + [tT][hH] | + [tT][hH][eE][aA][dD] | + [tT][iI][mM][eE] | + [tT][iI][tT][lL][eE] | + [tT][rR] | + [tT][tT] | + [uU] | + [uU][lL] | + [vV][aA][rR] | + [vV][iI][dD][eE][oO] { addToken(Token.MARKUP_TAG_NAME); } + {InTagIdentifier} { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); } + . { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + "/>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\"<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\'<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\"<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\'<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\"<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\'<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } +} + + { + + {EndScriptTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + + // ECMA 3+ keywords. + "break" | + "continue" | + "delete" | + "else" | + "for" | + "function" | + "if" | + "in" | + "new" | + "this" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //JavaScript 1.6 + "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + + // Reserved (but not yet used) ECMA keywords. + "abstract" { addToken(Token.RESERVED_WORD); } + "boolean" { addToken(Token.DATA_TYPE); } + "byte" { addToken(Token.DATA_TYPE); } + "case" { addToken(Token.RESERVED_WORD); } + "catch" { addToken(Token.RESERVED_WORD); } + "char" { addToken(Token.DATA_TYPE); } + "class" { addToken(Token.RESERVED_WORD); } + "const" { addToken(Token.RESERVED_WORD); } + "debugger" { addToken(Token.RESERVED_WORD); } + "default" { addToken(Token.RESERVED_WORD); } + "do" { addToken(Token.RESERVED_WORD); } + "double" { addToken(Token.DATA_TYPE); } + "enum" { addToken(Token.RESERVED_WORD); } + "export" { addToken(Token.RESERVED_WORD); } + "extends" { addToken(Token.RESERVED_WORD); } + "final" { addToken(Token.RESERVED_WORD); } + "finally" { addToken(Token.RESERVED_WORD); } + "float" { addToken(Token.DATA_TYPE); } + "goto" { addToken(Token.RESERVED_WORD); } + "implements" { addToken(Token.RESERVED_WORD); } + "import" { addToken(Token.RESERVED_WORD); } + "instanceof" { addToken(Token.RESERVED_WORD); } + "int" { addToken(Token.DATA_TYPE); } + "interface" { addToken(Token.RESERVED_WORD); } + "long" { addToken(Token.DATA_TYPE); } + "native" { addToken(Token.RESERVED_WORD); } + "package" { addToken(Token.RESERVED_WORD); } + "private" { addToken(Token.RESERVED_WORD); } + "protected" { addToken(Token.RESERVED_WORD); } + "public" { addToken(Token.RESERVED_WORD); } + "short" { addToken(Token.DATA_TYPE); } + "static" { addToken(Token.RESERVED_WORD); } + "super" { addToken(Token.RESERVED_WORD); } + "switch" { addToken(Token.RESERVED_WORD); } + "synchronized" { addToken(Token.RESERVED_WORD); } + "throw" { addToken(Token.RESERVED_WORD); } + "throws" { addToken(Token.RESERVED_WORD); } + "transient" { addToken(Token.RESERVED_WORD); } + "try" { addToken(Token.RESERVED_WORD); } + "volatile" { addToken(Token.RESERVED_WORD); } + "null" { addToken(Token.RESERVED_WORD); } + + // Literals. + {JS_BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + + /* Operators. */ + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addEndToken(INTERNAL_IN_JS); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\"<]+ {} + "<" { /* Allowing " continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\'<]+ {} + "<" { /* Allowing " continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf<\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } + {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + + + { + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } +} + + + { + [^hwf<\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + +} + + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtKeyword} { addToken(Token.REGEX); } + {CSS_Id} { addToken(Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Property} { addToken(Token.RESERVED_WORD); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.ANNOTATION); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\"<]+ {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\'<]+ {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^hwf\n\*<]+ {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} + + + { + + "?>" { yybegin(phpInState, phpInLangIndex); addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; } + + /* Error control operator */ + ("@"{JS_Identifier}) { + int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.FUNCTION); + zzMarkedPos -= (count-1); //yypushback(count-1); + } + + /* Keywords */ + "__CLASS__" | + "__DIR__" | + "__FILE__" | + "__FUNCTION__" | + "__METHOD__" | + "__NAMESPACE__" | + "abstract" | + "and" | + "array" | + "as" | + "break" | + "case" | + "catch" | + "cfunction" | + "class" | + "clone" | + "const" | + "continue" | + "declare" | + "default" | + "die" | + "do" | + "echo" | + "else" | + "elseif" | + "empty" | + "enddeclare" | + "endfor" | + "endforeach" | + "endif" | + "endswitch" | + "endwhile" | + "eval" | + "extends" | + "final" | + "for" | + "foreach" | + "function" | + "global" | + "goto" | + "if" | + "implements" | + "include" | + "include_once" | + "interface" | + "instanceof" | + "isset" | + "list" | + "namespace" | + "new" | + "old_function" | + "or" | + "print" | + "private" | + "protected" | + "public" | + "require" | + "require_once" | + "static" | + "switch" | + "throw" | + "try" | + "unset" | + "use" | + "var" | + "while" | + "xor" | + + "parent" | + "self" | + "stdClass" { addToken(Token.RESERVED_WORD); } + + "exit" | + "return" { addToken(Token.RESERVED_WORD_2); } + + /* Functions */ + "__call" | + "__construct" | + "__getfunctions" | + "__getlastrequest" | + "__getlastresponse" | + "__gettypes" | + "__tostring" | + "abs" | + "acos" | + "acosh" | + "add" | + ("add"("_namespace"|"_root"|"action"|"color"|"cslashes"|"entry"|"fill"|"function"|"shape"|"slashes"|"string")) | + "aggregate" | + "aggregate_info" | + "aggregate_methods" | + "aggregate_methods_by_list" | + "aggregate_methods_by_regexp" | + "aggregate_properties" | + "aggregate_properties_by_list" | + "aggregate_properties_by_regexp" | + "aggregation_info" | + "align" | + ("apd_"("breakpoint"|"callstack"|"clunk"|"continue"|"croak"|"dump_function_table"|"dump_persistent_resources"|"dump_regular_resources"|"echo"|"get_active_symbols"|"set_pprof_trace"|"set_session"|"set_session_trace"|"set_socket_session_trace")) | + "append" | + "append_child" | + "append_sibling" | + "appendchild" | + "appenddata" | + ("array_"("change_key_case"|"chunk"|"combine"|"count_values"|"diff"|"diff_assoc"|"diff_key"|"diff_uassoc"|"diff_ukey"|"fill"|"filter"|"flip"|"intersect"|"intersect_assoc"|"intersect_key"|"intersect_uassoc"|"intersect_ukey"|"key_exists"|"keys"|"map"|"merge"|"merge_recursive"|"multisort"|"pad"|"pop"|"push"|"rand"|"reduce"|"reverse"|"search"|"shift"|"slice"|"splice"|"sum"|"udiff"|"udiff_assoc"|"udiff_uassoc"|"uintersect"|"uintersect_assoc"|"uintersect_uassoc"|"unique"|"unshift"|"values"|"walk"|"walk_recursive")) | + "arsort" | + "ascii2ebcdic" | + "asin" | + "asinh" | + "asort" | + "assert" | + "assert_options" | + "assign" | + "assignelem" | + "asxml" | + "atan" | + "atan2" | + "atanh" | + "attreditable" | + "attributes" | + "base64_decode" | + "base64_encode" | + "base_convert" | + "basename" | + "bcadd" | + "bccomp" | + "bcdiv" | + "bcmod" | + "bcmul" | + "bcpow" | + "bcpowmod" | + "bcscale" | + "bcsqrt" | + "bcsub" | + "begintransaction" | + "bin2hex" | + "bind_textdomain_codeset" | + "bindcolumn" | + "bindec" | + "bindparam" | + "bindtextdomain" | + "bzclose" | + "bzcompress" | + "bzdecompress" | + "bzerrno" | + "bzerror" | + "bzerrstr" | + "bzflush" | + "bzopen" | + "bzread" | + "bzwrite" | + "cal_days_in_month" | + "cal_from_jd" | + "cal_info" | + "cal_to_jd" | + "call_user_func" | + "call_user_func_array" | + "call_user_method" | + "call_user_method_array" | + ("ccvs_"("add"|"auth"|"command"|"count"|"delete"|"done"|"init"|"lookup"|"new"|"report"|"return"|"reverse"|"sale"|"status"|"textvalue"|"void")) | + "ceil" | + "chdir" | + "checkdate" | + "checkdnsrr" | + "checkin" | + "checkout" | + "chgrp" | + "child_nodes" | + "children" | + "chmod" | + "chop" | + "chown" | + "chr" | + "chroot" | + "chunk_split" | + "class_exists" | + "class_implements" | + "class_parents" | + "classkit_import" | + "classkit_method_add" | + "classkit_method_copy" | + "classkit_method_redefine" | + "classkit_method_remove" | + "classkit_method_rename" | + "clearstatcache" | + "clone_node" | + "clonenode" | + "close" | + "closedir" | + "closelog" | + "com" | + "commit" | + "compact" | + "connect" | + "connection_aborted" | + "connection_status" | + "connection_timeout" | + "constant" | + "content" | + "convert_cyr_string" | + "convert_uudecode" | + "convert_uuencode" | + "copy" | + "cos" | + "cosh" | + "count" | + "count_chars" | + "crack_check" | + "crack_closedict" | + "crack_getlastmessage" | + "crack_opendict" | + "crc32" | + ("create"("_attribute"|"_cdata_section"|"_comment"|"_element"|"_element_ns"|"_entity_reference"|"_function"|"_processing_instruction"|"_text_node"|"attribute"|"attributens"|"cdatasection"|"comment"|"document"|"documentfragment"|"documenttype"|"element"|"elementns"|"entityreference"|"processinginstruction"|"textnode")) | + "crypt" | + ("curl_"("close"|"copy_handle"|"errno"|"error"|"exec"|"getinfo"|"init"|"multi_add_handle"|"multi_close"|"multi_exec"|"multi_getcontent"|"multi_info_read"|"multi_init"|"multi_remove_handle"|"multi_select"|"setopt"|"version")) | + "current" | + "cybercash_base64_decode" | + "cybercash_base64_encode" | + "cybercash_decr" | + "cybercash_encr" | + "cyrus_authenticate" | + "cyrus_bind" | + "cyrus_close" | + "cyrus_connect" | + "cyrus_query" | + "cyrus_unbind" | + "data" | + "date" | + "date_sunrise" | + "date_sunset" | + "dblist" | + "dbmclose" | + "dbmdelete" | + "dbmexists" | + "dbmfetch" | + "dbmfirstkey" | + "dbminsert" | + "dbmnextkey" | + "dbmopen" | + "dbmreplace" | + "dbstat" | + "dcgettext" | + "dcngettext" | + "dcstat" | + "deaggregate" | + "debug_backtrace" | + "debug_print_backtrace" | + "debug_zval_dump" | + "debugger_off" | + "debugger_on" | + "decbin" | + "dechex" | + "decoct" | + "decrement" | + "define" | + "define_syslog_variables" | + "defined" | + "deg2rad" | + "delete" | + "deletedata" | + "description" | + "dgettext" | + ("dio_"("close"|"fcntl"|"open"|"read"|"seek"|"stat"|"tcsetattr"|"truncate"|"write")) | + "dir" | + "dirname" | + "disk_free_space" | + "disk_total_space" | + "diskfreespace" | + "dl" | + "dngettext" | + "dns_check_record" | + "dns_get_mx" | + "dns_get_record" | + "doctype" | + "document_element" | + "dom_import_simplexml" | + ("domxml_"("new_doc"|"open_file"|"open_mem"|"version"|"xmltree"|"xslt_stylesheet"|"xslt_stylesheet_doc"|"xslt_stylesheet_file")) | + "dotnet" | + "dotnet_load" | + "doubleval" | + "drawcurve" | + "drawcurveto" | + "drawline" | + "drawlineto" | + "dstanchors" | + "dstofsrcanchors" | + "dump_file" | + "dump_mem" | + "dump_node" | + "each" | + "easter_date" | + "easter_days" | + "ebcdic2ascii" | + "end" | + "entities" | + "eof" | + "erase" | + "ereg" | + "ereg_replace" | + "eregi" | + "eregi_replace" | + "error_log" | + "error_reporting" | + "errorcode" | + "errorinfo" | + "escapeshellarg" | + "escapeshellcmd" | + "exec" | + "execute" | + "exif_imagetype" | + "exif_read_data" | + "exif_tagname" | + "exif_thumbnail" | + "exp" | + "explode" | + "expm1" | + "export" | + "extension_loaded" | + "extract" | + "ezmlm_hash" | + "fclose" | + "feof" | + "fetch" | + "fetchall" | + "fetchsingle" | + "fflush" | + "fgetc" | + "fgetcsv" | + "fgets" | + "fgetss" | + "file" | + ("file"("_exists"|"_get_contents"|"_put_contents"|"atime"|"ctime"|"group"|"inode"|"mtime"|"owner"|"perms"|"pro"|"pro_fieldcount"|"pro_fieldname"|"pro_fieldtype"|"pro_fieldwidth"|"pro_retrieve"|"pro_rowcount"|"size"|"type")) | + "find" | + "first_child" | + "floatval" | + "flock" | + "floor" | + "flush" | + "fmod" | + "fnmatch" | + "fopen" | + "fpassthru" | + "fprintf" | + "fputcsv" | + "fputs" | + "fread" | + "free" | + "frenchtojd" | + "fribidi_log2vis" | + "fscanf" | + "fseek" | + "fsockopen" | + "fstat" | + "ftell" | + "ftok" | + ("ftp_"("alloc"|"cdup"|"chdir"|"chmod"|"close"|"connect"|"delete"|"exec"|"fget"|"fput"|"get"|"get_option"|"login"|"mdtm"|"mkdir"|"nb_continue"|"nb_fget"|"nb_fput"|"nb_get"|"nb_put"|"nlist"|"pasv"|"put"|"pwd"|"quit"|"raw"|"rawlist"|"rename"|"rmdir"|"set_option"|"site"|"size"|"ssl_connect"|"systype")) | + "ftruncate" | + "ftstat" | + "func_get_arg" | + "func_get_args" | + "func_num_args" | + "function_exists" | + "fwrite" | + "gd_info" | + "get" | + ("get"("_attr"|"_attribute"|"_attribute_node"|"_browser"|"_cfg_var"|"_class"|"_class_methods"|"_class_vars"|"_content"|"_current_user"|"_declared_classes"|"_declared_interfaces"|"_defined_constants"|"_defined_functions"|"_defined_vars"|"_element_by_id"|"_elements_by_tagname"|"_extension_funcs"|"_headers"|"_html_translation_table"|"_include_path"|"_included_files"|"_loaded_extensions"|"_magic_quotes_gpc"|"_magic_quotes_runtime"|"_meta_tags"|"_nodes"|"_object_vars"|"_parent_class"|"_required_files"|"_resource_type"|"allheaders"|"atime"|"attr"|"attribute"|"attributenode"|"attributenodens"|"attributens"|"buffering"|"children"|"crc"|"ctime"|"cwd"|"date"|"depth"|"elem"|"elementbyid"|"elementsbytagname"|"elementsbytagnamens"|"env"|"filename"|"filetime"|"functions"|"group"|"height"|"hostbyaddr"|"hostbyname"|"hostbynamel"|"hostos"|"imagesize"|"inneriterator"|"inode"|"iterator"|"lastmod"|"method"|"mtime"|"mxrr"|"mygid"|"myinode"|"mypid"|"myuid"|"name"|"nameditem"|"nameditemns"|"opt"|"owner"|"packedsize"|"path"|"pathname"|"perms"|"position"|"protobyname"|"protobynumber"|"randmax"|"rusage"|"servbyname"|"servbyport"|"shape1"|"shape2"|"size"|"stats"|"subiterator"|"text"|"timeofday"|"type"|"unpackedsize"|"version"|"width")) | + "glob" | + "gmdate" | + "gmmktime" | + ("gmp_"("abs"|"add"|"and"|"clrbit"|"cmp"|"com"|"div"|"div_q"|"div_qr"|"div_r"|"divexact"|"fact"|"gcd"|"gcdext"|"hamdist"|"init"|"intval"|"invert"|"jacobi"|"legendre"|"mod"|"mul"|"neg"|"or"|"perfect_square"|"popcount"|"pow"|"powm"|"prob_prime"|"random"|"scan0"|"scan1"|"setbit"|"sign"|"sqrt"|"sqrtrem"|"strval"|"sub"|"xor")) | + "gmstrftime" | + "gregoriantojd" | + ("gz"("close"|"compress"|"deflate"|"encode"|"eof"|"file"|"getc"|"gets"|"getss"|"inflate"|"open"|"passthru"|"puts"|"read"|"rewind"|"seek"|"tell"|"uncompress"|"write")) | + "handle" | + ("has"("_attribute"|"_attributes"|"_child_nodes"|"attribute"|"attributens"|"attributes"|"childnodes"|"children"|"feature"|"next"|"siblings")) | + "header" | + "headers_list" | + "headers_sent" | + "hebrev" | + "hebrevc" | + "hexdec" | + "highlight_file" | + "highlight_string" | + "html_dump_mem" | + "html_entity_decode" | + "htmlentities" | + "htmlspecialchars" | + ("http_"("build_query"|"response_code")) | + ("hw_"("array2objrec"|"changeobject"|"children"|"childrenobj"|"close"|"connect"|"connection_info"|"cp"|"deleteobject"|"docbyanchor"|"docbyanchorobj"|"document_attributes"|"document_bodytag"|"document_content"|"document_setcontent"|"document_size"|"dummy"|"edittext"|"error"|"errormsg"|"free_document"|"getanchors"|"getanchorsobj"|"getandlock"|"getchildcoll"|"getchildcollobj"|"getchilddoccoll"|"getchilddoccollobj"|"getobject"|"getobjectbyquery"|"getobjectbyquerycoll"|"getobjectbyquerycollobj"|"getobjectbyqueryobj"|"getparents"|"getparentsobj"|"getrellink"|"getremote"|"getremotechildren"|"getsrcbydestobj"|"gettext"|"getusername"|"identify"|"incollections"|"info"|"inscoll"|"insdoc"|"insertanchors"|"insertdocument"|"insertobject"|"mapid"|"modifyobject"|"mv"|"new_document"|"objrec2array"|"output_document"|"pconnect"|"pipedocument"|"root"|"setlinkroot"|"stat"|"unlock"|"who")) | + "hwapi_hgcsp" | + "hwstat" | + "hypot" | + ("ibase_"("add_user"|"affected_rows"|"backup"|"blob_add"|"blob_cancel"|"blob_close"|"blob_create"|"blob_echo"|"blob_get"|"blob_import"|"blob_info"|"blob_open"|"close"|"commit"|"commit_ret"|"connect"|"db_info"|"delete_user"|"drop_db"|"errcode"|"errmsg"|"execute"|"fetch_assoc"|"fetch_object"|"fetch_row"|"field_info"|"free_event_handler"|"free_query"|"free_result"|"gen_id"|"maintain_db"|"modify_user"|"name_result"|"num_fields"|"num_params"|"param_info"|"pconnect"|"prepare"|"query"|"restore"|"rollback"|"rollback_ret"|"server_info"|"service_attach"|"service_detach"|"set_event_handler"|"timefmt"|"trans"|"wait_event")) | + "iconv" | + ("iconv_"("get_encoding"|"mime_decode"|"mime_decode_headers"|"mime_encode"|"set_encoding"|"strlen"|"strpos"|"strrpos"|"substr")) | + "identify" | + "ignore_user_abort" | + ("image"("2wbmp"|"_type_to_extension"|"_type_to_mime_type"|"alphablending"|"antialias"|"arc"|"char"|"charup"|"colorallocate"|"colorallocatealpha"|"colorat"|"colorclosest"|"colorclosestalpha"|"colorclosesthwb"|"colordeallocate"|"colorexact"|"colorexactalpha"|"colormatch"|"colorresolve"|"colorresolvealpha"|"colorset"|"colorsforindex"|"colorstotal"|"colortransparent"|"copy"|"copymerge"|"copymergegray"|"copyresampled"|"copyresized"|"create"|"createfromgd"|"createfromgd2"|"createfromgd2part"|"createfromgif"|"createfromjpeg"|"createfrompng"|"createfromstring"|"createfromwbmp"|"createfromxbm"|"createfromxpm"|"createtruecolor"|"dashedline"|"destroy"|"ellipse"|"fill"|"filledarc"|"filledellipse"|"filledpolygon"|"filledrectangle"|"filltoborder"|"filter"|"fontheight"|"fontwidth"|"ftbbox"|"fttext"|"gammacorrect"|"gd"|"gd2"|"gif"|"interlace"|"istruecolor"|"jpeg"|"layereffect"|"line"|"loadfont"|"palettecopy"|"png"|"polygon"|"psbbox"|"pscopyfont"|"psencodefont"|"psextendfont"|"psfreefont"|"psloadfont"|"psslantfont"|"pstext"|"rectangle"|"rotate"|"savealpha"|"setbrush"|"setpixel"|"setstyle"|"setthickness"|"settile"|"string"|"stringup"|"sx"|"sy"|"truecolortopalette"|"ttfbbox"|"ttftext"|"types"|"wbmp"|"xbm")) | + ("imap_"("8bit"|"alerts"|"append"|"base64"|"binary"|"body"|"bodystruct"|"check"|"clearflag_full"|"close"|"createmailbox"|"delete"|"deletemailbox"|"errors"|"expunge"|"fetch_overview"|"fetchbody"|"fetchheader"|"fetchstructure"|"get_quota"|"get_quotaroot"|"getacl"|"getmailboxes"|"getsubscribed"|"header"|"headerinfo"|"headers"|"last_error"|"list"|"listmailbox"|"listscan"|"listsubscribed"|"lsub"|"mail"|"mail_compose"|"mail_copy"|"mail_move"|"mailboxmsginfo"|"mime_header_decode"|"msgno"|"num_msg"|"num_recent"|"open"|"ping"|"qprint"|"renamemailbox"|"reopen"|"rfc822_parse_adrlist"|"rfc822_parse_headers"|"rfc822_write_address"|"scanmailbox"|"search"|"set_quota"|"setacl"|"setflag_full"|"sort"|"status"|"subscribe"|"thread"|"timeout"|"uid"|"undelete"|"unsubscribe"|"utf7_decode"|"utf7_encode"|"utf8")) | + "implode" | + "import" | + "import_request_variables" | + "importnode" | + "in_array" | + "increment" | + "inet_ntop" | + "inet_pton" | + "info" | + ("ini_"("alter"|"get"|"get_all"|"restore"|"set")) | + "insert" | + "insert_before" | + "insertanchor" | + "insertbefore" | + "insertcollection" | + "insertdata" | + "insertdocument" | + "interface_exists" | + "internal_subset" | + "intval" | + "ip2long" | + "iptcembed" | + "iptcparse" | + ("is_"("a"|"array"|"blank_node"|"bool"|"callable"|"dir"|"double"|"executable"|"file"|"finite"|"float"|"infinite"|"int"|"integer"|"link"|"long"|"nan"|"null"|"numeric"|"object"|"readable"|"real"|"resource"|"scalar"|"soap_fault"|"string"|"subclass_of"|"uploaded_file"|"writable"|"writeable")) | + ("is"("asp"|"comment"|"dir"|"dot"|"executable"|"file"|"html"|"id"|"jste"|"link"|"php"|"readable"|"samenode"|"supported"|"text"|"whitespaceinelementcontent"|"writable"|"xhtml"|"xml")) | + "item" | + "iterator_count" | + "iterator_to_array" | + "java_last_exception_clear" | + "java_last_exception_get" | + "jddayofweek" | + "jdmonthname" | + "jdtofrench" | + "jdtogregorian" | + "jdtojewish" | + "jdtojulian" | + "jdtounix" | + "jewishtojd" | + "join" | + "jpeg2wbmp" | + ("json_"("decode"|"encode"|"last_error"("_msg")?)) | + "juliantojd" | + "key" | + "krsort" | + "ksort" | + "langdepvalue" | + "last_child" | + "lastinsertid" | + "lcg_value" | + ("ldap_"("8859_to_t61"|"add"|"bind"|"close"|"compare"|"connect"|"count_entries"|"delete"|"dn2ufn"|"err2str"|"errno"|"error"|"explode_dn"|"first_attribute"|"first_entry"|"first_reference"|"free_result"|"get_attributes"|"get_dn"|"get_entries"|"get_option"|"get_values"|"get_values_len"|"list"|"mod_add"|"mod_del"|"mod_replace"|"modify"|"next_attribute"|"next_entry"|"next_reference"|"parse_reference"|"parse_result"|"read"|"rename"|"sasl_bind"|"search"|"set_option"|"set_rebind_proc"|"sort"|"start_tls"|"t61_to_8859"|"unbind")) | + "levenshtein" | + "link" | + "linkinfo" | + "load" | + "loadhtml" | + "loadhtmlfile" | + "loadxml" | + "localeconv" | + "localtime" | + "lock" | + "log" | + "log10" | + "log1p" | + "long2ip" | + "lookupnamespaceuri" | + "lookupprefix" | + "lstat" | + "ltrim" | + "lzf_compress" | + "lzf_decompress" | + "lzf_optimized_for" | + "mail" | + "main" | + "max" | + ("mb_"("convert_case"|"convert_encoding"|"convert_kana"|"convert_variables"|"decode_mimeheader"|"decode_numericentity"|"detect_encoding"|"detect_order"|"encode_mimeheader"|"encode_numericentity"|"ereg"|"ereg_match"|"ereg_replace"|"ereg_search"|"ereg_search_getpos"|"ereg_search_getregs"|"ereg_search_init"|"ereg_search_pos"|"ereg_search_regs"|"ereg_search_setpos"|"eregi"|"eregi_replace"|"get_info"|"http_input"|"http_output"|"internal_encoding"|"language"|"list_encodings"|"output_handler"|"parse_str"|"preferred_mime_name"|"regex_encoding"|"regex_set_options"|"send_mail"|"split"|"strcut"|"strimwidth"|"strlen"|"strpos"|"strrpos"|"strtolower"|"strtoupper"|"strwidth"|"substitute_character"|"substr"|"substr_count")) | + ("mcal_"("append_event"|"close"|"create_calendar"|"date_compare"|"date_valid"|"day_of_week"|"day_of_year"|"days_in_month"|"delete_calendar"|"delete_event"|"event_add_attribute"|"event_init"|"event_set_alarm"|"event_set_category"|"event_set_class"|"event_set_description"|"event_set_end"|"event_set_recur_daily"|"event_set_recur_monthly_mday"|"event_set_recur_monthly_wday"|"event_set_recur_none"|"event_set_recur_weekly"|"event_set_recur_yearly"|"event_set_start"|"event_set_title"|"expunge"|"fetch_current_stream_event"|"fetch_event"|"is_leap_year"|"list_alarms"|"list_events"|"next_recurrence"|"open"|"popen"|"rename_calendar"|"reopen"|"snooze"|"store_event"|"time_valid"|"week_of_year")) | + ("mcrypt_"("cbc"|"cfb"|"create_iv"|"decrypt"|"ecb"|"enc_get_algorithms_name"|"enc_get_block_size"|"enc_get_iv_size"|"enc_get_key_size"|"enc_get_modes_name"|"enc_get_supported_key_sizes"|"enc_is_block_algorithm"|"enc_is_block_algorithm_mode"|"enc_is_block_mode"|"enc_self_test"|"encrypt"|"generic"|"generic_deinit"|"generic_end"|"generic_init"|"get_block_size"|"get_cipher_name"|"get_iv_size"|"get_key_size"|"list_algorithms"|"list_modes"|"module_close"|"module_get_algo_block_size"|"module_get_algo_key_size"|"module_get_supported_key_sizes"|"module_is_block_algorithm"|"module_is_block_algorithm_mode"|"module_is_block_mode"|"module_open"|"module_self_test"|"ofb")) | + "md5" | + "md5_file" | + "mdecrypt_generic" | + "memcache_debug" | + "memory_get_usage" | + "metaphone" | + "method_exists" | + "mhash" | + "mhash_count" | + "mhash_get_block_size" | + "mhash_get_hash_name" | + "mhash_keygen_s2k" | + "microtime" | + "mime_content_type" | + "mimetype" | + "min" | + "ming_setcubicthreshold" | + "ming_setscale" | + "ming_useswfversion" | + "mkdir" | + "mktime" | + "money_format" | + "move" | + "move_uploaded_file" | + "movepen" | + "movepento" | + "moveto" | + ("msession_"("connect"|"count"|"create"|"destroy"|"disconnect"|"find"|"get"|"get_array"|"get_data"|"inc"|"list"|"listvar"|"lock"|"plugin"|"randstr"|"set"|"set_array"|"set_data"|"timeout"|"uniq"|"unlock")) | + "msg_get_queue" | + "msg_receive" | + "msg_remove_queue" | + "msg_send" | + "msg_set_queue" | + "msg_stat_queue" | + "msql" | + "mt_getrandmax" | + "mt_rand" | + "mt_srand" | + "name" | + "natcasesort" | + "natsort" | + "next" | + "next_sibling" | + "nextframe" | + "ngettext" | + "nl2br" | + "nl_langinfo" | + ("node_"("name"|"type"|"value")) | + "normalize" | + "notations" | + ("notes_"("body"|"copy_db"|"create_db"|"create_note"|"drop_db"|"find_note"|"header_info"|"list_msgs"|"mark_read"|"mark_unread"|"nav_create"|"search"|"unread"|"version")) | + ("nsapi_"("request_headers"|"response_headers"|"virtual")) | + "number_format" | + ("ob_"("clean"|"end_clean"|"end_flush"|"flush"|"get_clean"|"get_contents"|"get_flush"|"get_length"|"get_level"|"get_status"|"gzhandler"|"iconv_handler"|"implicit_flush"|"list_handlers"|"start"|"tidyhandler")) | + "object" | + "objectbyanchor" | + ("oci"("_bind_by_name"|"_cancel"|"_close"|"_commit"|"_connect"|"_define_by_name"|"_error"|"_execute"|"_fetch"|"_fetch_all"|"_fetch_array"|"_fetch_assoc"|"_fetch_object"|"_fetch_row"|"_field_is_null"|"_field_name"|"_field_precision"|"_field_scale"|"_field_size"|"_field_type"|"_field_type_raw"|"_free_statement"|"_internal_debug"|"_lob_copy"|"_lob_is_equal"|"_new_collection"|"_new_connect"|"_new_cursor"|"_new_descriptor"|"_num_fields"|"_num_rows"|"_parse"|"_password_change"|"_pconnect"|"_result"|"_rollback"|"_server_version"|"_set_prefetch"|"_statement_type"|"bindbyname"|"cancel"|"closelob"|"collappend"|"collassign"|"collassignelem"|"collgetelem"|"collmax"|"collsize"|"colltrim"|"columnisnull"|"columnname"|"columnprecision"|"columnscale"|"columnsize"|"columntype"|"columntyperaw"|"commit"|"definebyname"|"error"|"execute"|"fetch"|"fetchinto"|"fetchstatement"|"freecollection"|"freecursor"|"freedesc"|"freestatement"|"internaldebug"|"loadlob"|"logoff"|"logon"|"newcollection"|"newcursor"|"newdescriptor"|"nlogon"|"numcols"|"parse"|"plogon"|"result"|"rollback"|"rowcount"|"savelob"|"savelobfile"|"serverversion"|"setprefetch"|"statementtype"|"writelobtofile"|"writetemporarylob")) | + "octdec" | + ("odbc_"("autocommit"|"binmode"|"close"|"close_all"|"columnprivileges"|"columns"|"commit"|"connect"|"cursor"|"data_source"|"do"|"error"|"errormsg"|"exec"|"execute"|"fetch_array"|"fetch_into"|"fetch_object"|"fetch_row"|"field_len"|"field_name"|"field_num"|"field_precision"|"field_scale"|"field_type"|"foreignkeys"|"free_result"|"gettypeinfo"|"longreadlen"|"next_result"|"num_fields"|"num_rows"|"pconnect"|"prepare"|"primarykeys"|"procedurecolumns"|"procedures"|"result"|"result_all"|"rollback"|"setoption"|"specialcolumns"|"statistics"|"tableprivileges"|"tables")) | + "offsetexists" | + "offsetget" | + "offsetset" | + "offsetunset" | + "opendir" | + "openlog" | + ("openssl_"("csr_export"|"csr_export_to_file"|"csr_new"|"csr_sign"|"error_string"|"free_key"|"get_privatekey"|"get_publickey"|"open"|"pkcs7_decrypt"|"pkcs7_encrypt"|"pkcs7_sign"|"pkcs7_verify"|"pkey_export"|"pkey_export_to_file"|"pkey_get_private"|"pkey_get_public"|"pkey_new"|"private_decrypt"|"private_encrypt"|"public_decrypt"|"public_encrypt"|"seal"|"sign"|"verify"|"x509_check_private_key"|"x509_checkpurpose"|"x509_export"|"x509_export_to_file"|"x509_free"|"x509_parse"|"x509_read")) | + ("ora_"("bind"|"close"|"columnname"|"columnsize"|"columntype"|"commit"|"commitoff"|"commiton"|"do"|"error"|"errorcode"|"exec"|"fetch"|"fetch_into"|"getcolumn"|"logoff"|"logon"|"numcols"|"numrows"|"open"|"parse"|"plogon"|"rollback")) | + "ord" | + "output" | + "output_add_rewrite_var" | + "output_reset_rewrite_vars" | + "overload" | + "override_function" | + "owner_document" | + "pack" | + "parent_node" | + "parents" | + "parse_ini_file" | + "parse_str" | + "parse_url" | + "parsekit_compile_file" | + "parsekit_compile_string" | + "parsekit_func_arginfo" | + "passthru" | + "pathinfo" | + "pclose" | + ("pcntl_"("alarm"|"exec"|"fork"|"getpriority"|"setpriority"|"signal"|"wait"|"waitpid"|"wexitstatus"|"wifexited"|"wifsignaled"|"wifstopped"|"wstopsig"|"wtermsig")) | + "pconnect" | + ("pdf_"("add_annotation"|"add_bookmark"|"add_launchlink"|"add_locallink"|"add_note"|"add_outline"|"add_pdflink"|"add_thumbnail"|"add_weblink"|"arc"|"arcn"|"attach_file"|"begin_page"|"begin_pattern"|"begin_template"|"circle"|"clip"|"close"|"close_image"|"close_pdi"|"close_pdi_page"|"closepath"|"closepath_fill_stroke"|"closepath_stroke"|"concat"|"continue_text"|"curveto"|"delete"|"end_page"|"end_pattern"|"end_template"|"endpath"|"fill"|"fill_stroke"|"findfont"|"fit_pdi_page"|"get_buffer"|"get_font"|"get_fontname"|"get_fontsize"|"get_image_height"|"get_image_width"|"get_majorversion"|"get_minorversion"|"get_parameter"|"get_pdi_parameter"|"get_pdi_value"|"get_value"|"initgraphics"|"lineto"|"load_font"|"makespotcolor"|"moveto"|"new"|"open"|"open_ccitt"|"open_file"|"open_gif"|"open_image"|"open_image_file"|"open_jpeg"|"open_memory_image"|"open_pdi"|"open_pdi_page"|"open_png"|"open_tiff"|"place_image"|"place_pdi_page"|"rect"|"restore"|"rotate"|"save"|"scale"|"set_border_color"|"set_border_dash"|"set_border_style"|"set_char_spacing"|"set_duration"|"set_font"|"set_horiz_scaling"|"set_info"|"set_info_author"|"set_info_creator"|"set_info_keywords"|"set_info_subject"|"set_info_title"|"set_leading"|"set_parameter"|"set_text_matrix"|"set_text_pos"|"set_text_rendering"|"set_text_rise"|"set_value"|"set_word_spacing"|"setcolor"|"setdash"|"setflat"|"setfont"|"setgray"|"setgray_fill"|"setgray_stroke"|"setlinecap"|"setlinejoin"|"setlinewidth"|"setmatrix"|"setmiterlimit"|"setpolydash"|"setrgbcolor"|"setrgbcolor_fill"|"setrgbcolor_stroke"|"show"|"show_boxed"|"show_xy"|"skew"|"stringwidth"|"stroke"|"translate")) | + "pfpro_cleanup" | + "pfpro_init" | + "pfpro_process" | + "pfpro_process_raw" | + "pfpro_version" | + "pfsockopen" | + ("pg_"("affected_rows"|"cancel_query"|"client_encoding"|"close"|"connect"|"connection_busy"|"connection_reset"|"connection_status"|"convert"|"copy_from"|"copy_to"|"dbname"|"delete"|"end_copy"|"escape_bytea"|"escape_string"|"fetch_all"|"fetch_array"|"fetch_assoc"|"fetch_object"|"fetch_result"|"fetch_row"|"field_is_null"|"field_name"|"field_num"|"field_prtlen"|"field_size"|"field_type"|"free_result"|"get_notify"|"get_pid"|"get_result"|"host"|"insert"|"last_error"|"last_notice"|"last_oid"|"lo_close"|"lo_create"|"lo_export"|"lo_import"|"lo_open"|"lo_read"|"lo_read_all"|"lo_seek"|"lo_tell"|"lo_unlink"|"lo_write"|"meta_data"|"num_fields"|"num_rows"|"options"|"parameter_status"|"pconnect"|"ping"|"port"|"put_line"|"query"|"result_error"|"result_seek"|"result_status"|"select"|"send_query"|"set_client_encoding"|"trace"|"tty"|"unescape_bytea"|"untrace"|"update"|"version")) | + "php_check_syntax" | + "php_ini_scanned_files" | + "php_logo_guid" | + "php_sapi_name" | + "php_strip_whitespace" | + "php_uname" | + "phpcredits" | + "phpinfo" | + "phpversion" | + "pi" | + "png2wbmp" | + "popen" | + "pos" | + ("posix_"("ctermid"|"get_last_error"|"getcwd"|"getegid"|"geteuid"|"getgid"|"getgrgid"|"getgrnam"|"getgroups"|"getlogin"|"getpgid"|"getpgrp"|"getpid"|"getppid"|"getpwnam"|"getpwuid"|"getrlimit"|"getsid"|"getuid"|"isatty"|"kill"|"mkfifo"|"setegid"|"seteuid"|"setgid"|"setpgid"|"setsid"|"setuid"|"strerror"|"times"|"ttyname"|"uname")) | + "pow" | + "prefix" | + "preg_grep" | + "preg_match" | + "preg_match_all" | + "preg_quote" | + "preg_replace" | + "preg_replace_callback" | + "preg_split" | + "prepare" | + "prev" | + "previous_sibling" | + "print_r" | + ("printer_"("abort"|"close"|"create_brush"|"create_dc"|"create_font"|"create_pen"|"delete_brush"|"delete_dc"|"delete_font"|"delete_pen"|"draw_bmp"|"draw_chord"|"draw_elipse"|"draw_line"|"draw_pie"|"draw_rectangle"|"draw_roundrect"|"draw_text"|"end_doc"|"end_page"|"get_option"|"list"|"logical_fontheight"|"open"|"select_brush"|"select_font"|"select_pen"|"set_option"|"start_doc"|"start_page"|"write")) | + "printf" | + "proc_close" | + "proc_get_status" | + "proc_nice" | + "proc_open" | + "proc_terminate" | + "process" | + "public_id" | + "putenv" | + "qdom_error" | + "qdom_tree" | + "query" | + "quoted_printable_decode" | + "quotemeta" | + "rad2deg" | + "rand" | + "range" | + "rar_close" | + "rar_entry_get" | + "rar_list" | + "rar_open" | + "rawurldecode" | + "rawurlencode" | + "read" | + "read_exif_data" | + "readdir" | + "readfile" | + "readgzfile" | + "readline" | + ("readline_"("add_history"|"callback_handler_install"|"callback_handler_remove"|"callback_read_char"|"clear_history"|"completion_function"|"info"|"list_history"|"on_new_line"|"read_history"|"redisplay"|"write_history")) | + "readlink" | + "realpath" | + "reason" | + "recode" | + "recode_file" | + "recode_string" | + "register_shutdown_function" | + "register_tick_function" | + "registernamespace" | + "relaxngvalidate" | + "relaxngvalidatesource" | + "remove" | + "remove_attribute" | + "remove_child" | + "removeattribute" | + "removeattributenode" | + "removeattributens" | + "removechild" | + "rename" | + "rename_function" | + "replace" | + "replace_child" | + "replace_node" | + "replacechild" | + "replacedata" | + "reset" | + "restore_error_handler" | + "restore_exception_handler" | + "restore_include_path" | + "result_dump_file" | + "result_dump_mem" | + "rewind" | + "rewinddir" | + "rmdir" | + "rollback" | + "rotate" | + "rotateto" | + "round" | + "rowcount" | + "rsort" | + "rtrim" | + "save" | + "savehtml" | + "savehtmlfile" | + "savexml" | + "scale" | + "scaleto" | + "scandir" | + "schemavalidate" | + "schemavalidatesource" | + "seek" | + "sem_acquire" | + "sem_get" | + "sem_release" | + "sem_remove" | + "serialize" | + ("sesam_"("affected_rows"|"commit"|"connect"|"diagnostic"|"disconnect"|"errormsg"|"execimm"|"fetch_array"|"fetch_result"|"fetch_row"|"field_array"|"field_name"|"free_result"|"num_fields"|"query"|"rollback"|"seek_row"|"sesam_settransaction")) | + ("session_"("cache_expire"|"cache_limiter"|"commit"|"decode"|"destroy"|"encode"|"get_cookie_params"|"id"|"is_registered"|"module_name"|"name"|"regenerate_id"|"register"|"save_path"|"set_cookie_params"|"set_save_handler"|"start"|"unregister"|"unset"|"write_close")) | + "set" | + ("set"("_attribute"|"_content"|"_error_handler"|"_exception_handler"|"_file_buffer"|"_include_path"|"_magic_quotes_runtime"|"_name"|"_namespace"|"_time_limit"|"action"|"attribute"|"attributenode"|"attributenodens"|"attributens"|"background"|"bounds"|"buffering"|"class"|"color"|"commitedversion"|"cookie"|"depth"|"dimension"|"down"|"font"|"frames"|"height"|"hit"|"indentation"|"leftfill"|"leftmargin"|"line"|"linespacing"|"locale"|"margins"|"name"|"over"|"persistence"|"rate"|"ratio"|"rawcookie"|"rightfill"|"rightmargin"|"spacing"|"type"|"up")) | + "sha1" | + "sha1_file" | + "shell_exec" | + "shm_attach" | + "shm_detach" | + "shm_get_var" | + "shm_put_var" | + "shm_remove" | + "shm_remove_var" | + "shmop_close" | + "shmop_delete" | + "shmop_open" | + "shmop_read" | + "shmop_size" | + "shmop_write" | + "show_source" | + "shuffle" | + "similar_text" | + "simplexml_import_dom" | + "simplexml_load_file" | + "simplexml_load_string" | + "sin" | + "sinh" | + "size" | + "sizeof" | + "skewx" | + "skewxto" | + "skewy" | + "skewyto" | + "sleep" | + ("socket_"("accept"|"bind"|"clear_error"|"close"|"connect"|"create"|"create_listen"|"create_pair"|"get_option"|"get_status"|"getpeername"|"getsockname"|"last_error"|"listen"|"read"|"recv"|"recvfrom"|"select"|"send"|"sendto"|"set_block"|"set_blocking"|"set_nonblock"|"set_option"|"set_timeout"|"shutdown"|"strerror"|"write")) | + "sort" | + "soundex" | + "specified" | + "spl_classes" | + "split" | + "spliti" | + "splittext" | + "sprintf" | + "sql_regcase" | + "sqrt" | + "srand" | + "srcanchors" | + "srcsofdst" | + "sscanf" | + "stat" | + ("str_"("ireplace"|"pad"|"repeat"|"replace"|"rot13"|"shuffle"|"split"|"word_count")) | + "strcasecmp" | + "strchr" | + "strcmp" | + "strcoll" | + "strcspn" | + ("stream_"("context_create"|"context_get_default"|"context_get_options"|"context_set_option"|"context_set_params"|"copy_to_stream"|"filter_append"|"filter_prepend"|"filter_register"|"filter_remove"|"get_contents"|"get_filters"|"get_line"|"get_meta_data"|"get_transports"|"get_wrappers"|"register_wrapper"|"select"|"set_blocking"|"set_timeout"|"set_write_buffer"|"socket_accept"|"socket_client"|"socket_enable_crypto"|"socket_get_name"|"socket_recvfrom"|"socket_sendto"|"socket_server"|"wrapper_register"|"wrapper_restore"|"wrapper_unregister")) | + ("str"("eammp3"|"ftime"|"ip_tags"|"ipcslashes"|"ipos"|"ipslashes"|"istr"|"len"|"natcasecmp"|"natcmp"|"ncasecmp"|"ncmp"|"pbrk"|"pos"|"ptime"|"rchr"|"rev"|"ripos"|"rpos"|"spn"|"str"|"tok"|"tolower"|"totime"|"toupper"|"tr"|"val")) | + "substr" | + "substr_compare" | + "substr_count" | + "substr_replace" | + "substringdata" | + ("swf_"("actiongeturl"|"actiongotoframe"|"actiongotolabel"|"actionnextframe"|"actionplay"|"actionprevframe"|"actionsettarget"|"actionstop"|"actiontogglequality"|"actionwaitforframe"|"addbuttonrecord"|"addcolor"|"closefile"|"definebitmap"|"definefont"|"defineline"|"definepoly"|"definerect"|"definetext"|"endbutton"|"enddoaction"|"endshape"|"endsymbol"|"fontsize"|"fontslant"|"fonttracking"|"getbitmapinfo"|"getfontinfo"|"getframe"|"labelframe"|"lookat"|"modifyobject"|"mulcolor"|"nextid"|"oncondition"|"openfile"|"ortho"|"ortho2"|"perspective"|"placeobject"|"polarview"|"popmatrix"|"posround"|"pushmatrix"|"removeobject"|"rotate"|"scale"|"setfont"|"setframe"|"shapearc"|"shapecurveto"|"shapecurveto3"|"shapefillbitmapclip"|"shapefillbitmaptile"|"shapefilloff"|"shapefillsolid"|"shapelinesolid"|"shapelineto"|"shapemoveto"|"showframe"|"startbutton"|"startdoaction"|"startshape"|"startsymbol"|"textwidth"|"translate"|"viewport")) | + "swfbutton_keypress" | + "symlink" | + "syslog" | + "system" | + "system_id" | + "tagname" | + "tan" | + "tanh" | + "target" | + "tcpwrap_check" | + "tell" | + "tempnam" | + "textdomain" | + ("tidy_"("access_count"|"clean_repair"|"config_count"|"diagnose"|"error_count"|"get_body"|"get_config"|"get_error_buffer"|"get_head"|"get_html"|"get_html_ver"|"get_output"|"get_release"|"get_root"|"get_status"|"getopt"|"is_xhtml"|"is_xml"|"load_config"|"parse_file"|"parse_string"|"repair_file"|"repair_string"|"reset_config"|"save_config"|"set_encoding"|"setopt"|"warning_count")) | + "time" | + "time_nanosleep" | + "title" | + "tmpfile" | + "token_get_all" | + "token_name" | + "touch" | + "trigger_error" | + "trim" | + "truncate" | + "type" | + "uasort" | + "ucfirst" | + "ucwords" | + "uksort" | + "umask" | + "uniqid" | + "unixtojd" | + "unlink" | + "unlink_node" | + "unlock" | + "unpack" | + "unregister_tick_function" | + "unserialize" | + "urldecode" | + "urlencode" | + "user" | + "user_error" | + "userlist" | + "usleep" | + "usort" | + "utf8_"("decode"|"encode") | + "valid" | + "validate" | + "value" | + "values" | + "var_"("dump"|"export") | + ("variant_"("abs"|"add"|"and"|"cast"|"cat"|"cmp"|"date_from_timestamp"|"date_to_timestamp"|"div"|"eqv"|"fix"|"get_type"|"idiv"|"imp"|"int"|"mod"|"mul"|"neg"|"not"|"or"|"pow"|"round"|"set"|"set_type"|"sub"|"xor")) | + "version_compare" | + "vfprintf" | + "virtual" | + ("vpopmail_"("add_alias_domain"|"add_alias_domain_ex"|"add_domain"|"add_domain_ex"|"add_user"|"alias_add"|"alias_del"|"alias_del_domain"|"alias_get"|"alias_get_all"|"auth_user"|"del_domain"|"del_domain_ex"|"del_user"|"error"|"passwd"|"set_user_quota")) | + "vprintf" | + "vsprintf" | + ("w32api_"("deftype"|"init_dtype"|"invoke_function"|"register_function"|"set_call_method")) | + "wddx_add_vars" | + "wddx_deserialize" | + "wddx_packet_end" | + "wddx_packet_start" | + "wddx_serialize_value" | + "wddx_serialize_vars" | + "wordwrap" | + "write" | + "writetemporary" | + "xattr_get" | + "xattr_list" | + "xattr_remove" | + "xattr_set" | + "xattr_supported" | + "xinclude" | + ("xml"("_error_string"|"_get_current_byte_index"|"_get_current_column_number"|"_get_current_line_number"|"_get_error_code"|"_parse"|"_parse_into_struct"|"_parser_create"|"_parser_create_ns"|"_parser_free"|"_parser_get_option"|"_parser_set_option"|"_set_character_data_handler"|"_set_default_handler"|"_set_element_handler"|"_set_end_namespace_decl_handler"|"_set_external_entity_ref_handler"|"_set_notation_decl_handler"|"_set_object"|"_set_processing_instruction_handler"|"_set_start_namespace_decl_handler"|"_set_unparsed_entity_decl_handler"|"rpc_decode"|"rpc_decode_request"|"rpc_encode"|"rpc_encode_request"|"rpc_get_type"|"rpc_is_fault"|"rpc_parse_method_descriptions"|"rpc_server_add_introspection_data"|"rpc_server_call_method"|"rpc_server_create"|"rpc_server_destroy"|"rpc_server_register_introspection_callback"|"rpc_server_register_method"|"rpc_set_type")) | + "xpath" | + "xpath_eval" | + "xpath_eval_expression" | + "xpath_new_context" | + "xptr_eval" | + "xptr_new_context" | + ("xsl_xsltprocessor_"("get_parameter"|"has_exslt_support"|"import_stylesheet"|"register_php_functions"|"remove_parameter"|"set_parameter"|"transform_to_doc"|"transform_to_uri"|"transform_to_xml"|"xslt_backend_info")) | + ("xslt_"("backend_name"|"backend_version"|"create"|"errno"|"error"|"free"|"getopt"|"process"|"set_base"|"set_encoding"|"set_error_handler"|"set_log"|"set_object"|"set_sax_handler"|"set_sax_handlers"|"set_scheme_handler"|"set_scheme_handlers"|"setopt")) | + ("yp_"("all"|"cat"|"err_string"|"errno"|"first"|"get_default_domain"|"master"|"match"|"next"|"yp_order")) | + "zend_logo_guid" | + "zend_version" | + ("zip_"("close"|"entry_close"|"entry_compressedsize"|"entry_compressionmethod"|"entry_filesize"|"entry_name"|"entry_open"|"entry_read"|"open"|"read")) | + "zlib_get_coding_type" | + + /* mysql functions */ + ("mysql_"("affected_rows"|"client_encoding"|"close"|"connect"|"create_db"|"data_seek"|"db_"("name"|"query")|"drop_db"|"errno"|"error"|"escape_string"|"fetch_"("array"|"assoc"|"field"|"lengths"|"object"|"row")|"field_"("flags"|"len"|"name"|"seek"|"table"|"type")|"free_result"|"get_"("client_info"|"host_info"|"proto_info"|"server_info")|"info"|"insert_id"|"list_"("dbs"|"fields"|"processes"|"tables")|"num_"("fields"|"rows")|"pconnect"|"ping"|"query"|"real_escape_string"|"result"|"select_db"|"set_charset"|"stat"|"tablename"|"thread_id"|"unbuffered_query")) | + + /* Function aliases */ + "apache_request_headers" | + "apache_response_headers" | + "attr_get" | + "attr_set" | + "autocommit" | + "bind_param" | + "bind_result" | + "bzclose" | + "bzflush" | + "bzwrite" | + "change_user" | + "character_set_name" | + "checkdnsrr" | + "chop" | + "client_encoding" | + "close" | + "commit" | + "connect" | + "data_seek" | + "debug" | + "disable_reads_from_master" | + "disable_rpl_parse" | + "diskfreespace" | + "doubleval" | + "dump_debug_info" | + "enable_reads_from_master" | + "enable_rpl_parse" | + "escape_string" | + "execute" | + "fbsql" | + "fbsql_tablename" | + "fetch" | + "fetch_array" | + "fetch_assoc" | + "fetch_field" | + "fetch_field_direct" | + "fetch_fields" | + "fetch_object" | + "fetch_row" | + "field_count" | + "field_seek" | + "fputs" | + "free" | + "free_result" | + "ftp_quit" | + "get_client_info" | + "get_required_files" | + "get_server_info" | + "getallheaders" | + "getmxrr" | + "gmp_div" | + ("gz"("close"|"eof"|"getc"|"gets"|"getss"|"passthru"|"puts"|"read"|"rewind"|"seek"|"tell"|"gzwrite")) | + "imap_create" | + "imap_fetchtext" | + "imap_header" | + "imap_listmailbox" | + "imap_listsubscribed" | + "imap_rename" | + "ini_alter" | + "init" | + "is_double" | + "is_int" | + "is_integer" | + "is_real" | + "is_writeable" | + "join" | + "key_exists" | + "kill" | + "ldap_close" | + "ldap_modify" | + "magic_quotes_runtime" | + "master_query" | + "ming_keypress" | + "ming_setcubicthreshold" | + "ming_setscale" | + "ming_useconstants" | + "ming_useswfversion" | + "more_results" | + "next_result" | + "num_rows" | + ("oci"("_free_cursor"|"bindbyname"|"cancel"|"collappend"|"collassignelem"|"collgetelem"|"collmax"|"collsize"|"colltrim"|"columnisnull"|"columnname"|"columnprecision"|"columnscale"|"columnsize"|"columntype"|"columntyperaw"|"commit"|"definebyname"|"error"|"execute"|"fetch"|"fetchstatement"|"freecollection"|"freecursor"|"freedesc"|"freestatement"|"internaldebug"|"loadlob"|"logoff"|"logon"|"newcollection"|"newcursor"|"newdescriptor"|"nlogon"|"numcols"|"parse"|"passwordchange"|"plogon"|"result"|"rollback"|"rowcount"|"savelob"|"savelobfile"|"serverversion"|"setprefetch"|"statementtype"|"writelobtofile")) | + "odbc_do" | + "odbc_field_precision" | + "openssl_free_key" | + "openssl_get_privatekey" | + "openssl_get_publickey" | + "options" | + ("pg_"("clientencoding"|"cmdtuples"|"errormessage"|"exec"|"fieldisnull"|"fieldname"|"fieldnum"|"fieldprtlen"|"fieldsize"|"fieldtype"|"freeresult"|"getlastoid"|"loclose"|"locreate"|"loexport"|"loimport"|"loopen"|"loread"|"loreadall"|"lounlink"|"lowrite"|"numfields"|"numrows"|"result"|"setclientencoding")) | + "ping" | + "pos" | + "posix_errno" | + "prepare" | + "query" | + "read_exif_data" | + "real_connect" | + "real_escape_string" | + "real_query" | + "recode" | + "reset" | + "result_metadata" | + "rollback" | + "rpl_parse_enabled" | + "rpl_probe" | + "rpl_query_type" | + "select_db" | + "send_long_data" | + "session_commit" | + "set_file_buffer" | + "set_local_infile_default" | + "set_local_infile_handler" | + "set_opt" | + "show_source" | + "sizeof" | + "slave_query" | + "snmpwalkoid" | + "socket_get_status" | + "socket_getopt" | + "socket_set_blocking" | + "socket_set_timeout" | + "socket_setopt" | + "sqlite_fetch_string" | + "sqlite_has_more" | + "ssl_set" | + "stat" | + "stmt" | + "stmt_init" | + "store_result" | + "strchr" | + "stream_register_wrapper" | + "thread_safe" | + "use_result" | + "user_error" | + ("velocis_"("autocommit"|"close"|"commit"|"connect"|"exec"|"fetch"|"fieldname"|"fieldnum"|"freeresult"|"off_autocommit"|"result"|"rollback")) | + "virtual" { addToken(Token.FUNCTION); } + + {PHP_BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + {PHP_Null} { addToken(Token.RESERVED_WORD); } + {PHP_Variable} { addToken(Token.VARIABLE); } + + {LineTerminator} { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\"] { start = zzMarkedPos-1; yybegin(PHP_STRING); } + [\'] { start = zzMarkedPos-1; yybegin(PHP_CHAR); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(PHP_MLC); } + {PHP_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } + + /* Catch any other (unhandled) characters and assume they are okay. */ + . { addToken(Token.IDENTIFIER); } + +} + + + { + // PHP MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } + {JS_MLCEnd} { yybegin(PHP); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } +} + + + { + [^\n\\\$\"]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } + \\.? { /* Skip escaped chars. */ } + {PHP_Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + "$" {} + \" { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } +} + + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped single quotes only, but this should still work. */ } + \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } + \' { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java new file mode 100644 index 0000000..a12ae16 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java @@ -0,0 +1,25956 @@ +/* The following code was generated by JFlex 1.4.1 on 12/29/16 11:15 PM */ + +/* + * 01/28/2009 + * + * PHPTokenMaker.java - Generates tokens for PHP syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; +import java.util.Stack; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.HtmlOccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.OccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for PHP files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PHPTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ + +public class PHPTokenMaker extends AbstractMarkupTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int PHP = 19; + public static final int INATTR_SINGLE_SCRIPT = 9; + public static final int JS_CHAR = 14; + public static final int CSS_STRING = 26; + public static final int JS_DOCCOMMENT = 17; + public static final int JS_MLC = 16; + public static final int CSS_CHAR_LITERAL = 27; + public static final int INTAG_SCRIPT = 7; + public static final int JS_TEMPLATE_LITERAL_EXPR = 30; + public static final int CSS_PROPERTY = 24; + public static final int CSS_C_STYLE_COMMENT = 28; + public static final int PHP_MLC = 20; + public static final int CSS = 23; + public static final int CSS_VALUE = 25; + public static final int COMMENT = 1; + public static final int INATTR_DOUBLE_SCRIPT = 8; + public static final int PHP_STRING = 21; + public static final int JAVASCRIPT = 13; + public static final int INTAG = 3; + public static final int INTAG_CHECK_TAG_NAME = 4; + public static final int INATTR_SINGLE_STYLE = 12; + public static final int DTD = 2; + public static final int PHP_CHAR = 22; + public static final int JS_EOL_COMMENT = 18; + public static final int INATTR_DOUBLE_STYLE = 11; + public static final int INATTR_SINGLE = 6; + public static final int JS_TEMPLATE_LITERAL = 29; + public static final int YYINITIAL = 0; + public static final int INATTR_DOUBLE = 5; + public static final int JS_STRING = 15; + public static final int INTAG_STYLE = 10; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\2\1\0\1\1\1\33\22\0\1\4\1\51\1\7"+ + "\1\34\1\36\1\50\1\5\1\116\1\114\1\113\1\37\1\42\1\45"+ + "\1\31\1\43\1\10\1\25\1\137\1\132\1\136\1\134\1\126\1\133"+ + "\1\27\1\140\1\24\1\53\1\6\1\3\1\46\1\17\1\52\1\112"+ + "\1\110\1\26\1\12\1\41\1\22\1\107\1\121\1\125\1\14\1\127"+ + "\1\122\1\21\1\120\1\111\1\117\1\15\1\123\1\13\1\11\1\16"+ + "\1\106\1\124\1\23\1\40\1\20\1\23\1\115\1\35\1\115\1\47"+ + "\1\30\1\131\1\64\1\67\1\70\1\77\1\62\1\63\1\71\1\73"+ + "\1\56\1\135\1\76\1\65\1\57\1\72\1\74\1\100\1\104\1\61"+ + "\1\66\1\60\1\32\1\102\1\75\1\103\1\101\1\130\1\105\1\55"+ + "\1\44\1\54\uff81\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 = + "\5\0\2\1\1\0\2\1\1\0\2\1\14\0\1\2"+ + "\5\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ + "\5\1\1\10\1\11\3\12\1\13\1\14\1\15\1\16"+ + "\1\17\1\20\1\21\1\22\2\20\2\22\3\20\2\22"+ + "\3\20\1\22\5\20\1\22\1\1\1\23\1\24\1\1"+ + "\1\25\1\14\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\35\1\36\2\16\1\2\1\37\1\16\2\2"+ + "\1\16\2\40\1\16\1\2\1\35\2\16\1\2\1\41"+ + "\1\35\21\2\1\42\1\43\1\1\1\44\1\23\1\45"+ + "\1\46\1\1\1\47\1\23\1\50\1\51\1\1\1\52"+ + "\6\1\1\53\10\1\1\54\4\1\1\55\1\16\1\56"+ + "\1\16\3\2\1\57\1\2\1\16\32\2\1\35\1\60"+ + "\2\2\1\1\1\61\2\1\1\62\1\63\1\64\2\1"+ + "\1\65\1\66\1\67\1\70\1\71\1\70\1\72\1\70"+ + "\1\73\1\70\1\74\1\75\1\70\1\76\1\77\1\100"+ + "\2\77\1\101\1\77\1\102\1\103\1\104\1\105\1\104"+ + "\1\106\2\2\1\40\1\2\2\104\1\107\1\110\1\111"+ + "\1\112\1\113\1\114\1\115\2\1\1\116\1\117\1\120"+ + "\1\121\1\1\1\122\1\1\1\123\1\4\2\124\1\125"+ + "\1\126\1\6\5\0\1\127\32\20\2\22\2\20\1\22"+ + "\44\20\1\130\1\131\2\0\1\127\1\0\1\132\1\0"+ + "\1\133\1\16\1\35\1\2\1\16\1\134\1\40\1\134"+ + "\2\135\1\134\1\136\1\134\2\2\1\101\1\2\1\101"+ + "\45\2\1\101\5\2\1\137\1\140\1\141\1\142\1\143"+ + "\1\0\1\144\6\0\1\145\1\146\33\0\1\147\11\2"+ + "\1\150\1\151\105\2\1\101\102\2\1\101\23\2\1\152"+ + "\4\2\1\101\1\2\1\152\30\2\1\153\12\2\1\154"+ + "\1\64\1\155\1\66\1\0\1\156\1\150\15\0\1\157"+ + "\1\40\5\0\1\40\1\0\1\160\1\161\1\162\1\163"+ + "\2\124\2\0\1\164\4\0\1\12\14\20\1\22\63\20"+ + "\3\0\1\165\1\166\1\35\1\2\1\135\1\0\2\136"+ + "\4\2\1\73\23\2\1\167\34\2\71\0\14\2\1\101"+ + "\53\2\1\152\22\2\1\152\13\2\1\152\44\2\1\152"+ + "\3\2\1\152\27\2\1\101\16\2\1\152\2\2\1\152"+ + "\13\2\1\152\16\2\1\152\65\2\1\152\5\2\1\152"+ + "\11\2\1\152\61\2\1\152\1\2\1\152\44\2\1\152"+ + "\6\2\1\101\15\2\1\35\13\2\25\0\2\124\1\170"+ + "\3\0\1\171\1\12\21\20\1\22\17\20\1\22\1\20"+ + "\3\0\1\172\1\35\7\2\1\173\4\2\1\174\5\2"+ + "\1\73\17\2\2\0\1\1\4\0\1\175\2\0\1\176"+ + "\41\0\1\177\24\0\1\200\15\2\1\152\21\2\1\152"+ + "\77\2\1\152\3\2\1\152\16\2\1\152\22\2\1\152"+ + "\1\2\1\101\11\2\1\201\3\2\1\152\6\2\1\152"+ + "\3\2\1\152\15\2\1\152\16\2\1\152\4\2\1\152"+ + "\11\2\2\152\12\2\1\152\156\2\1\152\11\2\2\152"+ + "\122\2\2\152\24\2\1\152\63\2\1\35\12\2\17\0"+ + "\1\101\4\0\2\124\1\126\2\0\1\127\17\20\1\22"+ + "\4\20\1\130\1\0\1\127\1\35\5\2\1\101\3\2"+ + "\1\101\12\2\1\137\1\143\17\0\1\177\23\0\1\177"+ + "\12\0\56\2\1\152\53\2\1\152\44\2\1\152\41\2"+ + "\1\152\2\2\3\152\6\2\1\101\135\2\1\152\35\2"+ + "\1\152\13\2\1\152\13\2\1\101\1\152\1\101\6\2"+ + "\1\152\1\101\251\2\1\152\17\2\1\152\23\2\1\101"+ + "\102\2\1\152\13\2\1\152\2\2\1\35\14\2\16\0"+ + "\1\124\1\202\12\20\1\0\1\35\13\2\34\0\14\2"+ + "\1\152\41\2\1\152\2\2\1\152\31\2\1\152\106\2"+ + "\1\152\7\2\1\152\1\2\2\152\54\2\2\152\16\2"+ + "\1\152\26\2\1\152\130\2\1\152\163\2\2\152\31\2"+ + "\1\152\20\2\1\152\103\2\1\152\1\2\1\152\17\2"+ + "\1\152\1\2\1\101\13\2\1\101\131\2\1\35\12\2"+ + "\12\0\1\203\3\20\1\0\6\2\2\0\1\177\1\0"+ + "\1\177\14\0\35\2\1\152\105\2\1\152\10\2\1\101"+ + "\17\2\1\152\113\2\1\152\23\2\2\152\4\2\1\152"+ + "\134\2\1\152\133\2\1\152\10\2\1\152\1\2\1\152"+ + "\2\2\1\152\34\2\1\152\1\2\1\152\6\2\1\152"+ + "\331\2\1\152\42\2\1\35\11\2\6\0\1\20\1\0"+ + "\2\2\7\0\303\2\1\152\24\2\1\101\46\2\1\152"+ + "\50\2\1\152\141\2\1\152\14\2\1\152\60\2\1\152"+ + "\54\2\1\152\170\2\1\152\15\2\1\152\4\2\1\152"+ + "\37\2\1\204\4\0\1\20\1\205\1\2\1\206\2\0"+ + "\1\207\12\2\1\152\14\2\1\152\1\2\1\152\12\2"+ + "\1\152\5\2\1\152\7\2\1\152\70\2\1\152\150\2"+ + "\1\152\174\2\1\152\15\2\1\152\57\2\2\152\12\2"+ + "\1\152\135\2\1\152\13\2\1\152\62\2\1\152\36\2"+ + "\1\152\17\2\4\0\263\2\2\152\72\2\1\152\134\2"+ + "\1\152\13\2\1\152\124\2\1\152\15\2\1\152\132\2"+ + "\1\152\5\2\3\0\1\210\13\2\1\152\21\2\1\152"+ + "\14\2\1\152\144\2\1\152\1\2\1\152\72\2\1\152"+ + "\122\2\1\152\153\2\1\152\24\2\1\152\120\2\1\152"+ + "\13\2\1\152\157\2\1\152\113\2\1\152\10\2\1\152"+ + "\2\2\1\152\4\2\1\152\55\2\1\152\25\2\1\152"+ + "\12\2\1\152\4\2\1\152\116\2\1\152\47\2\1\152"+ + "\104\2\1\152\51\2\1\152\21\2\1\152\32\2\1\152"+ + "\23\2\1\152\24\2\1\152\27\2\1\152\5\2\1\152"+ + "\7\2\1\152\13\2\1\152\75\2\1\152\16\2\1\152"+ + "\2\2\1\152\3\2\1\152\137\2\1\152\33\2\1\152"+ + "\13\2\1\152\10\2\1\152\151\2\1\152\107\2\1\152"+ + "\4\2\1\152\74\2\1\152\1\2\1\152\3\2\1\152"+ + "\25\2\1\152\110\2\1\152\54\2\1\152\7\2\1\152"+ + "\61\2\1\152\12\2\1\152\165\2\1\152\157\2\1\152"+ + "\33\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[8198]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\141\0\302\0\u0123\0\u0184\0\u01e5\0\u0246\0\u02a7"+ + "\0\u0308\0\u0369\0\u03ca\0\u042b\0\u048c\0\u04ed\0\u054e\0\u05af"+ + "\0\u0610\0\u0671\0\u06d2\0\u0733\0\u0794\0\u07f5\0\u0856\0\u08b7"+ + "\0\u0918\0\u0979\0\u09da\0\u0a3b\0\u0a9c\0\u0afd\0\u0b5e\0\u0bbf"+ + "\0\u0c20\0\u0c81\0\u0ce2\0\u0d43\0\u0da4\0\u0e05\0\u0c81\0\u0e66"+ + "\0\u0ec7\0\u0f28\0\u0f89\0\u0fea\0\u0c81\0\u0c81\0\u104b\0\u10ac"+ + "\0\u110d\0\u0c81\0\u116e\0\u0c81\0\u0c81\0\u0c81\0\u11cf\0\u0c81"+ + "\0\u1230\0\u1291\0\u12f2\0\u1353\0\u13b4\0\u1415\0\u1476\0\u14d7"+ + "\0\u1538\0\u1599\0\u15fa\0\u165b\0\u16bc\0\u171d\0\u177e\0\u17df"+ + "\0\u1840\0\u18a1\0\u1902\0\u11cf\0\u1963\0\u19c4\0\u0c81\0\u1a25"+ + "\0\u0c81\0\u1a86\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81"+ + "\0\u0c81\0\u1ae7\0\u0c81\0\u1b48\0\u1ba9\0\u0c81\0\u0c81\0\u1c0a"+ + "\0\u1c6b\0\u1ccc\0\u1d2d\0\u1d8e\0\u1def\0\u1e50\0\u1eb1\0\u0c81"+ + "\0\u1f12\0\u1f73\0\u1fd4\0\u0c81\0\u2035\0\u2096\0\u20f7\0\u2158"+ + "\0\u21b9\0\u221a\0\u227b\0\u22dc\0\u233d\0\u239e\0\u23ff\0\u2460"+ + "\0\u24c1\0\u2522\0\u2583\0\u25e4\0\u2645\0\u26a6\0\u0c81\0\u0c81"+ + "\0\u2707\0\u0c81\0\u2768\0\u27c9\0\u0c81\0\u282a\0\u0c81\0\u288b"+ + "\0\u0c81\0\u27c9\0\u28ec\0\u0c81\0\u294d\0\u29ae\0\u2a0f\0\u2a70"+ + "\0\u2ad1\0\u2b32\0\u0c81\0\u2b93\0\u2bf4\0\u2c55\0\u2cb6\0\u2d17"+ + "\0\u2d78\0\u2dd9\0\u2e3a\0\u0c81\0\u2e9b\0\u2efc\0\u2f5d\0\u2fbe"+ + "\0\u0c81\0\u301f\0\u0c81\0\u3080\0\u30e1\0\u3142\0\u31a3\0\u3204"+ + "\0\u3265\0\u32c6\0\u2035\0\u3327\0\u3388\0\u33e9\0\u344a\0\u34ab"+ + "\0\u350c\0\u356d\0\u35ce\0\u362f\0\u3690\0\u36f1\0\u3752\0\u37b3"+ + "\0\u3814\0\u3875\0\u38d6\0\u3937\0\u3998\0\u39f9\0\u3a5a\0\u3abb"+ + "\0\u3b1c\0\u3b7d\0\u3bde\0\u3c3f\0\u3ca0\0\u0c81\0\u3d01\0\u3d62"+ + "\0\u3dc3\0\u0c81\0\u3e24\0\u3e85\0\u0c81\0\u0c81\0\u3ee6\0\u3f47"+ + "\0\u3fa8\0\u0c81\0\u4009\0\u0c81\0\u0c81\0\u0c81\0\u406a\0\u0c81"+ + "\0\u40cb\0\u412c\0\u418d\0\u41ee\0\u0c81\0\u424f\0\u0c81\0\u0c81"+ + "\0\u0c81\0\u406a\0\u40cb\0\u42b0\0\u4311\0\u0c81\0\u0c81\0\u0c81"+ + "\0\u0c81\0\u406a\0\u0c81\0\u4372\0\u43d3\0\u4434\0\u4495\0\u44f6"+ + "\0\u4557\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81"+ + "\0\u45b8\0\u4619\0\u0c81\0\u27c9\0\u467a\0\u0c81\0\u46db\0\u0c81"+ + "\0\u473c\0\u0c81\0\u479d\0\u47fe\0\u485f\0\u48c0\0\u4921\0\u0c81"+ + "\0\u4982\0\u49e3\0\u4a44\0\u4aa5\0\u4b06\0\u4b67\0\u4bc8\0\u4c29"+ + "\0\u4c8a\0\u4ceb\0\u4d4c\0\u4dad\0\u4e0e\0\u4e6f\0\u4ed0\0\u4f31"+ + "\0\u4f92\0\u4ff3\0\u5054\0\u50b5\0\u5116\0\u5177\0\u51d8\0\u5239"+ + "\0\u529a\0\u52fb\0\u535c\0\u53bd\0\u541e\0\u547f\0\u54e0\0\u5541"+ + "\0\u55a2\0\u5603\0\u5664\0\u56c5\0\u5726\0\u5787\0\u57e8\0\u5849"+ + "\0\u58aa\0\u590b\0\u596c\0\u59cd\0\u5a2e\0\u5a8f\0\u5af0\0\u5b51"+ + "\0\u5bb2\0\u5c13\0\u5c74\0\u5cd5\0\u5d36\0\u5d97\0\u5df8\0\u5e59"+ + "\0\u5eba\0\u5f1b\0\u5f7c\0\u5fdd\0\u603e\0\u609f\0\u6100\0\u6161"+ + "\0\u61c2\0\u6223\0\u6284\0\u62e5\0\u6346\0\u63a7\0\u6408\0\u6469"+ + "\0\u64ca\0\u652b\0\u0c81\0\u1f12\0\u658c\0\u65ed\0\u664e\0\u0c81"+ + "\0\u66af\0\u6710\0\u664e\0\u6771\0\u67d2\0\u6833\0\u6894\0\u6894"+ + "\0\u68f5\0\u6894\0\u6956\0\u69b7\0\u6a18\0\u6a79\0\u6ada\0\u6b3b"+ + "\0\u1c6b\0\u6b9c\0\u6bfd\0\u6c5e\0\u6cbf\0\u6d20\0\u6d81\0\u6de2"+ + "\0\u6e43\0\u6ea4\0\u6f05\0\u6f66\0\u6fc7\0\u7028\0\u7089\0\u70ea"+ + "\0\u714b\0\u71ac\0\u720d\0\u726e\0\u72cf\0\u7330\0\u7391\0\u73f2"+ + "\0\u7453\0\u74b4\0\u7515\0\u7576\0\u75d7\0\u7638\0\u7699\0\u76fa"+ + "\0\u775b\0\u77bc\0\u781d\0\u787e\0\u78df\0\u7940\0\u79a1\0\u7a02"+ + "\0\u7a63\0\u7ac4\0\u7b25\0\u7b86\0\u7be7\0\u7c48\0\u7ca9\0\u0c81"+ + "\0\u7d0a\0\u7d6b\0\u7dcc\0\u7e2d\0\u0c81\0\u7e8e\0\u7eef\0\u7f50"+ + "\0\u7fb1\0\u8012\0\u8073\0\u0c81\0\u0c81\0\u80d4\0\u8135\0\u8196"+ + "\0\u81f7\0\u8258\0\u82b9\0\u831a\0\u837b\0\u83dc\0\u843d\0\u849e"+ + "\0\u84ff\0\u8560\0\u85c1\0\u8622\0\u8683\0\u86e4\0\u8745\0\u87a6"+ + "\0\u8807\0\u8868\0\u88c9\0\u892a\0\u898b\0\u89ec\0\u8a4d\0\u8aae"+ + "\0\u8b0f\0\u8b70\0\u8bd1\0\u8c32\0\u8c93\0\u8cf4\0\u8d55\0\u8db6"+ + "\0\u8e17\0\u8e78\0\u8ed9\0\u0c81\0\u8f3a\0\u8f9b\0\u8ffc\0\u905d"+ + "\0\u90be\0\u911f\0\u9180\0\u91e1\0\u9242\0\u92a3\0\u9304\0\u9365"+ + "\0\u93c6\0\u9427\0\u9488\0\u94e9\0\u954a\0\u95ab\0\u960c\0\u966d"+ + "\0\u96ce\0\u972f\0\u9790\0\u97f1\0\u9852\0\u98b3\0\u9914\0\u9975"+ + "\0\u99d6\0\u9a37\0\u9a98\0\u9af9\0\u9b5a\0\u9bbb\0\u9c1c\0\u9c7d"+ + "\0\u9cde\0\u9d3f\0\u9da0\0\u9e01\0\u9e62\0\u9ec3\0\u9f24\0\u9f85"+ + "\0\u9fe6\0\ua047\0\ua0a8\0\ua109\0\ua16a\0\ua1cb\0\ua22c\0\ua28d"+ + "\0\ua2ee\0\ua34f\0\ua3b0\0\ua411\0\ua472\0\ua4d3\0\ua534\0\ua595"+ + "\0\ua5f6\0\ua657\0\ua6b8\0\ua719\0\ua77a\0\ua7db\0\ua83c\0\ua89d"+ + "\0\ua8fe\0\ua95f\0\ua9c0\0\uaa21\0\uaa82\0\uaae3\0\uab44\0\uaba5"+ + "\0\uac06\0\uac67\0\uacc8\0\uad29\0\uad8a\0\uadeb\0\uae4c\0\uaead"+ + "\0\uaf0e\0\uaf6f\0\uafd0\0\ub031\0\ub092\0\ub0f3\0\ub154\0\ub1b5"+ + "\0\ub216\0\ub277\0\ub2d8\0\ub339\0\ub39a\0\ub3fb\0\ub45c\0\ub4bd"+ + "\0\ub51e\0\ub57f\0\ub5e0\0\ub641\0\ub6a2\0\ub703\0\ub764\0\ub7c5"+ + "\0\ub826\0\ub887\0\ub8e8\0\ub949\0\ub9aa\0\uba0b\0\uba6c\0\ubacd"+ + "\0\ubb2e\0\ubb8f\0\ubbf0\0\ubc51\0\ubcb2\0\ubd13\0\ubd74\0\ubdd5"+ + "\0\ube36\0\ube97\0\ubef8\0\ubf59\0\ubfba\0\uc01b\0\uc07c\0\uc0dd"+ + "\0\uc13e\0\uc19f\0\uc200\0\uc261\0\uc2c2\0\uc323\0\uc384\0\uc3e5"+ + "\0\uc446\0\uc4a7\0\uc508\0\uc569\0\uc5ca\0\uc62b\0\uc68c\0\uc6ed"+ + "\0\uc74e\0\uc7af\0\uc810\0\uc871\0\uc8d2\0\uc933\0\uc994\0\uc9f5"+ + "\0\u1c6b\0\uca56\0\ucab7\0\ucb18\0\ucb79\0\ucbda\0\ucc3b\0\ucc9c"+ + "\0\uccfd\0\ucd5e\0\ucdbf\0\uce20\0\uce81\0\ucee2\0\ucf43\0\ucfa4"+ + "\0\ud005\0\ud066\0\ud0c7\0\ud128\0\ud189\0\ud1ea\0\ud24b\0\ud2ac"+ + "\0\ud30d\0\ud36e\0\ud3cf\0\ud430\0\ud491\0\ud4f2\0\ud553\0\ud5b4"+ + "\0\ud615\0\ud676\0\ud6d7\0\ud738\0\ud799\0\ud7fa\0\ud85b\0\ud8bc"+ + "\0\ud91d\0\ud97e\0\ud9df\0\u0c81\0\u0c81\0\uda40\0\u0c81\0\udaa1"+ + "\0\u0c81\0\udb02\0\udb63\0\udbc4\0\udc25\0\udc86\0\udce7\0\udd48"+ + "\0\udda9\0\ude0a\0\ude6b\0\udecc\0\udf2d\0\udf8e\0\udfef\0\ue050"+ + "\0\u0c81\0\ue0b1\0\ue112\0\ue173\0\ue1d4\0\ue235\0\u44f6\0\ue296"+ + "\0\u0c81\0\u0c81\0\u0c81\0\u479d\0\ue2f7\0\ue358\0\ue3b9\0\ue41a"+ + "\0\u0c81\0\ue47b\0\ue4dc\0\ue53d\0\ue59e\0\ue5ff\0\ue660\0\ue6c1"+ + "\0\ue722\0\ue783\0\ue7e4\0\ue845\0\ue8a6\0\ue907\0\ue968\0\ue9c9"+ + "\0\uea2a\0\uea8b\0\ueaec\0\ueb4d\0\uebae\0\uec0f\0\uec70\0\uecd1"+ + "\0\ued32\0\ued93\0\uedf4\0\uee55\0\ueeb6\0\uef17\0\uef78\0\uefd9"+ + "\0\uf03a\0\uf09b\0\uf0fc\0\uf15d\0\u5603\0\uf1be\0\uf21f\0\uf280"+ + "\0\uf2e1\0\uf342\0\uf3a3\0\uf404\0\uf465\0\uf4c6\0\uf527\0\uf588"+ + "\0\uf5e9\0\uf64a\0\uf6ab\0\uf70c\0\uf76d\0\uf7ce\0\uf82f\0\uf890"+ + "\0\uf8f1\0\uf952\0\uf9b3\0\ufa14\0\ufa75\0\ufad6\0\ufb37\0\ufb98"+ + "\0\u1599\0\ufbf9\0\ufc5a\0\ufcbb\0\ufd1c\0\ufd7d\0\ufdde\0\ufe3f"+ + "\0\ufea0\0\uff01\0\uff62\0\uffc3\1\44\1\205\1\346\0\u6894"+ + "\1\u0147\1\u01a8\1\u0209\1\u026a\1\u02cb\1\u032c\1\u038d\1\u03ee"+ + "\1\u044f\1\u04b0\1\u0511\1\u0572\1\u05d3\1\u0634\1\u0695\1\u06f6"+ + "\1\u0757\1\u07b8\1\u0819\1\u087a\1\u08db\1\u093c\1\u099d\1\u09fe"+ + "\1\u0a5f\0\u1c6b\1\u0ac0\1\u0b21\1\u0b82\1\u0be3\1\u0c44\1\u0ca5"+ + "\1\u0d06\1\u0d67\1\u0dc8\1\u0e29\1\u0e8a\1\u0eeb\1\u0f4c\1\u0fad"+ + "\1\u100e\1\u106f\1\u10d0\1\u1131\1\u1192\1\u11f3\1\u1254\1\u12b5"+ + "\1\u1316\1\u1377\1\u13d8\1\u1439\1\u149a\1\u14fb\1\u155c\1\u15bd"+ + "\1\u161e\1\u167f\1\u16e0\1\u1741\1\u17a2\1\u1803\1\u1864\1\u18c5"+ + "\1\u1926\1\u1987\1\u19e8\1\u1a49\1\u1aaa\1\u1b0b\1\u1b6c\1\u1bcd"+ + "\1\u1c2e\1\u1c8f\1\u1cf0\1\u1d51\1\u1db2\1\u1e13\1\u1e74\1\u1ed5"+ + "\1\u1f36\1\u1f97\1\u1ff8\1\u2059\1\u20ba\1\u211b\1\u217c\1\u21dd"+ + "\1\u223e\1\u229f\1\u2300\1\u2361\1\u23c2\1\u2423\1\u2484\1\u24e5"+ + "\1\u2546\1\u25a7\1\u2608\1\u2669\1\u26ca\1\u272b\1\u278c\1\u27ed"+ + "\1\u284e\1\u28af\1\u2910\1\u2971\1\u29d2\1\u2a33\0\uff62\1\u2a94"+ + "\1\u2af5\1\u2b56\1\u2bb7\1\u2c18\1\u2c79\1\u2cda\1\u2d3b\1\u2d9c"+ + "\1\u2dfd\1\u2e5e\1\u2ebf\1\u2f20\1\u2f81\1\u2fe2\1\u3043\1\u30a4"+ + "\1\u3105\1\u3166\1\u31c7\1\u3228\1\u3289\1\u32ea\1\u334b\1\u33ac"+ + "\1\u340d\1\u346e\1\u34cf\1\u3530\1\u3591\1\u35f2\1\u3653\1\u36b4"+ + "\1\u3715\1\u3776\1\u37d7\1\u3838\1\u3899\1\u38fa\1\u395b\1\u39bc"+ + "\1\u3a1d\1\u3a7e\1\u3adf\1\u3b40\1\u3ba1\1\u3c02\1\u3c63\1\u3cc4"+ + "\1\u3d25\1\u3d86\1\u3de7\1\u3e48\1\u3ea9\1\u3f0a\1\u3f6b\1\u3fcc"+ + "\1\u402d\1\u408e\1\u40ef\1\u4150\1\u41b1\1\u4212\1\u4273\1\u42d4"+ + "\1\u4335\1\u4396\1\u43f7\1\u4458\1\u44b9\1\u451a\1\u457b\1\u45dc"+ + "\1\u463d\1\u469e\1\u46ff\1\u4760\1\u47c1\1\u4822\1\u4883\1\u48e4"+ + "\1\u4945\1\u49a6\1\u4a07\1\u4a68\1\u4ac9\1\u4b2a\1\u4b8b\1\u4bec"+ + "\1\u4c4d\1\u4cae\1\u4d0f\1\u4d70\1\u4dd1\1\u4e32\1\u4e93\1\u4ef4"+ + "\1\u4f55\1\u4fb6\1\u5017\1\u5078\1\u50d9\1\u513a\1\u519b\1\u51fc"+ + "\1\u525d\1\u52be\1\u531f\1\u5380\1\u53e1\1\u5442\1\u54a3\1\u5504"+ + "\1\u5565\1\u55c6\1\u5627\1\u5688\1\u56e9\1\u4b8b\1\u574a\1\u57ab"+ + "\1\u580c\1\u586d\1\u58ce\1\u592f\1\u5990\1\u59f1\1\u5a52\1\u5ab3"+ + "\1\u5b14\1\u5b75\1\u5bd6\1\u5c37\1\u5c98\1\u5cf9\1\u5d5a\1\u5dbb"+ + "\1\u5e1c\1\u5e7d\1\u5ede\1\u5f3f\1\u5fa0\1\u6001\1\u6062\1\u60c3"+ + "\1\u6124\1\u6185\1\u61e6\1\u6247\1\u62a8\1\u6309\1\u636a\1\u63cb"+ + "\1\u642c\1\u648d\1\u64ee\1\u654f\1\u65b0\1\u6611\1\u6672\1\u66d3"+ + "\1\u6734\1\u6795\1\u67f6\1\u6857\1\u68b8\1\u6919\1\u0a5f\1\u697a"+ + "\1\u69db\1\u6a3c\1\u6a9d\1\u6afe\1\u6b5f\1\u6bc0\1\u6c21\1\u6c82"+ + "\1\u6ce3\1\u6d44\1\u6da5\1\u6e06\1\u6e67\1\u6ec8\1\u6f29\1\u6f8a"+ + "\1\u6feb\1\u704c\1\u70ad\1\u710e\1\u716f\1\u71d0\1\u7231\1\u7292"+ + "\1\u72f3\1\u7354\1\u73b5\1\u7416\1\u7477\1\u74d8\1\u7539\1\u759a"+ + "\1\u75fb\1\u765c\1\u76bd\1\u771e\1\u777f\1\u77e0\1\u7841\1\u78a2"+ + "\1\u7903\1\u7964\1\u79c5\1\u7a26\1\u7a87\1\u7ae8\1\u7b49\1\u7baa"+ + "\1\u7c0b\1\u7c6c\1\u7ccd\1\u7d2e\1\u7d8f\1\u7df0\1\u7e51\1\u7eb2"+ + "\1\u7f13\1\u7f74\1\u7fd5\1\u8036\1\u8097\1\u80f8\1\u8159\1\u81ba"+ + "\1\u821b\1\u827c\1\u82dd\1\u833e\1\u839f\1\u8400\1\u8461\1\u84c2"+ + "\1\u8523\1\u8584\1\u85e5\1\u8646\1\u86a7\1\u8708\1\u8769\1\u87ca"+ + "\1\u882b\1\u888c\1\u88ed\1\u894e\1\u89af\1\u8a10\1\u8a71\1\u8ad2"+ + "\1\u8b33\1\u8b94\1\u8bf5\1\u8c56\1\u8cb7\1\u8d18\1\u8d79\1\u8dda"+ + "\1\u8e3b\1\u8e9c\1\u8efd\1\u8f5e\1\u8fbf\1\u9020\1\u9081\1\u90e2"+ + "\1\u9143\1\u91a4\1\u9205\1\u9266\1\u92c7\1\u9328\1\u9389\1\u93ea"+ + "\1\u944b\1\u94ac\1\u950d\1\u956e\1\u95cf\1\u9630\1\u9691\1\u96f2"+ + "\1\u9753\1\u97b4\1\u9815\1\u9876\1\u98d7\1\u9938\1\u9999\1\u99fa"+ + "\1\u9a5b\1\u9abc\1\u9b1d\1\u9b7e\1\u9bdf\1\u9c40\1\u9ca1\1\u9d02"+ + "\1\u9d63\1\u9dc4\1\u9e25\1\u9e86\1\u9ee7\1\u9f48\1\u9fa9\1\ua00a"+ + "\1\ua06b\1\ua0cc\1\ua12d\1\ua18e\1\ua1ef\1\ua250\1\u4b2a\1\ua2b1"+ + "\1\ua312\1\ua373\1\ua3d4\1\ua435\1\ua496\1\ua4f7\1\ua558\1\ua5b9"+ + "\1\ua61a\1\ua67b\1\ua6dc\1\ua73d\1\ua79e\1\ua7ff\1\ua860\1\ua8c1"+ + "\1\ua922\1\ua983\1\ua9e4\1\uaa45\1\uaaa6\1\uab07\1\uab68\1\uabc9"+ + "\1\uac2a\1\uac8b\1\uacec\1\uad4d\1\uadae\1\uae0f\1\uae70\1\uaed1"+ + "\1\uaf32\1\uaf93\1\uaff4\1\ub055\1\ub0b6\1\ub117\1\ub178\1\ub1d9"+ + "\1\ub23a\1\ub29b\1\ub2fc\1\ub35d\1\ub3be\1\ub41f\1\ub480\1\ub4e1"+ + "\1\ub542\1\ub5a3\1\ub604\1\ub665\1\ub6c6\1\ub727\1\ub788\1\ub7e9"+ + "\1\ub84a\1\ub8ab\1\ub90c\1\ub96d\1\ub9ce\1\uba2f\1\uba90\1\ubaf1"+ + "\1\ubb52\1\ubbb3\1\ubc14\1\ubc75\1\ubcd6\1\ubd37\1\ubd98\1\ubdf9"+ + "\1\ube5a\1\ubebb\1\ubf1c\1\ubf7d\1\ubfde\1\uc03f\1\uc0a0\1\uc101"+ + "\1\uc162\1\uc1c3\1\uc224\1\uc285\1\uc2e6\1\uc347\1\uc3a8\1\uc409"+ + "\1\uc46a\1\uc4cb\1\uc52c\0\u0c81\1\uc58d\1\uc5ee\1\uc64f\1\uc6b0"+ + "\1\uc711\1\uc772\1\uc7d3\1\uc834\1\uc895\1\uc8f6\1\uc957\1\uc9b8"+ + "\1\uca19\1\uca7a\1\ucadb\1\ucb3c\1\ucb9d\1\ucbfe\1\ucc5f\1\uccc0"+ + "\1\ucd21\1\ucd82\1\ucde3\1\uce44\1\ucea5\1\ucf06\1\ucf67\1\ucfc8"+ + "\1\ud029\1\ud08a\1\ud0eb\1\ud14c\1\ud1ad\1\ud20e\1\ud26f\1\ud2d0"+ + "\0\u5726\1\ud331\0\uf03a\1\ud392\1\ud3f3\1\ud454\1\ud4b5\0\u0c81"+ + "\1\ud516\1\ud577\1\ud5d8\1\ud639\1\ud69a\1\ud6fb\1\ud75c\1\ud7bd"+ + "\0\u1c6b\1\ud81e\1\ud87f\1\ud8e0\1\ud941\0\u1c6b\1\ud9a2\1\uda03"+ + "\1\uda64\1\udac5\1\udb26\0\u1c6b\1\udb87\1\udbe8\1\udc49\1\udcaa"+ + "\1\udd0b\1\udd6c\1\uddcd\1\ude2e\1\ude8f\1\udef0\1\udf51\1\udfb2"+ + "\1\ue013\1\ue074\1\ue0d5\1\ue136\0\u7d6b\0\u0c81\1\ue197\1\ue1f8"+ + "\1\ue259\1\ue2ba\1\ue31b\1\ue37c\1\ue3dd\1\ue43e\1\ue49f\1\ue500"+ + "\1\ue561\1\ue5c2\1\ue623\1\ue684\1\ue6e5\1\ue746\1\ue7a7\1\ue808"+ + "\1\ue869\1\ue8ca\1\ue92b\1\ue98c\1\ue9ed\1\uea4e\1\ueaaf\1\ueb10"+ + "\1\ueb71\1\uebd2\1\uec33\1\uec94\1\uecf5\1\ued56\1\uedb7\1\uee18"+ + "\1\uee79\1\ueeda\1\uef3b\1\uef9c\1\ueffd\1\uf05e\1\uf0bf\0\u0c81"+ + "\1\uf120\1\uf181\1\uf1e2\1\uf243\1\uf2a4\1\uf305\1\uf366\1\uf3c7"+ + "\1\uf428\1\uf489\1\uf4ea\1\uf54b\1\uf5ac\1\uf60d\1\uf66e\1\uf6cf"+ + "\1\uf730\1\uf791\1\uf7f2\1\uf853\1\uf8b4\1\uf915\1\uf976\1\uf9d7"+ + "\1\ufa38\1\ufa99\1\ufafa\1\ufb5b\1\ufbbc\1\ufc1d\1\ufc7e\1\ufcdf"+ + "\1\ufd40\1\ufda1\1\ufe02\1\ufe63\1\ufec4\1\uff25\1\uff86\1\uffe7"+ + "\2\110\2\251\2\u010a\2\u016b\2\u01cc\2\u022d\2\u028e\2\u02ef"+ + "\2\u0350\2\u03b1\2\u0412\2\u0473\2\u04d4\2\u0535\2\u0596\2\u05f7"+ + "\2\u0658\2\u06b9\2\u071a\2\u077b\2\u07dc\2\u083d\2\u089e\2\u08ff"+ + "\2\u0960\2\u09c1\2\u0a22\2\u0a83\2\u0ae4\2\u0b45\2\u0ba6\2\u0c07"+ + "\2\u0c68\2\u0cc9\2\u0d2a\2\u0d8b\2\u04d4\2\u0dec\2\u0e4d\2\u0eae"+ + "\2\u0f0f\2\u0f70\2\u0fd1\2\u1032\2\u1093\2\u10f4\2\u1155\2\u11b6"+ + "\2\u1217\2\u1278\2\u12d9\2\u133a\2\u139b\2\u13fc\2\u145d\2\u14be"+ + "\2\u151f\2\u1580\2\u15e1\2\u1642\2\u16a3\2\u1704\2\u1765\2\u17c6"+ + "\2\u1827\2\u1888\2\u18e9\2\u194a\2\u19ab\2\u1a0c\2\u1a6d\2\u1ace"+ + "\2\u1b2f\2\u1b90\2\u1bf1\2\u1c52\2\u1cb3\2\u1d14\2\u1d75\2\u1dd6"+ + "\2\u1e37\2\u1e98\2\u1ef9\2\u1f5a\2\u1fbb\2\u201c\2\u207d\2\u20de"+ + "\2\u213f\2\u21a0\2\u2201\2\u2262\2\u22c3\2\u2324\2\u2385\2\u23e6"+ + "\2\u2447\2\u24a8\2\u2509\2\u256a\2\u25cb\2\u262c\2\u268d\2\u26ee"+ + "\2\u274f\2\u27b0\2\u2811\2\u2872\2\u28d3\2\u2934\2\u2995\2\u29f6"+ + "\2\u2a57\2\u2ab8\2\u2b19\2\u2b7a\2\u2bdb\2\u2c3c\2\u2c9d\2\u2cfe"+ + "\2\u2d5f\2\u2dc0\2\u2e21\2\u2e82\2\u2ee3\2\u2f44\0\u1c6b\2\u2fa5"+ + "\2\u3006\2\u3067\2\u30c8\2\u3129\2\u318a\2\u31eb\2\u324c\2\u32ad"+ + "\2\u330e\2\u336f\2\u33d0\2\u3431\2\u3492\2\u34f3\2\u3554\2\u35b5"+ + "\2\u3616\2\u3677\2\u36d8\2\u3739\2\u379a\2\u37fb\2\u385c\2\u38bd"+ + "\2\u391e\2\u397f\2\u39e0\2\u3a41\2\u3aa2\2\u3b03\2\u3b64\2\u3bc5"+ + "\2\u3c26\2\u3c87\2\u3ce8\2\u3d49\2\u3daa\2\u3e0b\2\u3e6c\2\u3ecd"+ + "\2\u3f2e\2\u3f8f\1\u8fbf\2\u3ff0\2\u4051\2\u40b2\2\u4113\2\u4174"+ + "\2\u41d5\2\u4236\2\u4297\2\u42f8\2\u4359\2\u43ba\2\u441b\2\u447c"+ + "\2\u44dd\2\u453e\2\u459f\2\u4600\2\u4661\2\u46c2\2\u4723\2\u4784"+ + "\2\u47e5\2\u4846\2\u48a7\2\u4908\2\u4969\1\udb87\2\u49ca\2\u4a2b"+ + "\2\u4a8c\2\u4aed\2\u4b4e\2\u4baf\2\u4c10\2\u4c71\2\u4cd2\2\u4d33"+ + "\2\u4d94\2\u4df5\2\u4e56\2\u4eb7\2\u4f18\2\u4f79\2\u4fda\2\u503b"+ + "\2\u509c\2\u50fd\2\u515e\2\u51bf\2\u5220\2\u5281\2\u52e2\2\u5343"+ + "\2\u53a4\2\u5405\2\u5466\2\u54c7\2\u5528\2\u5589\2\u55ea\2\u564b"+ + "\2\u56ac\2\u570d\2\u576e\2\u57cf\2\u5830\2\u5891\2\u58f2\2\u5953"+ + "\2\u59b4\2\u5a15\2\u5a76\2\u5ad7\2\u5b38\2\u5b99\2\u5bfa\2\u5c5b"+ + "\2\u5cbc\2\u5d1d\2\u5d7e\2\u5ddf\2\u5e40\2\u5ea1\2\u5f02\2\u5f63"+ + "\2\u5fc4\2\u6025\2\u6086\2\u60e7\2\u6148\2\u61a9\2\u620a\2\u626b"+ + "\2\u62cc\2\u632d\2\u638e\2\u63ef\2\u6450\2\u64b1\2\u6512\2\u6573"+ + "\2\u65d4\2\u6635\2\u6696\2\u66f7\2\u6758\2\u67b9\2\u681a\2\u687b"+ + "\2\u68dc\2\u693d\2\u699e\2\u69ff\2\u6a60\2\u6ac1\2\u6b22\2\u6b83"+ + "\2\u6be4\2\u6c45\2\u6ca6\2\u6d07\2\u6d68\2\u6dc9\2\u6e2a\2\u6e8b"+ + "\2\u6eec\2\u6f4d\2\u6fae\2\u700f\2\u7070\2\u70d1\2\u7132\2\u7193"+ + "\2\u71f4\2\u7255\2\u72b6\2\u7317\0\ua0a8\2\u7378\2\u73d9\2\u743a"+ + "\2\u749b\2\u74fc\2\u755d\2\u75be\2\u761f\2\u7680\2\u76e1\2\u7742"+ + "\2\u77a3\2\u7804\2\u7865\2\u78c6\2\u7927\2\u7988\2\u79e9\2\u7a4a"+ + "\2\u7aab\2\u7b0c\2\u7b6d\2\u7bce\2\u7c2f\2\u7c90\2\u7cf1\2\u7d52"+ + "\2\u7db3\2\u7e14\2\u7e75\2\u7ed6\2\u7f37\1\u88ed\2\u7f98\2\u7ff9"+ + "\2\u805a\2\u80bb\2\u811c\2\u817d\2\u81de\2\u823f\2\u82a0\2\u8301"+ + "\2\u8362\2\u83c3\2\u8424\2\u8485\2\u84e6\2\u8547\2\u85a8\2\u8609"+ + "\2\u866a\2\u86cb\2\u872c\2\u878d\2\u87ee\2\u884f\2\u88b0\2\u8911"+ + "\2\u8972\2\u89d3\2\u8a34\2\u8a95\2\u8af6\2\u8b57\2\u8bb8\2\u8c19"+ + "\2\u8c7a\2\u8cdb\2\u8d3c\2\u8d9d\2\u8dfe\2\u8e5f\2\u8ec0\2\u8f21"+ + "\2\u8f82\2\u8fe3\2\u9044\2\u90a5\2\u9106\2\u9167\2\u91c8\2\u9229"+ + "\2\u928a\2\u92eb\2\u934c\2\u93ad\2\u940e\2\u946f\2\u94d0\2\u9531"+ + "\2\u9592\2\u95f3\2\u9654\2\u96b5\2\u9716\2\u9777\2\u97d8\2\u9839"+ + "\2\u989a\2\u98fb\2\u995c\2\u99bd\2\u9a1e\2\u9a7f\2\u9ae0\2\u9b41"+ + "\2\u9ba2\2\u9c03\2\u9c64\2\u9cc5\2\u9d26\2\u9d87\2\u9de8\2\u9e49"+ + "\2\u9eaa\2\u9f0b\2\u9f6c\2\u9fcd\2\ua02e\2\ua08f\2\ua0f0\2\ua151"+ + "\2\ua1b2\2\ua213\2\ua274\2\ua2d5\2\ua336\2\ua397\2\ua3f8\2\ua459"+ + "\2\ua4ba\2\ua51b\2\ua57c\2\ua5dd\2\ua63e\2\ua69f\2\ua700\2\ua761"+ + "\2\ua7c2\2\ua823\2\ua884\2\ua8e5\2\ua946\2\ua9a7\2\uaa08\2\uaa69"+ + "\2\uaaca\2\uab2b\2\uab8c\2\uabed\2\uac4e\2\uacaf\2\uad10\2\uad71"+ + "\2\uadd2\2\uae33\2\uae94\2\uaef5\2\uaf56\2\uafb7\2\ub018\2\ub079"+ + "\2\ub0da\2\ub13b\2\ub19c\2\ub1fd\2\ub25e\2\ub2bf\2\ub320\2\ub381"+ + "\2\ub3e2\2\ub443\2\ub4a4\2\ub505\2\ub566\2\ub5c7\2\ub628\2\ub689"+ + "\2\ub6ea\2\ub74b\2\ub7ac\2\ub80d\2\ub86e\2\ub8cf\2\ub930\2\ub991"+ + "\2\ub9f2\2\uba53\2\ubab4\2\ubb15\2\ubb76\2\ubbd7\0\u0c81\2\ubc38"+ + "\2\ubc99\2\ubcfa\2\ubd5b\2\ubdbc\2\ube1d\0\u0c81\2\ube7e\1\uc6b0"+ + "\0\u104b\2\ubedf\2\ubf40\2\ubfa1\2\uc002\2\uc063\2\uc0c4\2\uc125"+ + "\2\uc186\2\uc1e7\2\uc248\2\uc2a9\2\uc30a\2\uc36b\2\uc3cc\2\uc42d"+ + "\2\uc48e\2\uc48e\2\uc4ef\2\uc550\2\uc5b1\0\u0c81\2\uc612\0\u0c81"+ + "\2\uc673\2\uc6d4\2\uc735\2\uc796\2\uc7f7\2\uc858\1\u04b0\2\uc8b9"+ + "\2\uc91a\2\uc97b\2\uc9dc\2\uca3d\2\uca9e\2\ucaff\2\ucb60\2\ucbc1"+ + "\2\ucc22\2\ucc83\2\ucce4\2\ucd45\2\ucda6\0\u0c81\0\u0c81\2\uce07"+ + "\2\uce68\1\ue31b\2\ucec9\1\ue43e\2\ucf2a\2\ucf8b\2\ucfec\2\ud04d"+ + "\2\ud0ae\2\ud10f\2\ud170\2\ud1d1\2\ud232\2\ud293\2\ud2f4\2\ud355"+ + "\2\ud3b6\2\ud417\2\ud478\2\ud4d9\2\ud53a\2\ud59b\2\ud5fc\2\ud65d"+ + "\2\ud6be\2\ud71f\2\ud780\2\ud7e1\2\ud842\2\ud8a3\2\ud904\2\ud965"+ + "\2\ud9c6\2\uda27\2\uda88\2\udae9\2\udb4a\2\udbab\2\udc0c\2\udc6d"+ + "\2\udcce\2\udd2f\2\udd90\2\uddf1\1\uf8b4\2\ude52\2\udeb3\2\udf14"+ + "\2\udf75\2\udfd6\2\ue037\2\ue098\2\ue0f9\2\ue15a\2\ue1bb\2\ue21c"+ + "\2\ue27d\2\ue2de\2\ue33f\2\ue3a0\2\ue401\2\ue462\2\ue4c3\2\ue524"+ + "\2\ue585\2\ue5e6\2\ue647\2\ue6a8\2\ue709\2\ue76a\2\ue7cb\0\ucc9c"+ + "\2\ue82c\2\ue88d\2\ue8ee\2\ue94f\2\ue9b0\2\uea11\2\uea72\2\uead3"+ + "\2\ueb34\2\ueb95\2\uebf6\2\uec57\2\uecb8\2\ued19\2\ued7a\2\ueddb"+ + "\2\uee3c\2\uee9d\2\ueefe\2\uef5f\2\uefc0\2\uf021\2\uf082\2\uf0e3"+ + "\2\uf144\2\uf1a5\2\uf206\2\uf267\2\uf2c8\2\uf329\2\uf38a\2\uf3eb"+ + "\2\uf44c\2\uf4ad\2\uf50e\2\uf56f\2\uf5d0\2\uf631\2\uf692\2\uf6f3"+ + "\2\uf754\2\uf7b5\2\uf816\2\uf877\2\uf8d8\2\uf939\2\uf99a\2\uf9fb"+ + "\2\ufa5c\2\ufabd\2\ufb1e\2\ufb7f\2\ufbe0\2\ufc41\2\ufca2\2\ufd03"+ + "\2\ufd64\2\ufdc5\2\ufe26\2\ufe87\2\ufee8\2\uff49\2\uffaa\3\13"+ + "\3\154\3\315\3\u012e\3\u018f\3\u01f0\3\u0251\3\u02b2\3\u0313"+ + "\3\u0374\3\u03d5\3\u0436\3\u0497\3\u04f8\3\u0559\3\u05ba\3\u061b"+ + "\3\u067c\3\u06dd\3\u073e\3\u079f\3\u0800\3\u0861\3\u08c2\3\u0923"+ + "\3\u0984\3\u09e5\3\u0a46\3\u0aa7\3\u0b08\3\u0b69\3\u0bca\3\u0c2b"+ + "\3\u0c8c\3\u0ced\3\u0d4e\3\u0daf\3\u0e10\3\u0e71\3\u0ed2\3\u0f33"+ + "\3\u0f94\3\u0ff5\3\u1056\3\u10b7\3\u1118\3\u1179\3\u11da\3\u123b"+ + "\3\u129c\3\u12fd\3\u135e\3\u13bf\3\u1420\3\u1481\3\u14e2\3\u1543"+ + "\3\u15a4\3\u1605\3\u1666\3\u16c7\3\u1728\3\u1789\3\u17ea\3\u184b"+ + "\3\u18ac\3\u190d\3\u196e\3\u19cf\3\u1a30\3\u1a91\3\u1af2\3\u1b53"+ + "\3\u1bb4\3\u1c15\3\u1c76\3\u1cd7\3\u1cd7\3\u1d38\3\u1d99\3\u1dfa"+ + "\3\u1e5b\3\u1ebc\3\u1f1d\3\u1f7e\3\u1fdf\3\u2040\3\u20a1\3\u2102"+ + "\3\u2163\3\u21c4\3\u2225\3\u2286\3\u22e7\3\u2348\3\u23a9\3\u240a"+ + "\3\u246b\3\u24cc\3\u252d\3\u258e\3\u25ef\3\u2650\3\u26b1\3\u2712"+ + "\3\u2773\3\u27d4\3\u2835\3\u2896\3\u28f7\3\u2958\3\u29b9\3\u2a1a"+ + "\3\u2a7b\3\u2adc\3\u2b3d\3\u2b9e\3\u2bff\3\u2c60\3\u2cc1\3\u2d22"+ + "\3\u2d83\3\u2de4\3\u2e45\3\u2ea6\3\u2f07\3\u2f68\3\u2fc9\3\u302a"+ + "\3\u308b\3\u30ec\3\u314d\3\u31ae\3\u320f\3\u1c76\2\u34f3\3\u3270"+ + "\3\u32d1\3\u3332\3\u3393\3\u33f4\3\u3455\3\u34b6\3\u3517\3\u3578"+ + "\3\u35d9\3\u363a\3\u369b\3\u36fc\3\u375d\3\u37be\3\u381f\3\u3880"+ + "\3\u38e1\3\u3942\3\u39a3\3\u3a04\3\u3a65\3\u3ac6\3\u3b27\3\u3b88"+ + "\3\u3be9\3\u3c4a\3\u3cab\3\u3d0c\3\u3d6d\3\u3dce\3\u3e2f\3\u3e90"+ + "\3\u3ef1\3\u3f52\3\u3fb3\3\u4014\3\u4075\3\u40d6\3\u4137\3\u4198"+ + "\3\u41f9\3\u425a\3\u42bb\3\u431c\3\u437d\3\u43de\3\u443f\3\u44a0"+ + "\3\u4501\3\u4562\3\u45c3\3\u4624\3\u4685\3\u46e6\3\u4747\3\u47a8"+ + "\3\u4809\3\u486a\3\u48cb\3\u492c\3\u498d\3\u49ee\3\u4a4f\3\u4ab0"+ + "\3\u4b11\3\u4b72\3\u4bd3\3\u4c34\3\u4c95\3\u4cf6\3\u4d57\3\u4db8"+ + "\3\u4e19\3\u4e7a\3\u4edb\3\u4f3c\3\u4f9d\3\u4ffe\3\u505f\3\u50c0"+ + "\3\u5121\3\u5182\3\u51e3\3\u5244\3\u52a5\3\u5306\3\u5367\3\u53c8"+ + "\3\u5429\3\u548a\3\u54eb\3\u554c\3\u55ad\3\u560e\3\u566f\3\u56d0"+ + "\3\u5731\3\u5792\3\u57f3\3\u5854\3\u58b5\3\u5916\3\u5977\3\u59d8"+ + "\3\u5a39\3\u5a9a\3\u5afb\3\u5b5c\3\u5bbd\3\u5c1e\3\u5c7f\3\u5ce0"+ + "\3\u5d41\3\u5da2\3\u5e03\3\u5e64\3\u5ec5\3\u5f26\3\u5f87\3\u5fe8"+ + "\3\u6049\3\u60aa\3\u610b\3\u616c\3\u61cd\3\u622e\3\u628f\3\u62f0"+ + "\3\u6351\3\u63b2\3\u6413\3\u6474\3\u64d5\3\u6536\3\u6597\3\u65f8"+ + "\3\u6659\3\u66ba\3\u671b\3\u677c\3\u67dd\3\u683e\3\u689f\3\u6900"+ + "\3\u6961\3\u69c2\3\u6a23\3\u6a84\3\u6ae5\3\u6b46\3\u6ba7\3\u6c08"+ + "\3\u6c69\3\u6cca\3\u6d2b\3\u6d8c\3\u6ded\3\u6e4e\3\u6eaf\3\u6f10"+ + "\3\u6f71\3\u6fd2\3\u7033\3\u7094\3\u70f5\3\u7156\3\u71b7\3\u7218"+ + "\3\u7279\3\u72da\3\u733b\3\u739c\3\u73fd\3\u745e\3\u74bf\3\u7520"+ + "\3\u7581\3\u75e2\3\u7643\3\u76a4\3\u7705\3\u7766\3\u77c7\3\u7828"+ + "\3\u7889\3\u78ea\3\u794b\3\u79ac\3\u7a0d\3\u7a6e\3\u7acf\3\u7b30"+ + "\3\u7b91\3\u7bf2\3\u7c53\3\u7cb4\3\u7d15\3\u7d76\3\u7dd7\3\u7e38"+ + "\3\u7e99\3\u7efa\3\u7f5b\3\u7fbc\3\u801d\3\u807e\3\u80df\3\u8140"+ + "\3\u81a1\3\u8202\3\u8263\3\u82c4\3\u8325\3\u8386\3\u83e7\3\u8448"+ + "\3\u84a9\3\u850a\3\u856b\3\u85cc\3\u862d\3\u868e\3\u86ef\3\u8750"+ + "\3\u87b1\3\u8812\3\u8873\3\u88d4\3\u8935\3\u8996\3\u89f7\3\u8a58"+ + "\3\u8ab9\3\u8b1a\3\u8b7b\3\u8bdc\3\u8c3d\3\u8c9e\3\u8cff\3\u8d60"+ + "\3\u8dc1\3\u8e22\3\u8e83\3\u8ee4\3\u8f45\3\u8fa6\3\u9007\3\u9068"+ + "\3\u90c9\3\u912a\3\u918b\3\u91ec\3\u924d\3\u92ae\3\u930f\3\u9370"+ + "\3\u93d1\3\u9432\3\u9493\3\u94f4\3\u9555\3\u95b6\3\u9617\3\u9678"+ + "\3\u96d9\3\u973a\3\u979b\3\u97fc\3\u985d\3\u98be\3\u991f\3\u9980"+ + "\3\u99e1\3\u9a42\3\u9aa3\3\u9b04\3\u9b65\3\u9bc6\3\u9c27\3\u9c88"+ + "\3\u9ce9\3\u9d4a\3\u9dab\3\u9e0c\3\u9e6d\3\u9ece\3\u9f2f\3\u9f90"+ + "\3\u9ff1\3\ua052\3\ua0b3\3\ua114\3\ua175\3\ua1d6\3\ua237\3\ua298"+ + "\3\ua2f9\3\ua35a\3\ua3bb\3\ua41c\3\ua47d\3\ua4de\3\ua53f\3\ua5a0"+ + "\3\ua601\3\ua662\3\ua6c3\3\ua724\3\ua785\3\ua7e6\3\ua847\3\ua8a8"+ + "\3\ua909\3\ua96a\3\ua9cb\3\uaa2c\3\uaa8d\3\uaaee\3\uab4f\3\uabb0"+ + "\3\uac11\3\uac72\3\uacd3\3\uad34\3\uad95\3\uadf6\3\uae57\3\uaeb8"+ + "\3\uaf19\3\uaf7a\3\uafdb\3\ub03c\3\ub09d\3\ub0fe\3\ub15f\3\ub1c0"+ + "\3\ub221\3\ub282\3\ub2e3\3\ub344\3\ub3a5\3\ub406\3\ub467\3\ub4c8"+ + "\3\ub529\3\ub58a\3\ub5eb\3\ub64c\3\ub6ad\3\ub70e\3\ub76f\3\ub7d0"+ + "\3\ub831\3\ub892\3\ub8f3\3\ub954\3\ub9b5\3\uba16\3\uba77\3\ubad8"+ + "\3\ubb39\3\ubb9a\3\ubbfb\3\ubc5c\3\ubcbd\3\ubd1e\3\ubd7f\3\ubde0"+ + "\3\ube41\3\ubea2\3\ubf03\3\ubf64\3\ubfc5\3\uc026\3\uc087\3\uc0e8"+ + "\3\uc149\1\u8dda\3\uc1aa\3\uc20b\3\uc26c\3\uc2cd\3\uc32e\3\uc38f"+ + "\3\uc3f0\3\uc451\3\uc4b2\3\uc513\3\uc574\3\uc5d5\3\uc636\3\uc697"+ + "\3\uc6f8\3\uc759\3\uc7ba\3\uc81b\3\uc87c\3\uc8dd\3\uc93e\3\uc99f"+ + "\3\uca00\3\uca61\3\ucac2\3\ucb23\3\ucb84\3\ucbe5\3\ucc46\3\ucca7"+ + "\3\ucd08\3\ucd69\3\ucdca\3\uce2b\3\uce8c\3\uceed\3\ucf4e\3\ucfaf"+ + "\3\ud010\3\ud071\3\ud0d2\3\ud133\0\u485f\3\ud194\3\ud1f5\3\ud256"+ + "\3\ud2b7\3\ud318\3\ud379\3\ud3da\3\ud43b\3\ud49c\3\ud4fd\3\ud55e"+ + "\3\ud5bf\3\ud620\3\ud681\3\ud6e2\3\ud743\3\ud7a4\3\ud805\3\ud866"+ + "\3\ud8c7\3\ud928\3\ud989\3\ud9ea\3\uda4b\3\udaac\3\udb0d\3\udb6e"+ + "\3\udbcf\3\udc30\3\udc91\3\udcf2\3\udd53\3\uddb4\3\ude15\3\ude76"+ + "\3\uded7\3\udf38\3\udf99\3\udffa\3\ue05b\3\ue0bc\3\ue11d\3\ue17e"+ + "\3\ue1df\3\ue240\3\ue2a1\3\ue302\3\ue363\3\ue3c4\3\ue425\3\ue486"+ + "\3\ue4e7\3\ue548\3\ue5a9\3\ue60a\3\ue66b\3\ue6cc\3\ue72d\3\ue78e"+ + "\3\ue7ef\3\ue850\3\ue8b1\3\ue912\3\ue973\3\ue9d4\3\uea35\3\uea96"+ + "\3\ueaf7\3\ueb58\3\uebb9\3\uec1a\3\uec7b\3\uecdc\3\ued3d\3\ued9e"+ + "\3\uedff\3\uee60\3\ueec1\3\uef22\3\uef83\3\uefe4\3\uf045\3\uf0a6"+ + "\3\uf107\3\uf168\3\uf1c9\3\uf22a\3\uf28b\3\uf2ec\3\uf34d\3\uf3ae"+ + "\3\uf40f\3\uf470\3\uf4d1\3\uf532\3\uf593\3\uf5f4\3\uf655\3\uf6b6"+ + "\3\uf717\3\uf778\3\uf7d9\3\uf83a\3\uf89b\3\uf8fc\3\uf95d\3\uf9be"+ + "\3\ufa1f\3\ufa80\3\ufae1\3\ufb42\3\ufba3\3\ufc04\3\ufc65\3\ufcc6"+ + "\3\ufd27\3\ufd88\3\ufde9\3\ufe4a\3\ufeab\3\uff0c\3\uff6d\3\uffce"+ + "\4\57\4\220\4\361\4\u0152\4\u01b3\4\u0214\4\u0275\4\u02d6"+ + "\4\u0337\4\u0398\4\u03f9\4\u045a\4\u04bb\4\u051c\4\u057d\4\u05de"+ + "\1\ua1ef\4\u063f\4\u06a0\4\u0701\4\u0762\4\u07c3\4\u0824\4\u0885"+ + "\4\u08e6\4\u0947\4\u09a8\4\u0a09\4\u0a6a\4\u0acb\4\u0b2c\4\u0b8d"+ + "\4\u0bee\4\u0c4f\4\u0cb0\4\u0d11\4\u0d72\4\u0dd3\4\u0e34\4\u0e95"+ + "\4\u0ef6\4\u0f57\4\u0fb8\4\u1019\4\u107a\4\u10db\4\u113c\4\u119d"+ + "\4\u11fe\4\u125f\4\u12c0\4\u1321\4\u1382\4\u13e3\4\u1444\4\u14a5"+ + "\4\u1506\4\u1567\4\u15c8\4\u1629\4\u168a\4\u16eb\4\u174c\4\u17ad"+ + "\4\u180e\4\u186f\4\u18d0\4\u1931\4\u1992\4\u19f3\4\u1a54\4\u1ab5"+ + "\4\u1b16\4\u1b77\4\u1bd8\4\u1c39\4\u1c9a\4\u1cfb\4\u1d5c\4\u1dbd"+ + "\4\u1e1e\4\u1e7f\4\u1ee0\4\u1f41\4\u1fa2\0\u9a98\4\u2003\4\u2064"+ + "\4\u20c5\4\u2126\4\u2187\4\u21e8\4\u2249\4\u22aa\4\u230b\4\u236c"+ + "\4\u23cd\4\u242e\4\u248f\4\u24f0\4\u2551\4\u25b2\4\u2613\4\u2674"+ + "\4\u26d5\4\u2736\4\u2797\4\u27f8\4\u2859\4\u28ba\4\u291b\4\u297c"+ + "\4\u29dd\4\u2a3e\4\u2a9f\4\u2b00\4\u2b61\4\u2bc2\4\u2c23\4\u2c84"+ + "\4\u2ce5\4\u2d46\4\u2da7\4\u2e08\4\u2e69\4\u2eca\4\u2f2b\4\u2f8c"+ + "\4\u2fed\4\u304e\4\u30af\4\u3110\4\u3171\4\u31d2\4\u3233\4\u3294"+ + "\4\u32f5\4\u3356\4\u33b7\4\u3418\4\u3479\4\u34da\4\u353b\4\u359c"+ + "\4\u35fd\4\u365e\4\u36bf\4\u3720\4\u3781\4\u37e2\4\u3843\4\u38a4"+ + "\4\u3905\4\u3966\4\u39c7\4\u3a28\4\u3a89\4\u3aea\4\u3b4b\4\u3bac"+ + "\4\u3c0d\4\u3c6e\4\u3ccf\4\u3d30\4\u3d91\4\u3df2\4\u3e53\4\u3eb4"+ + "\4\u3f15\4\u3f76\4\u3fd7\4\u4038\4\u4099\4\u40fa\4\u415b\4\u41bc"+ + "\4\u421d\4\u427e\4\u42df\4\u4340\4\u43a1\4\u4402\4\u4463\4\u44c4"+ + "\4\u4525\4\u4586\4\u45e7\4\u4648\4\u46a9\4\u470a\4\u476b\4\u47cc"+ + "\4\u482d\4\u488e\4\u48ef\4\u4950\4\u49b1\4\u4a12\4\u4a73\4\u4ad4"+ + "\4\u4b35\4\u4b96\4\u4bf7\4\u4c58\4\u4cb9\4\u4d1a\4\u4d7b\4\u4ddc"+ + "\4\u4e3d\4\u4e9e\4\u4eff\4\u4f60\4\u4fc1\4\u5022\4\u5083\4\u50e4"+ + "\4\u5145\4\u51a6\4\u5207\4\u5268\4\u52c9\4\u532a\4\u538b\4\u53ec"+ + "\4\u544d\4\u54ae\4\u550f\4\u5570\4\u55d1\4\u5632\4\u5693\4\u56f4"+ + "\4\u5755\4\u57b6\4\u5817\4\u5878\4\u58d9\4\u593a\4\u599b\4\u59fc"+ + "\4\u5a5d\4\u5abe\4\u5b1f\4\u5b80\4\u5be1\4\u5c42\4\u5ca3\4\u5d04"+ + "\4\u5d65\4\u5dc6\4\u5e27\4\u5e88\4\u5ee9\4\u5f4a\4\u5fab\4\u600c"+ + "\4\u606d\4\u60ce\4\u612f\4\u6190\4\u61f1\4\u6252\4\u62b3\4\u6314"+ + "\4\u6375\4\u63d6\4\u6437\4\u6498\4\u64f9\4\u655a\4\u65bb\4\u661c"+ + "\4\u667d\4\u66de\4\u673f\4\u67a0\4\u6801\4\u6862\4\u68c3\4\u6924"+ + "\4\u6985\4\u69e6\4\u6a47\4\u6aa8\4\u6b09\4\u6b6a\4\u6bcb\4\u6c2c"+ + "\4\u6c8d\4\u6cee\4\u6d4f\4\u6db0\4\u6e11\4\u6e72\4\u6ed3\4\u6f34"+ + "\4\u6f95\4\u6ff6\4\u7057\4\u70b8\4\u7119\4\u717a\4\u71db\4\u723c"+ + "\4\u729d\4\u72fe\4\u735f\4\u73c0\4\u7421\4\u7482\4\u74e3\4\u7544"+ + "\4\u75a5\4\u7606\4\u7667\4\u76c8\4\u7729\4\u778a\4\u77eb\4\u784c"+ + "\4\u78ad\4\u790e\4\u796f\4\u79d0\4\u7a31\4\u7a92\4\u7af3\4\u7b54"+ + "\4\u7bb5\4\u7c16\4\u7c77\4\u7cd8\4\u7d39\4\u7d9a\4\u7dfb\4\u7e5c"+ + "\4\u7ebd\4\u7f1e\4\u7f7f\4\u7fe0\4\u8041\4\u80a2\4\u8103\4\u8164"+ + "\4\u81c5\4\u8226\4\u8287\4\u82e8\4\u8349\4\u83aa\4\u840b\4\u846c"+ + "\4\u84cd\4\u852e\4\u858f\4\u85f0\4\u8651\4\u86b2\4\u8713\4\u8774"+ + "\4\u87d5\4\u8836\4\u8897\4\u88f8\4\u8959\4\u89ba\4\u8a1b\4\u8a7c"+ + "\4\u8add\4\u8b3e\4\u8b9f\4\u8c00\4\u8c61\4\u8cc2\4\u8d23\3\u4f9d"+ + "\4\u8d84\4\u8de5\4\u8e46\4\u8ea7\4\u8f08\4\u8f69\4\u8fca\4\u902b"+ + "\4\u908c\4\u90ed\4\u914e\4\u91af\4\u9210\4\u9271\4\u92d2\4\u9333"+ + "\4\u9394\4\u93f5\4\u9456\4\u94b7\4\u9518\4\u9579\4\u95da\4\u963b"+ + "\4\u969c\4\u96fd\4\u975e\4\u97bf\4\u9820\4\u9881\4\u98e2\4\u9943"+ + "\4\u99a4\4\u9a05\4\u9a66\4\u9ac7\4\u9b28\4\u9b89\4\u9bea\4\u9c4b"+ + "\4\u9cac\4\u9d0d\4\u9d6e\4\u9dcf\4\u9e30\4\u9e91\4\u9ef2\4\u9f53"+ + "\4\u9fb4\4\ua015\4\ua076\4\ua0d7\4\ua138\4\ua199\4\ua1fa\4\ua25b"+ + "\4\ua2bc\4\ua31d\4\ua37e\4\ua3df\4\ua440\4\ua4a1\4\ua502\4\ua563"+ + "\4\ua5c4\4\ua625\4\ua686\4\ua6e7\4\ua748\4\ua7a9\4\ua80a\4\ua86b"+ + "\4\ua8cc\4\ua92d\4\ua98e\4\ua9ef\4\uaa50\4\uaab1\4\uab12\4\uab73"+ + "\4\uabd4\4\uac35\4\uac96\4\uacf7\4\uad58\4\uadb9\4\uae1a\4\uae7b"+ + "\4\uaedc\4\uaf3d\4\uaf9e\4\uafff\4\ub060\4\ub0c1\4\ub122\4\ub183"+ + "\4\ub1e4\4\ub245\4\ub2a6\4\ub307\4\ub368\4\ub3c9\4\ub42a\4\ub48b"+ + "\4\ub4ec\4\ub54d\4\ub5ae\4\ub60f\4\ub670\4\ub6d1\4\ub732\4\ub793"+ + "\4\ub7f4\4\ub855\4\ub8b6\4\ub917\4\ub978\4\ub9d9\4\uba3a\4\uba9b"+ + "\4\ubafc\4\ubb5d\4\ubbbe\4\ubc1f\4\ubc80\4\ubce1\4\ubd42\4\ubda3"+ + "\4\ube04\4\ube65\4\u612f\4\ubec6\4\ubf27\4\ubf88\4\ubfe9\4\uc04a"+ + "\4\uc0ab\4\uc10c\4\uc16d\4\uc1ce\4\uc22f\4\uc290\4\uc2f1\4\uc352"+ + "\4\uc3b3\4\uc414\4\uc475\4\uc4d6\4\uc537\4\uc598\4\uc5f9\4\uc65a"+ + "\4\uc6bb\4\uc71c\4\uc77d\4\uc7de\4\uc83f\4\uc8a0\4\uc901\4\uc962"+ + "\4\uc9c3\4\uca24\4\uca85\4\ucae6\4\ucb47\4\ucba8\4\ucc09\4\ucc6a"+ + "\4\ucccb\4\ucd2c\4\ucd8d\4\ucdee\4\uce4f\4\uceb0\4\ucf11\4\ucf72"+ + "\4\ucfd3\4\ud034\4\ud095\4\ud0f6\4\ud157\4\ud1b8\4\ud219\4\ud27a"+ + "\4\ud2db\4\ud33c\4\ud39d\4\ud3fe\4\ud45f\4\ud4c0\4\ud521\4\ud582"+ + "\4\ud5e3\4\ud644\4\ud6a5\4\ud706\4\ud767\4\ud7c8\4\ud829\4\ud88a"+ + "\4\ud8eb\4\ud94c\4\ud9ad\4\uda0e\4\uda6f\4\udad0\4\udb31\4\udb92"+ + "\4\udbf3\4\udc54\4\udcb5\4\udd16\4\udd77\4\uddd8\4\ude39\4\ude9a"+ + "\4\udefb\4\udf5c\4\udfbd\4\ue01e\4\ue07f\4\ue0e0\4\ue141\4\ue1a2"+ + "\4\ue203\4\ue264\4\ue2c5\4\ue326\4\ue387\4\ue3e8\4\ue449\4\ue4aa"+ + "\4\ue50b\4\ue56c\4\ue5cd\4\ue62e\4\ue68f\4\ue6f0\4\ue751\4\ue7b2"+ + "\4\ue813\4\ue874\4\ue8d5\4\ue936\4\ue997\4\ue9f8\4\uea59\4\ueaba"+ + "\4\ueb1b\4\ueb7c\4\uebdd\4\uec3e\4\uec9f\0\u485f\4\ued00\4\ued61"+ + "\4\uedc2\4\uee23\4\uee84\4\ueee5\4\uef46\4\uefa7\4\uf008\4\uf069"+ + "\4\uf0ca\4\uf12b\4\uf18c\4\uf1ed\1\ue808\4\uf24e\4\uf2af\4\uf310"+ + "\4\uf371\4\uf3d2\4\uf433\4\uf494\4\uf4f5\4\uf556\4\uf5b7\4\uf618"+ + "\4\uf679\4\uf6da\4\uf73b\4\uf79c\4\uf7fd\4\uf85e\4\uf8bf\4\uf920"+ + "\4\uf981\4\uf9e2\4\ufa43\4\ufaa4\4\ufb05\4\ufb66\4\ufbc7\4\ufc28"+ + "\4\ufc89\4\ufcea\4\ufd4b\4\ufdac\4\ufe0d\4\ufe6e\4\ufecf\4\uff30"+ + "\4\uff91\4\ufff2\5\123\5\264\5\u0115\5\u0176\2\u620a\5\u01d7"+ + "\5\u0238\5\u0299\5\u02fa\5\u035b\5\u03bc\5\u041d\5\u047e\5\u04df"+ + "\5\u0540\5\u05a1\5\u0602\5\u0663\5\u06c4\5\u0725\5\u0786\5\u07e7"+ + "\5\u0848\5\u08a9\5\u090a\5\u096b\5\u09cc\5\u0a2d\5\u0a8e\5\u0aef"+ + "\5\u0b50\5\u0bb1\5\u0c12\5\u0c73\5\u0cd4\5\u0d35\5\u0d96\5\u0df7"+ + "\5\u0e58\5\u0eb9\5\u0f1a\5\u0f7b\5\u0fdc\5\u103d\5\u109e\5\u10ff"+ + "\5\u1160\5\u11c1\5\u1222\5\u1283\5\u12e4\5\u1345\5\u13a6\5\u1407"+ + "\5\u1468\5\u14c9\5\u152a\5\u158b\5\u15ec\5\u164d\5\u16ae\5\u170f"+ + "\5\u1770\5\u17d1\5\u1832\5\u1893\5\u18f4\5\u1955\5\u19b6\5\u1a17"+ + "\5\u1a78\5\u1ad9\5\u1b3a\5\u1b9b\5\u1bfc\5\u1c5d\5\u1cbe\5\u1d1f"+ + "\5\u1d80\5\u1de1\5\u1e42\5\u1ea3\5\u1f04\5\u1f65\5\u1fc6\5\u2027"+ + "\5\u2088\5\u20e9\5\u214a\5\u21ab\5\u220c\5\u226d\5\u22ce\5\u232f"+ + "\5\u2390\5\u23f1\5\u2452\5\u24b3\5\u2514\5\u2575\5\u25d6\5\u2637"+ + "\5\u2698\5\u26f9\5\u275a\5\u27bb\5\u281c\5\u287d\5\u28de\5\u293f"+ + "\5\u29a0\5\u2a01\5\u2a62\5\u2ac3\5\u2b24\5\u2b85\5\u2be6\5\u2c47"+ + "\5\u2ca8\5\u2d09\5\u2d6a\5\u2dcb\5\u2e2c\5\u2e8d\5\u2eee\5\u2f4f"+ + "\5\u2fb0\5\u3011\5\u3072\5\u30d3\5\u3134\5\u3195\5\u31f6\5\u3257"+ + "\5\u32b8\5\u3319\5\u337a\5\u33db\5\u343c\5\u349d\5\u34fe\5\u355f"+ + "\5\u35c0\5\u3621\5\u3682\5\u36e3\5\u3744\5\u37a5\5\u3806\5\u3867"+ + "\5\u38c8\5\u3929\5\u398a\5\u39eb\5\u3a4c\5\u3aad\5\u3b0e\5\u3b6f"+ + "\5\u3bd0\5\u3c31\5\u3c92\5\u3cf3\5\u3d54\5\u3db5\5\u3e16\5\u3e77"+ + "\5\u3ed8\5\u3f39\5\u3f9a\5\u3ffb\5\u405c\5\u40bd\5\u411e\5\u417f"+ + "\5\u41e0\5\u4241\5\u42a2\5\u4303\5\u4364\5\u43c5\5\u4426\5\u4487"+ + "\5\u44e8\5\u4549\5\u45aa\5\u460b\5\u466c\5\u46cd\5\u472e\5\u478f"+ + "\5\u47f0\5\u4851\5\u48b2\5\u4913\5\u4974\5\u49d5\5\u4a36\5\u4a97"+ + "\5\u4af8\5\u4b59\5\u4bba\5\u4af8\5\u4c1b\5\u4c7c\5\u4cdd\5\u4d3e"+ + "\5\u4d9f\5\u4e00\5\u4e61\5\u4ec2\5\u4f23\5\u4f84\5\u4fe5\5\u5046"+ + "\5\u50a7\5\u5108\5\u5169\5\u51ca\5\u522b\5\u528c\5\u52ed\5\u534e"+ + "\5\u53af\5\u5410\5\u5471\5\u54d2\5\u5533\5\u5594\5\u55f5\5\u5656"+ + "\5\u56b7\5\u5718\5\u5779\5\u57da\5\u583b\5\u589c\5\u58fd\5\u595e"+ + "\5\u59bf\5\u5a20\5\u5a81\5\u5ae2\5\u5b43\5\u5ba4\5\u5c05\5\u5c66"+ + "\5\u5cc7\5\u5d28\5\u5d89\5\u5dea\5\u5e4b\5\u5eac\5\u5f0d\5\u5f6e"+ + "\5\u5fcf\5\u6030\5\u6091\5\u60f2\5\u6153\5\u61b4\5\u6215\5\u6276"+ + "\5\u62d7\5\u6338\5\u6399\5\u63fa\5\u645b\5\u64bc\5\u651d\5\u657e"+ + "\5\u65df\5\u6640\5\u66a1\5\u6702\5\u6763\5\u67c4\5\u6825\5\u6886"+ + "\5\u68e7\5\u6948\5\u69a9\5\u6a0a\5\u6a6b\5\u6acc\5\u6b2d\5\u6b8e"+ + "\5\u6bef\5\u6c50\5\u6cb1\5\u6d12\5\u6d73\5\u6dd4\5\u6e35\5\u6e96"+ + "\5\u6ef7\5\u6f58\5\u6fb9\5\u701a\5\u707b\5\u70dc\5\u713d\5\u719e"+ + "\5\u71ff\5\u7260\5\u72c1\5\u7322\5\u7383\5\u73e4\5\u7445\5\u74a6"+ + "\5\u7507\5\u7568\5\u75c9\5\u762a\5\u768b\5\u76ec\5\u774d\5\u77ae"+ + "\5\u780f\5\u7870\5\u78d1\5\u7932\5\u7993\5\u79f4\5\u7a55\5\u7ab6"+ + "\5\u7b17\5\u7b78\5\u7bd9\5\u7c3a\5\u7c9b\5\u7cfc\5\u7d5d\5\u7dbe"+ + "\5\u7e1f\5\u7e80\5\u7ee1\5\u7f42\5\u7fa3\5\u8004\5\u8065\5\u80c6"+ + "\5\u8127\5\u8188\5\u81e9\5\u824a\5\u82ab\5\u830c\5\u836d\5\u83ce"+ + "\5\u842f\5\u8490\5\u84f1\5\u8552\5\u85b3\5\u8614\5\u8675\5\u86d6"+ + "\5\u8737\5\u8798\5\u87f9\5\u885a\5\u88bb\5\u891c\5\u897d\5\u89de"+ + "\5\u8a3f\5\u8aa0\5\u8b01\5\u8b62\5\u8bc3\5\u8c24\5\u8c85\5\u8ce6"+ + "\5\u8d47\5\u8da8\5\u8e09\5\u8e6a\5\u8ecb\5\u8f2c\5\u8f8d\5\u8fee"+ + "\5\u904f\5\u90b0\5\u9111\5\u9172\5\u91d3\5\u9234\5\u9295\5\u92f6"+ + "\5\u9357\5\u93b8\5\u9419\5\u947a\5\u94db\1\u34cf\5\u953c\5\u959d"+ + "\5\u95fe\5\u965f\2\u2262\5\u96c0\5\u9721\5\u9782\5\u97e3\5\u9844"+ + "\5\u98a5\5\u9906\5\u9967\5\u99c8\5\u9a29\5\u9a8a\5\u9aeb\5\u9b4c"+ + "\5\u9bad\5\u9c0e\5\u9c6f\5\u9cd0\5\u9d31\5\u9d92\5\u9df3\5\u9e54"+ + "\5\u9eb5\5\u9f16\5\u9f77\5\u9fd8\5\ua039\5\ua09a\5\ua0fb\5\ua15c"+ + "\5\ua1bd\5\u6e96\5\ua21e\3\u51e3\5\ua27f\5\ua2e0\5\ua341\5\ua3a2"+ + "\5\ua403\5\ua464\5\ua4c5\5\ua526\5\ua587\5\ua5e8\5\ua649\5\ua6aa"+ + "\5\ua70b\5\ua76c\5\ua7cd\5\ua82e\5\ua88f\5\ua8f0\5\ua951\5\ua9b2"+ + "\5\uaa13\5\uaa74\5\uaad5\5\uab36\5\uab97\5\uabf8\5\uac59\5\uacba"+ + "\5\uad1b\5\uad7c\5\uaddd\5\uae3e\5\uae9f\5\uaf00\5\uaf61\5\uafc2"+ + "\5\ub023\5\ub084\5\ub0e5\5\ub146\5\ub1a7\5\ub208\5\ub269\5\ub2ca"+ + "\5\ub32b\5\ub38c\5\ub3ed\5\ub44e\5\ub4af\5\ub510\5\ub571\5\ub5d2"+ + "\5\ub633\5\ub694\5\ub6f5\5\ub756\5\ub7b7\5\ub818\5\ub879\5\ub8da"+ + "\5\ub93b\5\ub99c\5\ub9fd\5\uba5e\5\ubabf\5\ubb20\5\ubb81\5\ubbe2"+ + "\5\ubc43\5\ubca4\5\ubd05\5\ubd66\5\ubdc7\5\ube28\5\ube89\5\ubeea"+ + "\5\ubf4b\5\ubfac\5\uc00d\5\uc06e\5\uc0cf\5\uc130\5\uc191\5\uc1f2"+ + "\5\uc253\5\uc2b4\5\uc315\2\u30c8\5\uc376\5\uc3d7\5\uc438\5\uc499"+ + "\5\uc4fa\5\uc55b\5\uc5bc\5\uc61d\5\uc67e\5\uc6df\5\uc740\5\uc7a1"+ + "\5\uc802\5\uc863\5\uc8c4\5\uc925\5\uc986\5\uc9e7\5\uca48\5\ucaa9"+ + "\5\ucb0a\5\ucb6b\5\ucbcc\5\ucc2d\5\ucc8e\5\uccef\5\ucd50\5\ucdb1"+ + "\5\uce12\5\uce73\5\uced4\5\ucf35\5\ucf96\5\ucff7\5\ud058\5\ud0b9"+ + "\5\ud11a\5\ud17b\5\ud1dc\5\ud23d\5\ud29e\5\ud2ff\5\ud360\5\ud3c1"+ + "\5\ud422\5\ud483\5\ud4e4\5\ud545\5\ud5a6\5\ud607\5\ud668\5\ud6c9"+ + "\5\ud72a\5\ud78b\5\ud7ec\5\ud84d\5\ud8ae\5\ud90f\5\ud970\5\ud9d1"+ + "\5\uda32\5\uda93\5\udaf4\5\udb55\5\udbb6\5\udc17\5\udc78\5\udcd9"+ + "\5\udd3a\5\udd9b\5\uddfc\5\ude5d\5\udebe\5\udf1f\5\udf80\5\udfe1"+ + "\5\ue042\5\ue0a3\5\ue104\5\ue165\5\ue1c6\5\ue227\5\ue288\5\ue2e9"+ + "\5\ue34a\5\ue3ab\5\ue40c\5\ue46d\5\ue4ce\5\ue52f\5\ue590\5\ue5f1"+ + "\5\ue652\5\ue6b3\5\ue714\5\ue775\5\ue7d6\5\ue837\5\ue898\5\ue8f9"+ + "\5\ue95a\5\ue9bb\5\uea1c\5\uea7d\5\ueade\5\ueb3f\5\ueba0\5\uec01"+ + "\5\uec62\5\uecc3\5\ued24\5\ued85\5\uede6\5\uee47\5\ueea8\5\uef09"+ + "\5\uef6a\5\uefcb\5\uf02c\5\uf08d\5\uf0ee\5\uf14f\5\uf1b0\5\uf211"+ + "\5\uf272\5\uf2d3\5\uf334\5\uf395\5\uf3f6\5\uf457\5\uf4b8\5\uf519"+ + "\5\uf57a\5\uf5db\1\ubb52\5\uf63c\5\uf69d\5\uf6fe\5\uf75f\5\uf7c0"+ + "\5\uf821\5\uf882\5\uf8e3\5\uf944\5\uf9a5\5\ufa06\5\ufa67\5\ufac8"+ + "\5\ufb29\5\ufb8a\5\ufbeb\5\ufc4c\5\ufcad\5\ufd0e\5\ufd6f\5\ufdd0"+ + "\5\ufe31\5\ufe92\5\ufef3\5\uff54\5\uffb5\6\26\6\167\6\330"+ + "\6\u0139\6\u019a\6\u01fb\6\u025c\6\u02bd\6\u031e\6\u037f\6\u03e0"+ + "\6\u0441\6\u04a2\6\u0503\6\u0564\6\u05c5\6\u0626\6\u0687\6\u06e8"+ + "\6\u0749\6\u07aa\6\u080b\6\u086c\6\u08cd\6\u092e\6\u098f\6\u09f0"+ + "\6\u0a51\6\u0ab2\6\u0b13\6\u0b74\6\u0bd5\6\u0c36\6\u0c97\6\u0cf8"+ + "\6\u0d59\6\u0dba\6\u0e1b\6\u0e7c\6\u0edd\6\u0f3e\6\u0f9f\6\u1000"+ + "\6\u1061\6\u10c2\6\u1123\6\u1184\6\u11e5\6\u1246\6\u12a7\6\u1308"+ + "\6\u1369\6\u13ca\6\u142b\6\u148c\6\u14ed\6\u154e\6\u15af\6\u1610"+ + "\6\u1671\6\u16d2\6\u1733\6\u1794\6\u17f5\6\u1856\6\u18b7\6\u1918"+ + "\6\u1979\6\u19da\6\u1a3b\6\u1a9c\6\u1afd\6\u1b5e\6\u1bbf\6\u1c20"+ + "\6\u1c81\6\u1ce2\6\u1d43\6\u1da4\6\u1e05\6\u1e66\6\u1ec7\6\u1f28"+ + "\6\u1f89\6\u1fea\6\u204b\6\u20ac\6\u210d\6\u216e\6\u21cf\6\u2230"+ + "\6\u2291\6\u22f2\6\u2353\6\u23b4\6\u2415\6\u2476\6\u24d7\6\u2538"+ + "\6\u2599\6\u25fa\6\u265b\6\u26bc\6\u271d\3\ue973\6\u277e\6\u27df"+ + "\6\u2840\6\u28a1\6\u2902\6\u2963\6\u29c4\6\u2a25\6\u2a86\6\u2ae7"+ + "\6\u2b48\6\u2ba9\6\u2c0a\6\u2c6b\6\u2ccc\6\u2d2d\6\u2d8e\6\u2def"+ + "\6\u2e50\6\u2eb1\6\u2f12\6\u2f73\6\u2fd4\6\u3035\6\u3096\6\u30f7"+ + "\6\u3158\6\u31b9\6\u321a\6\u327b\6\u32dc\6\u333d\6\u339e\6\u33ff"+ + "\6\u3460\6\u34c1\6\u3522\6\u3583\6\u35e4\6\u3645\6\u36a6\6\u3707"+ + "\6\u3768\6\u37c9\6\u382a\6\u388b\6\u38ec\6\u394d\6\u39ae\6\u3a0f"+ + "\6\u3a70\6\u3ad1\6\u3b32\6\u3b93\6\u3bf4\6\u3c55\6\u3cb6\6\u3d17"+ + "\6\u3d78\6\u3dd9\6\u3e3a\6\u3e9b\6\u3efc\6\u3f5d\6\u3fbe\6\u401f"+ + "\6\u4080\6\u40e1\6\u4142\6\u41a3\6\u4204\6\u4265\6\u42c6\6\u4327"+ + "\6\u4388\6\u43e9\6\u444a\6\u44ab\6\u450c\6\u456d\6\u45ce\6\u462f"+ + "\6\u4690\6\u46f1\6\u4752\6\u47b3\6\u4814\6\u4875\6\u48d6\6\u4937"+ + "\6\u4998\6\u49f9\6\u4a5a\6\u4abb\6\u4b1c\6\u4b7d\6\u4bde\6\u4c3f"+ + "\6\u4ca0\6\u4d01\6\u4d62\6\u4dc3\6\u4e24\6\u4e85\6\u4ee6\6\u4f47"+ + "\6\u4fa8\6\u5009\6\u506a\6\u50cb\6\u512c\6\u518d\6\u51ee\6\u524f"+ + "\6\u52b0\6\u5311\6\u5372\6\u53d3\6\u5434\6\u5495\6\u54f6\6\u5557"+ + "\6\u55b8\6\u5619\6\u567a\6\u56db\6\u573c\6\u579d\6\u57fe\6\u585f"+ + "\6\u58c0\6\u5921\6\u5982\6\u59e3\6\u5a44\6\u5aa5\6\u5b06\6\u5b67"+ + "\6\u5bc8\6\u5c29\6\u5c8a\6\u5ceb\6\u5d4c\6\u5dad\6\u5e0e\6\u5e6f"+ + "\1\ua1ef\6\u5ed0\6\u5f31\6\u5f92\6\u5ff3\6\u6054\6\u60b5\6\u6116"+ + "\6\u6177\6\u61d8\6\u6239\6\u629a\6\u62fb\6\u635c\6\u63bd\6\u641e"+ + "\6\u647f\6\u64e0\6\u6541\6\u65a2\6\u6603\6\u6664\6\u66c5\6\u6726"+ + "\6\u6787\6\u67e8\6\u6849\6\u68aa\6\u690b\6\u696c\6\u69cd\6\u6a2e"+ + "\6\u6a8f\6\u6af0\6\u6b51\6\u6bb2\6\u6c13\6\u6c74\6\u6cd5\1\u48e4"+ + "\6\u6d36\6\u6d97\6\u6df8\6\u6e59\6\u6eba\6\u6f1b\6\u6f7c\6\u6fdd"+ + "\6\u703e\6\u709f\6\u7100\6\u7161\6\u71c2\6\u7223\6\u7284\6\u72e5"+ + "\6\u7346\6\u73a7\6\u7408\6\u7469\6\u74ca\6\u752b\6\u758c\6\u75ed"+ + "\6\u764e\6\u76af\6\u7710\6\u7771\6\u77d2\6\u7833\6\u7894\6\u78f5"+ + "\6\u7956\6\u79b7\6\u7a18\6\u7a79\6\u7ada\6\u7b3b\6\u7b9c\6\u7bfd"+ + "\6\u696c\6\u7c5e\6\u7cbf\6\u7d20\6\u7d81\6\u7de2\6\u7e43\6\u7ea4"+ + "\6\u7f05\6\u7f66\6\u7fc7\6\u8028\6\u8089\6\u80ea\6\u814b\6\u81ac"+ + "\6\u820d\6\u826e\6\u82cf\6\u8330\6\u8391\6\u83f2\6\u8453\6\u84b4"+ + "\6\u8515\6\u8576\6\u85d7\6\u8638\6\u8699\6\u86fa\6\u875b\6\u87bc"+ + "\6\u881d\6\u887e\6\u88df\6\u8940\6\u89a1\6\u8a02\6\u8a63\6\u8ac4"+ + "\6\u8b25\6\u8b86\6\u8be7\6\u8c48\6\u8ca9\6\u8d0a\6\u8d6b\6\u8dcc"+ + "\6\u8e2d\6\u8e8e\6\u8eef\6\u8f50\6\u8fb1\6\u9012\6\u9073\6\u90d4"+ + "\6\u9135\6\u9196\6\u91f7\6\u9258\6\u92b9\6\u931a\6\u937b\6\u93dc"+ + "\6\u943d\6\u949e\6\u94ff\6\u9560\6\u95c1\6\u9622\6\u9683\6\u96e4"+ + "\6\u9745\6\u97a6\6\u9807\6\u9868\6\u98c9\6\u992a\6\u998b\6\u99ec"+ + "\6\u9a4d\6\u9aae\6\u9b0f\6\u9b70\6\u9bd1\6\u9c32\6\u9c93\6\u9cf4"+ + "\6\u9d55\6\u9db6\6\u9e17\6\u9e78\6\u9ed9\6\u9f3a\6\u9f9b\6\u9ffc"+ + "\6\ua05d\6\ua0be\6\ua11f\6\ua180\6\ua1e1\6\ua242\6\ua2a3\6\ua304"+ + "\6\ua365\6\ua3c6\6\ua427\6\ua488\6\ua4e9\6\ua54a\6\ua5ab\6\ua60c"+ + "\6\ua66d\6\ua6ce\6\ua72f\6\ua790\6\ua7f1\6\ua852\6\ua8b3\6\ua914"+ + "\6\ua975\6\ua9d6\6\uaa37\6\uaa98\6\uaaf9\6\uab5a\6\uabbb\6\uac1c"+ + "\6\uac7d\6\uacde\6\uad3f\6\uada0\6\uae01\6\uae62\6\uaec3\6\uaf24"+ + "\6\uaf85\6\uafe6\6\ub047\6\ub0a8\6\ub109\6\ub16a\6\ub1cb\6\ub22c"+ + "\6\ub28d\6\ub2ee\6\ub34f\6\ub3b0\6\ub411\6\ub472\6\ub4d3\6\ub534"+ + "\6\ub595\6\ub5f6\6\ub657\6\ub6b8\6\ub719\6\ub77a\6\ub7db\6\ub83c"+ + "\6\ub89d\6\ub8fe\6\ub95f\6\ub9c0\6\uba21\6\uba82\6\ubae3\6\ubb44"+ + "\6\ubba5\6\ubc06\6\ubc67\6\ubcc8\6\ubd29\6\ubd8a\6\ubdeb\6\ube4c"+ + "\6\ubead\6\ubf0e\6\ubf6f\6\ubfd0\6\uc031\6\uc092\6\uc0f3\6\uc154"+ + "\6\uc1b5\6\uc216\6\uc277\6\uc2d8\6\uc339\6\uc39a\6\uc3fb\6\uc45c"+ + "\6\uc4bd\6\uc51e\6\uc57f\6\uc5e0\6\uc641\6\uc6a2\6\uc703\6\uc764"+ + "\6\uc7c5\6\uc826\6\uc887\6\uc8e8\6\uc949\6\uc9aa\6\uca0b\6\uca6c"+ + "\6\ucacd\6\ucb2e\6\ucb8f\6\ucbf0\6\ucc51\6\uccb2\6\ucd13\6\ucd74"+ + "\6\ucdd5\6\uce36\6\uce97\6\ucef8\6\ucf59\6\ucfba\6\ud01b\6\ud07c"+ + "\6\ud0dd\6\ud13e\6\ud19f\6\ud200\6\ud261\6\ud2c2\6\ud323\6\ud384"+ + "\6\ud3e5\6\ud446\6\ud4a7\6\ud508\6\ud569\6\ud5ca\4\u1fa2\6\ud62b"+ + "\6\ud68c\6\ud6ed\6\ud74e\6\ud7af\6\ud810\6\ud871\6\ud8d2\6\ud933"+ + "\6\ud994\6\ud9f5\6\uda56\6\udab7\6\udb18\6\udb79\6\udbda\6\udc3b"+ + "\6\udc9c\6\udcfd\6\udd5e\6\uddbf\6\ude20\6\ude81\6\udee2\6\udf43"+ + "\6\udfa4\6\ue005\6\ue066\6\ue0c7\6\ue128\6\ue189\6\ue1ea\6\ue24b"+ + "\6\ue2ac\6\ue30d\6\ue36e\6\ue3cf\6\ue430\6\ue491\6\ue4f2\6\ue553"+ + "\6\ue5b4\6\ue615\6\ue676\6\ue6d7\6\ue738\6\ue799\4\ub7f4\6\ue7fa"+ + "\6\ue85b\6\ue8bc\6\ue91d\6\ue97e\6\ue9df\6\uea40\6\ueaa1\6\ueb02"+ + "\6\ueb63\6\uebc4\6\uec25\6\uec86\6\uece7\6\ued48\6\ueda9\6\uee0a"+ + "\6\uee6b\6\ueecc\6\uef2d\6\uef8e\6\uefef\6\uf050\6\uf0b1\6\uf112"+ + "\6\uf173\6\uf1d4\6\uf235\6\uf296\6\uf2f7\6\uf358\6\uf3b9\6\uf41a"+ + "\6\uf47b\6\uf4dc\6\uf53d\3\u41f9\6\uf59e\6\uf5ff\6\uf660\6\uf6c1"+ + "\6\uf722\6\uf783\6\uf7e4\6\uf845\6\uf8a6\6\uf907\6\uf968\6\uf9c9"+ + "\6\ufa2a\6\ufa8b\6\ufaec\6\ufb4d\6\ufbae\6\ufc0f\6\ufc70\6\ufcd1"+ + "\6\ufd32\6\ufd93\6\ufdf4\6\ufe55\6\ufeb6\6\uff17\6\uff78\6\uffd9"+ + "\7\72\7\233\7\374\7\u015d\7\u01be\7\u021f\7\u0280\7\u02e1"+ + "\7\u0342\7\u03a3\7\u0404\7\u0465\7\u04c6\7\u0527\7\u0588\7\u05e9"+ + "\7\u064a\7\u06ab\7\u070c\7\u076d\7\u07ce\7\u082f\7\u0890\7\u08f1"+ + "\7\u0952\0\u0c81\7\u09b3\7\u0a14\7\u0a75\7\u0ad6\7\u0b37\0\u0c81"+ + "\7\u0b98\0\u0c81\7\u0bf9\7\u0c5a\0\u0c81\7\u0cbb\7\u0d1c\7\u0d7d"+ + "\7\u0dde\7\u0e3f\7\u0ea0\7\u0f01\7\u0f62\7\u0fc3\7\u1024\7\u1085"+ + "\7\u10e6\7\u1147\7\u11a8\7\u1209\7\u126a\7\u12cb\7\u132c\7\u138d"+ + "\7\u13ee\7\u144f\7\u14b0\7\u1511\4\u2ce5\7\u1572\7\u15d3\7\u1634"+ + "\7\u1695\7\u16f6\7\u1757\7\u17b8\7\u1819\7\u187a\7\u18db\7\u193c"+ + "\7\u199d\7\u19fe\7\u1a5f\7\u1ac0\7\u1b21\7\u1b82\7\u1be3\7\u1c44"+ + "\7\u1ca5\7\u1d06\7\u1d67\7\u1dc8\7\u1e29\7\u1e8a\7\u1eeb\2\udf75"+ + "\7\u1f4c\7\u1fad\7\u200e\7\u206f\7\u20d0\7\u2131\7\u2192\7\u21f3"+ + "\7\u2254\7\u22b5\7\u2316\7\u2377\7\u23d8\7\u2439\7\u249a\7\u24fb"+ + "\7\u255c\7\u25bd\7\u261e\7\u267f\7\u26e0\7\u2741\7\u27a2\7\u2803"+ + "\7\u2864\4\u612f\7\u28c5\7\u2926\7\u2987\7\u29e8\7\u2a49\7\u2aaa"+ + "\7\u2b0b\7\u2b6c\7\u2bcd\7\u2c2e\7\u2c8f\7\u2cf0\7\u2d51\7\u2db2"+ + "\7\u2e13\7\u2e74\7\u2ed5\7\u2f36\7\u2f97\7\u2ff8\7\u3059\7\u30ba"+ + "\7\u311b\7\u317c\7\u31dd\7\u323e\7\u329f\7\u3300\7\u3361\7\u33c2"+ + "\6\u758c\7\u3423\7\u3484\7\u34e5\7\u3546\7\u35a7\7\u3608\7\u3669"+ + "\7\u36ca\7\u372b\7\u378c\7\u37ed\7\u384e\7\u38af\7\u3910\7\u3971"+ + "\7\u39d2\7\u3a33\7\u3a94\7\u3af5\7\u3b56\7\u3bb7\7\u3c18\7\u3c79"+ + "\7\u3cda\7\u3d3b\7\u3d9c\7\u3dfd\7\u3e5e\7\u3ebf\7\u3f20\7\u3f81"+ + "\7\u3fe2\7\u4043\7\u40a4\7\u4105\7\u4166\7\u41c7\7\u4228\7\u4289"+ + "\7\u42ea\7\u434b\7\u43ac\7\u440d\7\u446e\7\u44cf\7\u4530\7\u4591"+ + "\7\u45f2\7\u4653\7\u46b4\7\u4715\7\u4776\7\u47d7\7\u4838\7\u4899"+ + "\7\u48fa\7\u495b\7\u49bc\7\u4a1d\5\u1bfc\7\u4a7e\7\u4adf\7\u4b40"+ + "\7\u4ba1\7\u4c02\7\u4c63\7\u4cc4\7\u4d25\7\u4d86\7\u4de7\7\u4e48"+ + "\7\u4ea9\7\u4f0a\7\u4f6b\7\u4fcc\7\u502d\7\u508e\7\u50ef\7\u5150"+ + "\7\u51b1\7\u5212\7\u5273\7\u52d4\7\u5335\7\u5396\7\u53f7\7\u5458"+ + "\7\u54b9\7\u551a\7\u557b\7\u55dc\7\u563d\7\u569e\7\u56ff\7\u5760"+ + "\7\u57c1\7\u5822\7\u5883\7\u58e4\7\u5945\7\u59a6\7\u5a07\7\u5a68"+ + "\7\u5ac9\7\u5b2a\7\u5b8b\7\u5bec\7\u5c4d\7\u5cae\7\u5d0f\7\u5d70"+ + "\7\u5dd1\7\u5e32\7\u5e93\7\u5ef4\7\u5f55\7\u5fb6\7\u6017\7\u6078"+ + "\7\u60d9\7\u613a\7\u619b\7\u61fc\7\u625d\7\u62be\7\u631f\7\u6380"+ + "\7\u63e1\7\u6442\7\u64a3\7\u6504\7\u6565\7\u65c6\7\u6627\7\u6688"+ + "\7\u66e9\7\u674a\7\u67ab\7\u680c\7\u686d\7\u68ce\7\u692f\7\u6990"+ + "\7\u69f1\7\u6a52\7\u6ab3\7\u6b14\7\u6b75\7\u6bd6\7\u6c37\7\u6c98"+ + "\7\u6cf9\7\u6d5a\7\u6dbb\7\u6e1c\7\u6e7d\7\u6ede\7\u6f3f\7\u6fa0"+ + "\7\u7001\7\u7062\7\u70c3\7\u7124\7\u7185\7\u71e6\7\u7247\7\u72a8"+ + "\7\u7309\7\u736a\7\u73cb\7\u742c\7\u748d\7\u74ee\7\u754f\7\u75b0"+ + "\7\u7611\7\u7672\7\u76d3\7\u7734\7\u7795\7\u77f6\7\u7857\7\u78b8"+ + "\7\u7919\7\u797a\7\u79db\7\u7a3c\7\u7a9d\7\u7afe\7\u7b5f\7\u7bc0"+ + "\7\u7c21\7\u7c82\7\u7ce3\7\u7d44\7\u7da5\7\u7e06\7\u7e67\7\u7ec8"+ + "\7\u7f29\7\u7f8a\7\u7feb\7\u804c\7\u80ad\7\u810e\7\u816f\7\u81d0"+ + "\7\u8231\7\u8292\7\u82f3\7\u8354\7\u83b5\7\u8416\7\u8477\7\u84d8"+ + "\7\u8539\7\u859a\7\u85fb\7\u865c\7\u86bd\7\u871e\7\u877f\7\u87e0"+ + "\7\u8841\7\u88a2\7\u8903\7\u8964\7\u89c5\7\u8a26\2\u0c07\7\u8a87"+ + "\7\u8ae8\7\u8b49\7\u8baa\7\u8c0b\7\u8c6c\7\u8ccd\7\u8d2e\7\u8d8f"+ + "\7\u8df0\7\u8e51\7\u8eb2\7\u8f13\7\u8f74\7\u8fd5\7\u9036\7\u9097"+ + "\7\u90f8\7\u9159\7\u91ba\7\u921b\7\u927c\7\u92dd\7\u933e\7\u939f"+ + "\7\u9400\7\u9461\7\u94c2\7\u9523\7\u9584\7\u95e5\7\u9646\7\u96a7"+ + "\7\u9708\4\u1ee0\7\u9769\7\u97ca\7\u982b\7\u988c\7\u98ed\7\u994e"+ + "\7\u99af\7\u9a10\7\u9a71\7\u9ad2\7\u9b33\7\u9b94\7\u9bf5\7\u9c56"+ + "\7\u9cb7\7\u9d18\7\u9d79\7\u9dda\7\u9e3b\7\u9e9c\7\u9efd\7\u9f5e"+ + "\7\u9fbf\7\ua020\7\ua081\7\ua0e2\2\u749b\7\ua143\7\ua1a4\7\ua205"+ + "\7\ua266\7\ua2c7\7\ua328\7\ua389\7\ua3ea\7\ua44b\7\ua4ac\7\ua50d"+ + "\7\ua56e\7\ua5cf\7\ua630\7\ua691\7\ua6f2\7\ua753\7\ua7b4\7\ua815"+ + "\7\ua876\7\ua8d7\7\ua938\7\ua999\7\ua9fa\7\uaa5b\7\uaabc\7\uab1d"+ + "\7\uab7e\7\uabdf\7\uac40\7\uaca1\7\uad02\7\uad63\7\uadc4\7\uae25"+ + "\7\uae86\7\uaee7\7\uaf48\7\uafa9\7\ub00a\7\ub06b\7\ub0cc\7\ub12d"+ + "\7\ub18e\7\ub1ef\7\ub250\7\ub2b1\7\ub312\7\ub373\7\ub3d4\7\ub435"+ + "\7\ub496\7\ub4f7\7\ub558\7\ub5b9\7\ub61a\7\ub67b\7\ub6dc\7\ub73d"+ + "\7\ub79e\7\ub7ff\7\ub860\7\ub8c1\7\ub922\7\ub983\7\ub9e4\7\uba45"+ + "\7\ubaa6\7\ubb07\7\ubb68\7\ubbc9\7\ubc2a\7\ubc8b\7\ubcec\7\ubd4d"+ + "\7\ubdae\7\ube0f\7\ube70\7\ubed1\7\ubf32\7\ubf93\7\ubff4\7\uc055"+ + "\7\uc0b6\7\uc117\7\uc178\7\uc1d9\7\uc23a\7\uc29b\7\uc2fc\7\uc35d"+ + "\7\uc3be\7\uc41f\7\uc480\1\u46ff\7\uc4e1\7\uc542\7\uc5a3\7\uc604"+ + "\7\uc665\7\uc6c6\7\uc727\7\uc788\7\uc7e9\7\uc84a\7\uc8ab\7\uc90c"+ + "\7\uc96d\7\uc9ce\7\uca2f\7\uca90\7\ucaf1\7\ucb52\7\ucbb3\7\ucc14"+ + "\7\ucc75\7\uccd6\6\u32dc\7\ucd37\7\ucd98\7\ucdf9\7\uce5a\7\ucebb"+ + "\7\ucf1c\7\ucf7d\7\ucfde\7\ud03f\7\ud0a0\7\ud101\7\ud162\7\ud1c3"+ + "\7\ud224\7\ud285\7\ud2e6\7\ud347\7\ud3a8\7\ud409\7\ud46a\7\ud4cb"+ + "\7\ud52c\7\ud58d\7\ud5ee\7\ud64f\7\ud6b0\7\ud711\7\ud772\7\ud7d3"+ + "\7\ud834\7\ud895\7\ud8f6\7\ud957\7\ud9b8\7\uda19\7\uda7a\7\udadb"+ + "\7\udb3c\7\udb9d\7\udbfe\7\udc5f\7\udcc0\7\udd21\7\udd82\7\udde3"+ + "\7\ude44\7\udea5\7\udf06\7\udf67\7\udfc8\7\ue029\7\ue08a\7\ue0eb"+ + "\7\ue14c\7\ue1ad\7\ue20e\7\ue26f\7\ue2d0\7\ue331\7\ue392\7\ue3f3"+ + "\7\ue454\7\ue4b5\7\ue516\7\ue577\7\ue5d8\7\ue639\7\ue69a\7\ue6fb"+ + "\7\ue75c\7\ue7bd\7\ue81e\7\ue87f\7\ue8e0\7\ue941\7\ue9a2\7\uea03"+ + "\7\uea64\7\ueac5\7\ueb26\7\ueb87\7\uebe8\7\uec49\7\uecaa\7\ued0b"+ + "\7\ued6c\7\uedcd\7\uee2e\7\uee8f\7\ueef0\7\uef51\7\uefb2\7\uf013"+ + "\7\uf074\7\uf0d5\7\uf136\7\uf197\7\uf1f8\7\uf259\7\uf2ba\7\uf31b"+ + "\7\uf37c\7\uf3dd\7\uf43e\7\uf49f\7\uf500\7\uf561\7\uf5c2\7\uf623"+ + "\7\uf684\7\uf6e5\7\uf746\7\uf7a7\7\uf808\7\uf869\7\uf8ca\7\uf92b"+ + "\7\uf98c\7\uf9ed\7\ufa4e\7\ufaaf\7\ufb10\7\ufb71\7\ufbd2\7\ufc33"+ + "\7\ufc94\7\ufcf5\7\ufd56\7\ufdb7\7\ufe18\7\ufe79\7\ufeda\7\uff3b"+ + "\7\uff9c\7\ufffd\10\136\10\277\10\u0120\10\u0181\10\u01e2\10\u0243"+ + "\10\u02a4\10\u0305\10\u0366\10\u03c7\10\u0428\10\u0489\10\u04ea\10\u054b"+ + "\10\u05ac\10\u060d\10\u066e\10\u06cf\10\u0730\10\u0791\10\u07f2\10\u0853"+ + "\10\u08b4\10\u0915\10\u0976\10\u09d7\10\u0a38\10\u0a99\10\u0afa\10\u0b5b"+ + "\10\u0bbc\10\u0c1d\10\u0c7e\10\u0cdf\10\u0d40\10\u0da1\10\u0e02\10\u0e63"+ + "\10\u0ec4\10\u0f25\10\u0f86\10\u0fe7\10\u1048\10\u10a9\10\u110a\10\u116b"+ + "\10\u11cc\10\u122d\10\u128e\10\u12ef\10\u1350\10\u13b1\10\u1412\10\u1473"+ + "\10\u14d4\10\u1535\10\u1596\10\u15f7\10\u1658\10\u16b9\10\u171a\10\u177b"+ + "\10\u17dc\10\u183d\10\u189e\10\u18ff\10\u1960\10\u19c1\10\u1a22\10\u1a83"+ + "\10\u1ae4\10\u1b45\10\u1ba6\10\u1c07\10\u1c68\10\u1cc9\10\u1d2a\10\u1d8b"+ + "\10\u1dec\10\u1e4d\10\u1eae\10\u1f0f\10\u1f70\10\u1fd1\10\u2032\10\u2093"+ + "\10\u20f4\10\u2155\10\u21b6\10\u2217\10\u2278\10\u22d9\10\u233a\10\u239b"+ + "\10\u23fc\10\u245d\10\u24be\10\u251f\2\u96b5\10\u2580\10\u25e1\10\u2642"+ + "\10\u26a3\10\u2704\10\u2765\10\u27c6\10\u2827\10\u2888\10\u28e9\10\u294a"+ + "\10\u29ab\10\u2a0c\10\u2a6d\10\u2ace\10\u2b2f\10\u2b90\10\u2bf1\10\u2c52"+ + "\10\u2cb3\10\u2d14\10\u2d75\10\u2dd6\10\u2e37\10\u2e98\10\u2ef9\10\u2f5a"+ + "\10\u2fbb\10\u301c\10\u307d\10\u30de\10\u313f\10\u31a0\10\u3201\10\u3262"+ + "\10\u32c3\10\u3324\10\u3385\10\u33e6\10\u3447\10\u34a8\10\u3509\10\u356a"+ + "\10\u35cb\10\u362c\10\u368d\10\u36ee\10\u374f\10\u37b0\10\u3811\10\u3872"+ + "\10\u38d3\10\u3934\10\u3995\10\u39f6\10\u3a57\10\u3ab8\10\u3b19\10\u3b7a"+ + "\10\u3bdb\10\u3c3c\10\u3c9d\10\u3cfe\10\u3d5f\10\u3dc0\10\u3e21\10\u3e82"+ + "\10\u3ee3\10\u3f44\10\u3fa5\10\u4006\10\u4067\10\u40c8\10\u4129\10\u418a"+ + "\10\u41eb\10\u424c\10\u42ad\10\u430e\10\u436f\10\u43d0\10\u4431\10\u4492"+ + "\10\u44f3\10\u4554\10\u45b5\10\u4616\10\u4677\10\u46d8\10\u4739\10\u479a"+ + "\10\u47fb\10\u485c\10\u48bd\10\u491e\10\u497f\10\u49e0\10\u4a41\10\u4aa2"+ + "\10\u4b03\10\u4b64\10\u4bc5\10\u4c26\10\u4c87\10\u4ce8\10\u4d49\5\u774d"+ + "\10\u4daa\10\u4e0b\10\u4e6c\10\u4ecd\10\u4f2e\10\u4f8f\10\u4ff0\10\u5051"+ + "\10\u50b2\10\u5113\10\u5174\3\u5a39\10\u51d5\10\u5236\10\u5297\10\u52f8"+ + "\10\u5359\10\u53ba\10\u541b\10\u547c\10\u54dd\10\u553e\10\u559f\10\u5600"+ + "\10\u5661\10\u56c2\10\u5723\10\u5784\10\u57e5\10\u5846\10\u58a7\10\u5908"+ + "\10\u5969\10\u59ca\10\u5a2b\10\u5a8c\10\u5aed\10\u5b4e\10\u5baf\10\u5c10"+ + "\10\u5c71\10\u5cd2\10\u5d33\10\u5d94\10\u5df5\10\u5e56\10\u5eb7\10\u5f18"+ + "\10\u5f79\10\u5fda\10\u603b\10\u609c\10\u60fd\10\u615e\10\u61bf\10\u6220"+ + "\10\u6281\10\u62e2\10\u6343\10\u63a4\10\u6405\10\u6466\10\u64c7\10\u6528"+ + "\10\u6589\10\u65ea\10\u664b\10\u66ac\10\u670d\10\u676e\10\u67cf\10\u6830"+ + "\10\u6891\10\u68f2\10\u6953\10\u69b4\10\u6a15\10\u6a76\10\u6ad7\10\u6b38"+ + "\10\u6b99\10\u6bfa\10\u6c5b\10\u6cbc\10\u6d1d\10\u6d7e\10\u6ddf\10\u6e40"+ + "\10\u6ea1\10\u6f02\10\u6f63\10\u6fc4\10\u7025\10\u7086\10\u70e7\10\u7148"+ + "\10\u71a9\10\u720a\10\u726b\10\u72cc\10\u732d\10\u738e\10\u73ef\10\u7450"+ + "\4\ua502\10\u74b1\10\u7512\10\u7573\10\u75d4\10\u7635\10\u7696\10\u76f7"+ + "\10\u7758\10\u77b9\10\u781a\10\u787b\10\u78dc\10\u793d\10\u799e\10\u79ff"+ + "\10\u7a60\10\u7ac1\10\u7b22\10\u7b83\10\u7be4\10\u7c45\10\u7ca6\4\u30af"+ + "\10\u7d07\10\u7d68\10\u7dc9\10\u7e2a\10\u7e8b\10\u7eec\10\u7f4d\10\u7fae"+ + "\10\u800f\10\u8070\10\u80d1\10\u8132\10\u8193\10\u81f4\10\u8255\10\u82b6"+ + "\10\u8317\10\u8378\10\u83d9\10\u843a\10\u849b\10\u84fc\10\u855d\10\u85be"+ + "\10\u861f\10\u8680\10\u86e1\10\u8742\10\u87a3\10\u8804\10\u8865\10\u88c6"+ + "\10\u8927\10\u8988\10\u89e9\10\u8a4a\10\u8aab\10\u8b0c\10\u8b6d\10\u8bce"+ + "\10\u8c2f\10\u8c90\10\u8cf1\10\u8d52\10\u8db3\10\u8e14\10\u8e75\10\u8ed6"+ + "\10\u8f37\10\u8f98\10\u8ff9\10\u905a\10\u90bb\10\u911c\10\u917d\10\u91de"+ + "\10\u923f\10\u92a0\10\u9301\10\u9362\10\u93c3\3\u7dd7\10\u9424\10\u9485"+ + "\10\u94e6\10\u9547\10\u95a8\10\u9609\10\u966a\10\u96cb\10\u972c\10\u978d"+ + "\10\u97ee\10\u984f\10\u98b0\10\u9911\10\u9972\10\u99d3\10\u9a34\10\u9a95"+ + "\10\u9af6\10\u9b57\10\u9bb8\10\u9c19\10\u9c7a\10\u9cdb\10\u9d3c\10\u9d9d"+ + "\10\u9dfe\10\u9e5f\10\u9ec0\10\u9f21\10\u9f82\10\u9fe3\10\ua044\10\ua0a5"+ + "\10\ua106\10\ua167\10\ua1c8\10\ua229\10\ua28a\10\ua2eb\10\ua34c\10\ua3ad"+ + "\10\ua40e\10\ua46f\10\ua4d0\10\ua531\10\ua592\10\ua5f3\10\ua654\10\ua6b5"+ + "\10\ua716\10\ua777\10\ua7d8\10\ua839\10\ua89a\10\ua8fb\10\ua95c\10\ua9bd"+ + "\10\uaa1e\10\uaa7f\10\uaae0\10\uab41\10\uaba2\10\uac03\10\uac64\10\uacc5"+ + "\10\uad26\10\uad87\10\uade8\10\uae49\10\uaeaa\10\uaf0b\10\uaf6c\10\uafcd"+ + "\10\ub02e\10\ub08f\10\ub0f0\10\ub151\10\ub1b2\10\ub213\10\ub274\10\ub2d5"+ + "\10\ub336\10\ub397\10\ub3f8\10\ub459\10\ub4ba\10\ub51b\10\ub57c\10\ub5dd"+ + "\10\ub63e\10\ub69f\10\ub700\10\ub761\10\ub7c2\10\ub823\10\ub884\10\ub8e5"+ + "\10\ub946\10\ub9a7\10\uba08\10\uba69\10\ubaca\10\ubb2b\10\ubb8c\10\ubbed"+ + "\10\ubc4e\10\ubcaf\10\ubd10\10\ubd71\10\ubdd2\10\ube33\10\ube94\0\u0c81"+ + "\10\ubef5\10\ubf56\10\ubfb7\10\uc018\10\uc079\10\uc0da\10\uc13b\10\uc19c"+ + "\10\uc1fd\10\uc25e\10\uc2bf\10\uc320\10\uc381\10\uc3e2\10\uc443\10\uc4a4"+ + "\10\uc505\10\uc566\10\uc5c7\10\uc628\10\uc689\10\uc6ea\10\uc74b\10\uc7ac"+ + "\10\uc80d\10\uc86e\10\uc8cf\10\uc930\10\uc991\7\u1e8a\10\uc9f2\10\uca53"+ + "\10\ucab4\10\ucb15\10\ucb76\10\ucbd7\10\ucc38\10\ucc99\10\uccfa\10\ucd5b"+ + "\10\ucdbc\10\uce1d\10\uce7e\10\ucedf\10\ucf40\10\ucfa1\10\ud002\10\ud063"+ + "\10\ud0c4\10\ud125\10\ud186\10\ud1e7\10\ud248\10\ud2a9\10\ud30a\10\ud36b"+ + "\10\ud3cc\10\ud42d\10\ud48e\10\ud4ef\10\ud550\10\ud5b1\10\ud612\10\ud673"+ + "\10\ud6d4\10\ud735\10\ud796\10\ud7f7\10\ud858\10\ud8b9\10\ud91a\10\ud97b"+ + "\10\ud9dc\10\uda3d\10\uda9e\10\udaff\10\udb60\10\udbc1\10\udc22\10\udc83"+ + "\10\udce4\10\udd45\10\udda6\10\ude07\10\ude68\10\udec9\10\udf2a\10\udf8b"+ + "\10\udfec\10\ue04d\10\ue0ae\10\ue10f\10\ue170\10\ue1d1\10\ue232\10\ue293"+ + "\10\ue2f4\10\ue355\10\ue3b6\10\ue417\10\ue478\10\ue4d9\10\ue53a\10\ue59b"+ + "\10\ue5fc\10\ue65d\10\ue6be\10\ue71f\10\ue780\10\ue7e1\10\ue842\10\ue8a3"+ + "\10\ue904\10\ue965\10\ue9c6\10\uea27\10\uea88\10\ueae9\10\ueb4a\10\uebab"+ + "\10\uec0c\10\uec6d\10\uecce\10\ued2f\10\ued90\10\uedf1\10\uee52\10\ueeb3"+ + "\10\uef14\10\uef75\10\uefd6\10\uf037\10\uf098\10\uf0f9\10\uf15a\10\uf1bb"+ + "\10\uf21c\10\uf27d\10\uf2de\10\uf33f\10\uf3a0\10\uf401\10\uf462\10\uf4c3"+ + "\10\uf524\10\uf585\10\uf5e6\10\uf647\10\uf6a8\10\uf709\10\uf76a\10\uf7cb"+ + "\10\uf82c\10\uf88d\10\uf8ee\10\uf94f\10\uf9b0\10\ufa11\10\ufa72\10\ufad3"+ + "\10\ufb34\10\ufb95\10\ufbf6\10\ufc57\10\ufcb8\10\ufd19\10\ufd7a\10\ufddb"+ + "\10\ufe3c\10\ufe9d\10\ufefe\10\uff5f\10\uffc0\11\41\11\202\11\343"+ + "\11\u0144\11\u01a5\11\u0206\11\u0267\11\u02c8\11\u0329\11\u038a\11\u03eb"+ + "\11\u044c\11\u04ad\11\u050e\11\u056f\6\ub89d\11\u05d0\11\u0631\11\u0692"+ + "\11\u06f3\11\u0754\11\u07b5\11\u0816\11\u0877\11\u08d8\11\u0939\11\u099a"+ + "\11\u09fb\11\u0a5c\11\u0abd\11\u0b1e\11\u0b7f\11\u0be0\11\u0c41\11\u0ca2"+ + "\11\u0d03\11\u0d64\11\u0dc5\11\u0e26\11\u0e87\11\u0ee8\11\u0f49\11\u0faa"+ + "\11\u100b\11\u106c\11\u10cd\11\u112e\11\u118f\11\u11f0\11\u1251\11\u12b2"+ + "\11\u1313\11\u1374\11\u13d5\11\u1436\11\u1497\11\u14f8\11\u1559\11\u15ba"+ + "\11\u161b\11\u167c\11\u16dd\11\u173e\11\u179f\11\u1800\11\u1861\11\u18c2"+ + "\11\u1923\11\u1984\11\u19e5\11\u1a46\11\u1aa7\11\u1b08\11\u1b69\11\u1bca"+ + "\11\u1c2b\11\u1c8c\11\u1ced\11\u1d4e\11\u1daf\11\u1e10\11\u1e71\11\u1ed2"+ + "\11\u1f33\11\u1f94\11\u1ff5\11\u2056\11\u20b7\11\u2118\11\u2179\11\u21da"+ + "\11\u223b\11\u229c\11\u22fd\11\u235e\11\u23bf\11\u2420\11\u2481\11\u24e2"+ + "\11\u2543\11\u25a4\11\u2605\11\u2666\11\u26c7\11\u2728\11\u2789\11\u27ea"+ + "\11\u284b\11\u28ac\11\u290d\11\u296e\11\u29cf\11\u2a30\11\u2a91\11\u2af2"+ + "\11\u2b53\11\u2bb4\11\u2c15\11\u2c76\11\u2cd7\11\u2d38\11\u2d99\11\u2dfa"+ + "\11\u2e5b\11\u2ebc\11\u2f1d\11\u2f7e\11\u2fdf\11\u3040\11\u30a1\11\u3102"+ + "\11\u3163\11\u31c4\11\u3225\11\u3286\11\u32e7\11\u3348\11\u33a9\11\u340a"+ + "\11\u346b\11\u34cc\11\u352d\11\u358e\11\u35ef\11\u3650\11\u36b1\11\u3712"+ + "\11\u3773\11\u37d4\11\u3835\11\u3896\11\u38f7\11\u3958\11\u39b9\11\u3a1a"+ + "\11\u3a7b\11\u3adc\11\u3b3d\11\u3b9e\11\u3bff\11\u3c60\11\u3cc1\11\u3d22"+ + "\11\u3d83\11\u3de4\11\u3e45\11\u3ea6\11\u3f07\11\u3f68\11\u3fc9\11\u402a"+ + "\11\u408b\11\u40ec\11\u414d\11\u41ae\11\u420f\11\u4270\11\u42d1\11\u4332"+ + "\11\u4393\11\u43f4\11\u4455\11\u44b6\11\u4517\11\u4578\11\u45d9\11\u463a"+ + "\11\u469b\11\u46fc\11\u475d\11\u47be\11\u481f\11\u4880\11\u48e1\11\u4942"+ + "\11\u49a3\11\u4a04\11\u4a65\11\u4ac6\11\u4b27\11\u4b88\11\u4be9\11\u4c4a"+ + "\11\u4cab\11\u4d0c\11\u4d6d\11\u4dce\11\u4e2f\11\u4e90\11\u4ef1\11\u4f52"+ + "\11\u4fb3\11\u5014\11\u5075\11\u50d6\11\u5137\11\u5198\11\u51f9\11\u525a"+ + "\11\u52bb\11\u531c\11\u537d\11\u53de\11\u543f\11\u54a0\11\u5501\11\u5562"+ + "\11\u55c3\11\u5624\11\u5685\11\u56e6\11\u5747\11\u57a8\11\u5809\11\u586a"+ + "\11\u58cb\11\u592c\11\u598d\11\u59ee\11\u5a4f\11\u5ab0\11\u5b11\11\u5b72"+ + "\7\u4d86\11\u5bd3\11\u5c34\11\u5c95\11\u5cf6\11\u5d57\11\u5db8\11\u5e19"+ + "\11\u5e7a\11\u5edb\11\u5f3c\11\u5f9d\11\u5ffe\11\u605f\11\u60c0\11\u6121"+ + "\11\u6182\11\u61e3\11\u6244\11\u62a5\11\u6306\11\u6367\11\u63c8\11\u6429"+ + "\11\u648a\11\u64eb\11\u654c\11\u65ad\11\u660e\11\u666f\11\u66d0\11\u6731"+ + "\11\u6792\11\u67f3\11\u6854\11\u68b5\11\u6916\11\u6977\11\u69d8\11\u6a39"+ + "\11\u6a9a\11\u6afb\11\u6b5c\11\u6bbd\11\u6c1e\11\u6c7f\11\u6ce0\11\u6d41"+ + "\11\u6da2\11\u6e03\11\u6e64\11\u6ec5\11\u6f26\11\u6f87\11\u6fe8\11\u7049"+ + "\11\u70aa\11\u710b\11\u716c\11\u71cd\11\u722e\11\u728f\11\u72f0\11\u7351"+ + "\11\u73b2\11\u7413\11\u7474\11\u74d5\11\u7536\11\u7597\11\u75f8\11\u7659"+ + "\2\u453e\11\u76ba\11\u771b\11\u777c\11\u77dd\11\u783e\11\u789f\11\u7900"+ + "\11\u7961\11\u79c2\11\u7a23\11\u7a84\11\u7ae5\11\u7b46\11\u7ba7\11\u7c08"+ + "\11\u7c69\11\u7cca\11\u7d2b\11\u7d8c\11\u7ded\11\u7e4e\4\u3110\11\u7eaf"+ + "\11\u7f10\11\u7f71\11\u7fd2\11\u8033\11\u8094\11\u80f5\11\u8156\11\u81b7"+ + "\11\u8218\11\u8279\11\u82da\11\u833b\11\u839c\11\u83fd\11\u845e\11\u84bf"+ + "\11\u8520\11\u8581\11\u85e2\11\u8643\11\u86a4\11\u8705\11\u8766\11\u87c7"+ + "\11\u8828\11\u8889\11\u88ea\11\u894b\11\u89ac\11\u8a0d\11\u8a6e\11\u8acf"+ + "\11\u8b30\11\u8b91\11\u8bf2\11\u8c53\11\u8cb4\11\u8d15\11\u8d76\11\u8dd7"+ + "\11\u8e38\11\u8e99\11\u8efa\11\u8f5b\11\u8fbc\11\u901d\11\u907e\11\u90df"+ + "\11\u9140\11\u91a1\11\u9202\11\u9263\11\u92c4\11\u9325\11\u9386\11\u93e7"+ + "\11\u9448\11\u94a9\11\u950a\11\u956b\11\u95cc\11\u962d\11\u968e\11\u96ef"+ + "\11\u9750\11\u97b1\11\u9812\11\u9873\11\u98d4\11\u9935\11\u9996\11\u99f7"+ + "\11\u9a58\11\u9ab9\11\u9b1a\11\u9b7b\11\u9bdc\11\u9c3d\11\u9c9e\11\u9cff"+ + "\11\u9d60\11\u9dc1\11\u9e22\11\u9e83\11\u9ee4\11\u9f45\11\u9fa6\11\ua007"+ + "\11\ua068\11\ua0c9\11\ua12a\11\ua18b\11\ua1ec\11\ua24d\11\ua2ae\11\ua30f"+ + "\11\ua370\11\ua3d1\11\ua432\11\ua493\11\ua4f4\11\ua555\11\ua5b6\11\ua617"+ + "\11\ua678\11\ua6d9\11\ua73a\11\ua79b\11\ua7fc\11\ua85d\11\ua8be\11\ua91f"+ + "\11\ua980\11\ua9e1\11\uaa42\11\uaaa3\11\uab04\11\uab65\11\uabc6\11\uac27"+ + "\11\uac88\11\uace9\11\uad4a\11\uadab\11\uae0c\11\uae6d\11\uaece\11\uaf2f"+ + "\11\uaf90\11\uaff1\11\ub052\11\ub0b3\11\ub114\11\ub175\11\ub1d6\11\ub237"+ + "\11\ub298\11\ub2f9\11\ub35a\11\ub3bb\11\ub41c\11\ub47d\11\ub4de\11\ub53f"+ + "\11\ub5a0\11\ub601\11\ub662\11\ub6c3\11\ub724\11\ub785\11\ub7e6\11\ub847"+ + "\11\ub8a8\11\ub909\11\ub96a\11\ub9cb\11\uba2c\11\uba8d\11\ubaee\11\ubb4f"+ + "\11\ubbb0\11\ubc11\11\ubc72\11\ubcd3\11\ubd34\11\ubd95\11\ubdf6\11\ube57"+ + "\11\ubeb8\11\ubf19\11\ubf7a\11\ubfdb\11\uc03c\11\uc09d\11\uc0fe\11\uc15f"+ + "\11\uc1c0\11\uc221\11\uc282\11\uc2e3\11\uc344\11\uc3a5\11\uc406\11\uc467"+ + "\11\uc4c8\3\u991f\11\uc529\11\uc58a\11\uc5eb\11\uc64c\11\uc6ad\11\uc70e"+ + "\11\uc76f\11\uc7d0\11\uc831\11\uc892\11\uc8f3\11\uc954\11\uc9b5\11\uca16"+ + "\11\uca77\11\ucad8\11\ucb39\11\ucb9a\11\ucbfb\11\ucc5c\11\uccbd\11\ucd1e"+ + "\11\ucd7f\11\ucde0\11\uce41\11\ucea2\11\ucf03\11\ucf64\11\ucfc5\11\ud026"+ + "\11\ud087\11\ud0e8\11\ud149\11\ud1aa\11\ud20b\11\ud26c\11\ud2cd\11\ud32e"+ + "\11\ud38f\11\ud3f0\11\ud451\11\ud4b2\11\ud513\11\ud574\11\ud5d5\11\ud636"+ + "\11\ud697\11\ud6f8\11\ud759\11\ud7ba\11\ud81b\11\ud87c\11\ud8dd\11\ud93e"+ + "\11\ud99f\11\uda00\11\uda61\11\udac2\11\udb23\11\udb84\11\udbe5\11\udc46"+ + "\11\udca7\11\udd08\11\udd69\11\uddca\11\ude2b\11\ude8c\11\udeed\11\udf4e"+ + "\11\udfaf\11\ue010\11\ue071\11\ue0d2\11\ue133\11\ue194\11\ue1f5\11\ue256"+ + "\11\ue2b7\11\ue318\11\ue379\11\ue3da\11\ue43b\11\ue49c\11\ue4fd\11\ue55e"+ + "\11\ue5bf\11\ue620\11\ue681\11\ue6e2\11\ue743\11\ue7a4\11\ue805\11\ue866"+ + "\11\ue8c7\11\ue928\11\ue989\11\ue9ea\11\uea4b\11\ueaac\11\u4dce\11\ueb0d"+ + "\11\ueb6e\11\uebcf\11\uec30\11\uec91\11\uecf2\11\ued53\11\uedb4\11\uee15"+ + "\11\uee76\11\ueed7\11\uef38\11\uef99\11\ueffa\11\uf05b\11\uf0bc\11\uf11d"+ + "\11\uf17e\11\uf1df\11\uf240\11\uf2a1\11\uf302\11\uf363\11\uf3c4\11\uf425"+ + "\11\uf486\11\uf4e7\11\uf548\11\uf5a9\11\uf60a\11\uf66b\11\uf6cc\11\uf72d"+ + "\11\uf78e\11\uf7ef\11\uf850\11\uf8b1\11\uf912\11\uf973\11\uf9d4\11\ufa35"+ + "\11\ufa96\11\ufaf7\11\ufb58\11\ufbb9\11\ufc1a\11\ufc7b\11\ufcdc\11\ufd3d"+ + "\11\ufd9e\11\ufdff\11\ufe60\11\ufec1\11\uff22\11\uff83\11\uffe4\12\105"+ + "\12\246\12\u0107\12\u0168\12\u01c9\12\u022a\12\u028b\12\u02ec\12\u034d"+ + "\12\u03ae\12\u040f\12\u0470\12\u04d1\12\u0532\12\u0593\12\u05f4\12\u0655"+ + "\12\u06b6\12\u0717\12\u0778\12\u07d9\12\u083a\6\u82cf\12\u089b\12\u08fc"+ + "\12\u095d\12\u09be\12\u0a1f\12\u0a80\12\u0ae1\12\u0b42\12\u0ba3\12\u0c04"+ + "\12\u0c65\12\u0cc6\12\u0d27\12\u0d88\12\u0de9\12\u0e4a\12\u0eab\12\u0f0c"+ + "\12\u0f6d\12\u0fce\12\u102f\12\u1090\12\u10f1\12\u1152\12\u11b3\12\u1214"+ + "\12\u1275\12\u12d6\12\u1337\12\u1398\12\u13f9\12\u145a\12\u14bb\12\u151c"+ + "\12\u157d\12\u15de\12\u163f\12\u16a0\12\u1701\12\u1762\12\u17c3\12\u1824"+ + "\12\u1885\12\u18e6\12\u1947\12\u19a8\12\u1a09\12\u1a6a\12\u1acb\12\u1b2c"+ + "\12\u1b8d\12\u1bee\12\u1c4f\12\u1cb0\12\u1d11\12\u1d72\12\u1dd3\12\u1e34"+ + "\12\u1e95\12\u1ef6\12\u1f57\12\u1fb8\12\u2019\12\u207a\12\u20db\12\u213c"+ + "\12\u219d\12\u21fe\12\u225f\12\u22c0\12\u2321\12\u2382\12\u23e3\12\u2444"+ + "\12\u24a5\12\u2506\12\u2567\12\u25c8\12\u2629\12\u268a\12\u26eb\12\u274c"+ + "\12\u27ad\12\u280e\12\u286f\12\u28d0\12\u2931\12\u2992\12\u29f3\12\u2a54"+ + "\12\u2ab5\12\u2b16\12\u2b77\12\u2bd8\12\u2c39\12\u2c9a\12\u2cfb\12\u2d5c"+ + "\12\u2dbd\12\u2e1e\12\u2e7f\12\u2ee0\12\u2f41\12\u2fa2\12\u3003\12\u3064"+ + "\12\u30c5\12\u3126\12\u3187\12\u31e8\12\u3249\12\u32aa\12\u330b\12\u336c"+ + "\12\u33cd\12\u342e\12\u348f\12\u34f0\12\u3551\12\u35b2\12\u3613\12\u3674"+ + "\12\u36d5\12\u3736\12\u3797\12\u37f8\12\u3859\12\u38ba\12\u391b\12\u397c"+ + "\12\u39dd\12\u3a3e\12\u3a9f\12\u3b00\12\u3b61\12\u3bc2\12\u3c23\12\u3c84"+ + "\12\u3ce5\12\u3d46\12\u3da7\12\u3e08\12\u3e69\12\u3eca\12\u3f2b\12\u3f8c"+ + "\12\u3fed\12\u404e\12\u40af\12\u4110\1\u07b8\12\u4171\12\u41d2\12\u4233"+ + "\12\u4294\12\u42f5\12\u4356\12\u43b7\12\u4418\12\u4479\12\u44da\12\u453b"+ + "\12\u459c\12\u45fd\12\u465e\12\u46bf\12\u4720\12\u4781\12\u47e2\12\u4843"+ + "\12\u48a4\12\u4905\12\u4966\12\u49c7\12\u4a28\12\u4a89\12\u4aea\12\u4b4b"+ + "\12\u4bac\12\u4c0d\12\u4c6e\12\u4ccf\12\u4d30\12\u4d91\12\u4df2\12\u4e53"+ + "\12\u4eb4\12\u4f15\12\u4f76\12\u4fd7\12\u5038\12\u5099\12\u50fa\12\u515b"+ + "\12\u51bc\12\u521d\12\u527e\12\u52df\12\u5340\12\u53a1\12\u5402\12\u5463"+ + "\12\u54c4\12\u5525\12\u5586\12\u55e7\12\u5648\12\u56a9\12\u570a\12\u576b"+ + "\12\u57cc\5\u6ef7\12\u582d\12\u588e\12\u58ef\12\u5950\12\u59b1\12\u5a12"+ + "\12\u5a73\12\u5ad4\12\u5b35\12\u5b96\12\u5bf7\12\u5c58\12\u5cb9\12\u5d1a"+ + "\12\u5d7b\12\u5ddc\12\u5e3d\12\u5e9e\12\u5eff\12\u5f60\12\u5fc1\12\u6022"+ + "\12\u6083\12\u60e4\12\u6145\12\u61a6\12\u6207\12\u6268\12\u62c9\12\u632a"+ + "\12\u638b\12\u63ec\12\u644d\12\u64ae\12\u650f\12\u6570\12\u65d1\12\u6632"+ + "\12\u6693\12\u66f4\12\u6755\12\u67b6\12\u6817\12\u6878\12\u68d9\12\u693a"+ + "\12\u699b\12\u69fc\12\u6a5d\12\u6abe\12\u6b1f\12\u6b80\12\u6be1\12\u6c42"+ + "\10\u6f63\12\u6ca3\12\u6d04\12\u6d65\12\u6dc6\12\u6e27\12\u6e88\12\u6ee9"+ + "\12\u6f4a\12\u6fab\12\u700c\12\u706d\12\u70ce\12\u712f\12\u7190\12\u71f1"+ + "\12\u7252\12\u72b3\12\u7314\12\u7375\12\u73d6\12\u7437\12\u7498\12\u74f9"+ + "\12\u755a\12\u75bb\12\u761c\12\u767d\12\u76de\12\u773f\12\u77a0\12\u7801"+ + "\12\u7862\12\u78c3\12\u7924\12\u7985\12\u79e6\12\u7a47\12\u7aa8\12\u7b09"+ + "\12\u7b6a\12\u7bcb\12\u7c2c\12\u7c8d\12\u7cee\12\u7d4f\12\u7db0\12\u7e11"+ + "\12\u7e72\12\u7ed3\12\u7f34\12\u7f95\12\u7ff6\12\u8057\12\u80b8\12\u8119"+ + "\12\u817a\12\u81db\12\u823c\12\u829d\12\u82fe\12\u835f\12\u83c0\12\u8421"+ + "\12\u8482\12\u84e3\12\u8544\12\u85a5\12\u8606\12\u8667\12\u86c8\12\u8729"+ + "\12\u878a\12\u87eb\12\u884c\12\u88ad\12\u890e\12\u896f\12\u89d0\12\u8a31"+ + "\12\u8a92\12\u8af3\3\u45c3\12\u8b54\12\u8bb5\12\u8c16\12\u8c77\12\u8cd8"+ + "\12\u8d39\12\u8d9a\12\u8dfb\12\u8e5c\12\u8ebd\12\u8f1e\12\u8f7f\12\u8fe0"+ + "\12\u9041\12\u90a2\12\u9103\12\u9164\12\u91c5\12\u9226\12\u9287\12\u92e8"+ + "\10\ucf40\12\u9349\12\u93aa\12\u940b\12\u946c\12\u94cd\12\u952e\12\u958f"+ + "\12\u95f0\12\u9651\12\u96b2\12\u9713\12\u9774\12\u97d5\12\u9836\12\u9897"+ + "\12\u98f8\12\u9959\12\u99ba\12\u9a1b\12\u9a7c\12\u9add\12\u9b3e\12\u9b9f"+ + "\12\u9c00\12\u9c61\12\u9cc2\12\u9d23\12\u9d84\12\u9de5\12\u9e46\12\u9ea7"+ + "\12\u9f08\12\u9f69\12\u9fca\12\ua02b\12\ua08c\12\ua0ed\12\ua14e\12\ua1af"+ + "\12\ua210\12\ua271\12\ua2d2\12\ua333\12\ua394\12\ua3f5\12\u47e2\12\ua456"+ + "\12\ua4b7\12\ua518\12\ua579\12\ua5da\12\ua63b\12\ua69c\12\ua6fd\12\ua75e"+ + "\12\ua7bf\12\ua820\12\ua881\12\ua8e2\12\ua943\12\ua9a4\12\uaa05\12\uaa66"+ + "\12\uaac7\12\uab28\12\uab89\12\uabea\12\uac4b\12\uacac\12\uad0d\12\uad6e"+ + "\12\uadcf\12\uae30\12\uae91\12\uaef2\12\uaf53\12\uafb4\12\ub015\12\ub076"+ + "\12\ub0d7\12\ub138\12\ub199\12\ub1fa\12\ub25b\12\ub2bc\12\ub31d\12\ub37e"+ + "\12\ub3df\12\ub440\12\ub4a1\12\ub502\12\ub563\12\ub5c4\12\ub625\12\ub686"+ + "\7\u14b0\12\ub6e7\12\ub748\12\ub7a9\12\ub80a\12\ub86b\12\ub8cc\12\ub92d"+ + "\12\ub98e\12\ub9ef\12\uba50\12\ubab1\12\ubb12\12\ubb73\12\ubbd4\12\ubc35"+ + "\12\ubc96\12\ubcf7\12\ubd58\12\ubdb9\12\ube1a\12\ube7b\12\ubedc\12\ubf3d"+ + "\12\ubf9e\12\ubfff\12\uc060\12\uc0c1\12\uc122\12\uc183\12\uc1e4\12\uc245"+ + "\12\uc2a6\12\uc307\12\uc368\12\uc3c9\12\uc42a\12\uc48b\12\uc4ec\12\uc54d"+ + "\12\u213c\12\uc5ae\12\uc60f\12\uc670\12\uc6d1\12\uc732\12\uc793\12\uc7f4"+ + "\12\uc855\12\uc8b6\12\uc917\12\uc978\12\uc9d9\12\uca3a\12\uca9b\12\ucafc"+ + "\12\ucb5d\12\ucbbe\12\ucc1f\12\ucc80\12\ucce1\12\ucd42\12\ucda3\12\uce04"+ + "\12\uce65\12\ucec6\12\ucf27\12\ucf88\12\ucfe9\12\ud04a\12\ud0ab\12\ud10c"+ + "\12\ud16d\12\ud1ce\12\ud22f\12\ud290\12\ud2f1\12\ud352\12\ud3b3\12\ud414"+ + "\12\ud475\12\ud4d6\12\ud537\12\ud598\12\ud5f9\12\ud65a\12\ud6bb\12\ud71c"+ + "\12\ud77d\12\ud7de\12\ud83f\12\ud8a0\12\ud901\12\ud962\11\u2af2\12\ud9c3"+ + "\12\uda24\12\uda85\12\udae6\12\udb47\12\udba8\12\udc09\12\udc6a\12\udccb"+ + "\12\udd2c\12\udd8d\12\uddee\12\ude4f\12\udeb0\12\udf11\12\udf72\12\udfd3"+ + "\12\ue034\12\ue095\12\ue0f6\12\ue157\12\ue1b8\12\ue219\12\ue27a\12\ue2db"+ + "\12\ue33c\12\ue39d\12\ue3fe\12\ue45f\12\ue4c0\12\ue521\12\ue582\12\ue5e3"+ + "\12\ue644\12\ue6a5\12\ue706\12\ue767\12\ue7c8\12\ue829\12\ue88a\12\ue8eb"+ + "\12\ue94c\12\ue9ad\12\uea0e\12\uea6f\12\uead0\12\ueb31\12\ueb92\12\uebf3"+ + "\12\uec54\12\uecb5\12\ued16\12\ued77\12\uedd8\12\uee39\12\uee9a\12\ueefb"+ + "\12\uef5c\12\uefbd\12\uf01e\12\uf07f\12\uf0e0\12\uf141\12\uf1a2\12\uf203"+ + "\12\uf264\12\uf2c5\12\uf326\12\uf387\12\uf3e8\12\uf449\12\uf4aa\12\uf50b"+ + "\12\uf56c\12\uf5cd\12\uf62e\12\uf68f\12\uf6f0\12\uf751\12\uf7b2\12\uf813"+ + "\12\uf874\12\uf8d5\12\uf936\12\uf997\12\uf9f8\12\ufa59\12\ufaba\12\ufb1b"+ + "\12\ufb7c\12\ufbdd\12\ufc3e\12\ufc9f\12\ufd00\12\ufd61\12\ufdc2\12\ufe23"+ + "\12\ufe84\12\ufee5\12\uff46\12\uffa7\13\10\13\151\13\312\13\u012b"+ + "\13\u018c\13\u01ed\13\u024e\13\u02af\13\u0310\13\u0371\13\u03d2\13\u0433"+ + "\13\u0494\13\u04f5\13\u0556\13\u05b7\13\u0618\13\u0679\13\u06da\13\u073b"+ + "\13\u079c\13\u07fd\13\u085e\13\u08bf\13\u0920\13\u0981\13\u09e2\13\u0a43"+ + "\13\u0aa4\13\u0b05\13\u0b66\3\uf532\13\u0bc7\13\u0c28\13\u0c89\13\u0cea"+ + "\6\u752b\13\u0d4b\13\u0dac\13\u0e0d\13\u0e6e\13\u0ecf\13\u0f30\13\u0f91"+ + "\13\u0ff2\13\u1053\13\u10b4\13\u1115\13\u1176\13\u11d7\13\u1238\13\u1299"+ + "\13\u12fa\13\u135b\13\u13bc\13\u141d\13\u147e\13\u14df\13\u1540\13\u15a1"+ + "\13\u1602\13\u1663\13\u16c4\13\u1725\13\u1786\13\u17e7\13\u1848\13\u18a9"+ + "\13\u190a\13\u196b\13\u19cc\13\u1a2d\13\u1a8e\13\u1aef\13\u1b50\13\u1bb1"+ + "\13\u1c12\13\u1c73\13\u1cd4\13\u1d35\13\u1d96\13\u1df7\13\u1e58\13\u1eb9"+ + "\13\u1f1a\13\u1f7b\13\u1fdc\13\u203d\13\u209e\13\u20ff\13\u2160\13\u21c1"+ + "\13\u2222\13\u2283\13\u22e4\13\u2345\13\u23a6\13\u2407\13\u2468\13\u24c9"+ + "\13\u252a\13\u258b\13\u25ec\12\u4233\13\u264d\13\u26ae\13\u270f\13\u2770"+ + "\13\u27d1\13\u2832\13\u2893\13\u28f4\13\u2955\13\u29b6\13\u2a17\13\u2a78"+ + "\13\u2ad9\13\u2b3a\13\u2b9b\13\u2bfc\13\u2c5d\13\u2cbe\13\u2d1f\13\u2d80"+ + "\13\u2de1\13\u2e42\13\u2ea3\13\u2f04\13\u2f65\13\u2fc6\13\u3027\13\u3088"+ + "\13\u30e9\13\u314a\13\u31ab\13\u320c\13\u326d\13\u32ce\13\u332f\13\u3390"+ + "\13\u33f1\13\u3452\13\u34b3\13\u3514\13\u3575\13\u35d6\13\u3637\13\u3698"+ + "\13\u36f9\13\u375a\13\u37bb\13\u381c\13\u387d\13\u38de\13\u393f\13\u39a0"+ + "\13\u3a01\13\u3a62\13\u3ac3\13\u3b24\13\u3b85\13\u3be6\13\u3c47\13\u3ca8"+ + "\13\u3d09\13\u3d6a\13\u3dcb\13\u3e2c\13\u3e8d\13\u3eee\13\u3f4f\13\u3fb0"+ + "\13\u4011\13\u4072\13\u40d3\13\u4134\13\u4195\13\u41f6\13\u4257\13\u42b8"+ + "\13\u4319\13\u437a\13\u43db\13\u443c\13\u449d\13\u44fe\13\u455f\13\u45c0"+ + "\13\u4621\13\u4682\13\u46e3\13\u4744\13\u47a5\13\u4806\13\u4867\13\u48c8"+ + "\13\u4929\13\u498a\13\u49eb\13\u4a4c\13\u4aad\13\u4b0e\13\u4b6f\13\u4bd0"+ + "\13\u4c31\13\u4c92\13\u4cf3\13\u4d54\13\u4db5\13\u4e16\13\u4e77\13\u4ed8"+ + "\13\u4f39\13\u4f9a\13\u4ffb\13\u505c\13\u50bd\13\u511e\13\u517f\13\u51e0"+ + "\13\u5241\13\u52a2\13\u5303\13\u5364\13\u53c5\11\u0b7f\13\u5426\13\u5487"+ + "\13\u54e8\13\u5549\13\u55aa\13\u560b\13\u566c\13\u56cd\13\u572e\13\u578f"+ + "\13\u57f0\13\u5851\13\u58b2\13\u5913\13\u5974\13\u59d5\13\u5a36\13\u5a97"+ + "\13\u5af8\13\u5b59\13\u5bba\13\u5c1b\13\u5c7c\6\uf660\13\u5cdd\12\uaa05"+ + "\13\u5d3e\13\u5d9f\13\u5e00\13\u5e61\13\u5ec2\13\u5f23\13\u5f84\13\u5fe5"+ + "\13\u6046\13\u60a7\13\u6108\13\u6169\13\u61ca\13\u622b\13\u628c\13\u62ed"+ + "\13\u634e\13\u63af\13\u6410\13\u6471\13\u64d2\13\u6533\13\u6594\13\u65f5"+ + "\13\u6656\13\u66b7\13\u6718\13\u6779\13\u67da\13\u683b\13\u689c\13\u68fd"+ + "\13\u695e\13\u69bf\13\u6a20\13\u6a81\13\u6ae2\13\u6b43\13\u6ba4\13\u6c05"+ + "\13\u6c66\13\u6cc7\13\u6d28\13\u6d89\13\u6dea\13\u6e4b\13\u6eac\13\u6f0d"+ + "\13\u6f6e\13\u6fcf\13\u7030\13\u7091\13\u70f2\13\u7153\13\u71b4\13\u7215"+ + "\13\u7276\13\u72d7\13\u7338\13\u7399\13\u73fa\13\u745b\13\u74bc\13\u751d"+ + "\13\u757e\13\u75df\13\u7640\13\u76a1\13\u7702\13\u7763\13\u77c4\13\u7825"+ + "\13\u7886\13\u78e7\13\u7948\13\u79a9\13\u7a0a\13\u7a6b\13\u7acc\13\u7b2d"+ + "\13\u7b8e\13\u7bef\13\u7c50\13\u7cb1\13\u7d12\13\u7d73\13\u7dd4\13\u7e35"+ + "\13\u7e96\13\u7ef7\13\u7f58\13\u7fb9\13\u801a\13\u807b\13\u80dc\13\u813d"+ + "\13\u819e\13\u81ff\13\u8260\13\u82c1\13\u8322\13\u8383\13\u83e4\13\u8445"+ + "\13\u84a6\13\u8507\13\u8568\13\u85c9\13\u862a\13\u868b\13\u86ec\13\u874d"+ + "\13\u87ae\13\u880f\13\u8870\13\u88d1\13\u8932\13\u8993\13\u89f4\13\u8a55"+ + "\13\u8ab6\13\u8b17\13\u8b78\13\u8bd9\13\u8c3a\13\u8c9b\13\u8cfc\13\u8d5d"+ + "\13\u8dbe\5\u4a36\13\u8e1f\13\u8e80\13\u8ee1\13\u8f42\13\u8fa3\13\u9004"+ + "\13\u9065\13\u90c6\13\u9127\13\u9188\13\u91e9\13\u924a\13\u92ab\13\u930c"+ + "\13\u936d\13\u93ce\13\u942f\13\u9490\13\u94f1\13\u9552\13\u95b3\13\u9614"+ + "\13\u9675\13\u96d6\13\u9737\13\u9798\13\u97f9\13\u985a\13\u98bb\13\u991c"+ + "\13\u997d\13\u99de\13\u9a3f\13\u9aa0\13\u9b01\13\u9b62\13\u9bc3\13\u9c24"+ + "\13\u9c85\13\u9ce6\13\u9d47\13\u9da8\13\u9e09\13\u9e6a\13\u9ecb\13\u9f2c"+ + "\13\u9f8d\13\u9fee\13\ua04f\13\ua0b0\13\ua111\13\ua172\13\ua1d3\13\ua234"+ + "\13\ua295\13\ua2f6\13\ua357\13\ua3b8\13\ua419\13\ua47a\13\ua4db\13\ua53c"+ + "\13\ua59d\13\ua5fe\13\ua65f\13\ua6c0\13\ua721\13\ua782\13\ua7e3\13\ua844"+ + "\13\ua8a5\13\ua906\13\ua967\13\ua9c8\13\uaa29\13\uaa8a\13\uaaeb\13\uab4c"+ + "\13\uabad\13\uac0e\13\uac6f\13\uacd0\13\uad31\13\uad92\13\uadf3\13\uae54"+ + "\13\uaeb5\13\uaf16\13\uaf77\13\uafd8\13\ub039\13\ub09a\13\ub0fb\13\ub15c"+ + "\13\ub1bd\13\ub21e\13\ub27f\13\ub2e0\13\ub341\13\ub3a2\13\ub403\13\ub464"+ + "\13\ub4c5\13\ub526\13\ub587\13\ub5e8\13\ub649\13\ub6aa\13\ub70b\13\ub76c"+ + "\13\ub7cd\13\ub82e\13\ub88f\13\ub8f0\13\ub951\13\ub9b2\13\uba13\13\uba74"+ + "\13\ubad5\13\ubb36\13\ubb97\13\ubbf8\13\ubc59\13\ubcba\13\ubd1b\13\ubd7c"+ + "\13\ubddd\13\ube3e\13\ube9f\13\ubf00\13\ubf61\13\ubfc2\13\uc023\13\uc084"+ + "\13\uc0e5\13\uc146\13\uc1a7\13\uc208\13\uc269\13\uc2ca\13\uc32b\13\uc38c"+ + "\13\uc3ed\13\uc44e\13\uc4af\13\uc510\13\uc571\13\uc5d2\13\uc633\13\uc694"+ + "\13\uc6f5\13\uc756\13\uc7b7\13\uc818\13\uc879\13\uc8da\13\uc93b\13\uc99c"+ + "\13\uc9fd\13\uca5e\13\ucabf\13\ucb20\13\ucb81\13\ucbe2\13\ucc43\13\ucca4"+ + "\13\ucd05\13\ucd66\13\ucdc7\13\uce28\13\uce89\13\uceea\13\ucf4b\13\ucfac"+ + "\13\ud00d\13\ud06e\13\ud0cf\13\ud130\13\ud191\13\ud1f2\13\ud253\13\ud2b4"+ + "\13\ud315\13\ud376\13\ud3d7\13\ud438\13\ud499\11\udca7"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[8198]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\40\1\41\1\42\1\43\1\44\1\45\133\40\2\46"+ + "\1\47\26\46\1\50\31\46\1\51\7\46\1\52\1\46"+ + "\1\53\43\46\2\54\1\55\14\54\1\56\121\54\1\57"+ + "\1\60\1\0\1\61\1\44\2\57\1\62\1\63\6\57"+ + "\1\64\26\57\1\65\47\57\1\66\22\57\2\67\1\0"+ + "\1\67\1\70\2\67\2\70\1\71\1\72\1\73\1\74"+ + "\1\75\1\76\1\70\1\67\1\77\1\100\3\67\1\101"+ + "\3\67\1\102\6\67\1\103\4\67\1\70\7\67\1\74"+ + "\1\104\1\76\1\73\1\100\1\105\1\106\1\77\1\71"+ + "\1\101\1\72\1\67\1\107\1\110\1\111\1\67\1\112"+ + "\1\103\1\75\1\67\1\113\1\67\1\114\1\67\1\102"+ + "\1\105\1\106\1\107\4\67\1\70\1\111\1\104\1\67"+ + "\1\112\1\114\1\113\1\110\13\67\3\115\1\116\3\115"+ + "\1\117\131\115\3\120\1\116\112\120\1\117\22\120\1\57"+ + "\1\60\1\0\1\61\1\44\2\57\1\121\1\122\6\57"+ + "\1\123\26\57\1\65\47\57\1\124\22\57\3\115\1\116"+ + "\3\115\1\125\131\115\3\120\1\116\112\120\1\125\22\120"+ + "\1\57\1\60\1\0\1\61\1\44\2\57\1\126\1\122"+ + "\6\57\1\127\26\57\1\65\47\57\1\130\22\57\3\115"+ + "\1\116\3\115\1\131\131\115\3\120\1\116\112\120\1\131"+ + "\22\120\1\132\1\44\1\133\1\134\1\44\1\135\1\136"+ + "\1\137\1\140\3\141\1\142\2\141\1\143\4\141\1\144"+ + "\1\145\1\141\1\144\1\141\1\146\1\147\1\150\2\132"+ + "\1\141\1\151\2\141\1\152\1\153\1\154\1\136\4\151"+ + "\3\65\1\155\1\156\1\141\1\157\1\160\1\161\1\162"+ + "\1\163\1\164\1\165\1\166\1\167\1\170\1\171\2\141"+ + "\1\172\1\141\1\173\1\174\1\141\1\175\2\141\1\154"+ + "\3\141\1\176\1\132\3\154\1\177\7\141\1\144\2\141"+ + "\1\200\3\144\1\141\3\144\2\201\1\202\1\203\31\201"+ + "\1\204\60\201\1\205\22\201\2\206\1\207\1\210\3\206"+ + "\1\211\25\206\1\212\103\206\2\213\1\214\1\215\33\213"+ + "\1\216\23\213\1\217\7\213\1\220\1\213\1\221\43\213"+ + "\2\222\1\223\1\224\33\222\1\225\23\222\1\226\7\222"+ + "\1\227\1\222\1\230\7\222\1\231\4\222\1\232\26\222"+ + "\2\233\1\234\1\235\57\233\1\236\7\233\1\237\1\233"+ + "\1\240\43\233\1\132\1\44\1\241\1\242\1\44\1\135"+ + "\1\136\1\243\1\244\5\141\1\245\1\143\4\141\1\144"+ + "\1\145\1\141\1\144\1\246\1\146\1\247\1\136\1\250"+ + "\1\132\1\251\1\151\2\141\1\152\1\153\1\154\1\136"+ + "\4\151\1\252\2\65\1\253\1\254\1\255\1\256\1\257"+ + "\1\260\1\261\1\262\1\263\1\264\1\265\1\266\1\267"+ + "\1\270\1\271\1\272\1\273\1\274\1\275\1\276\1\277"+ + "\1\300\1\301\1\302\1\154\1\141\1\303\1\141\1\304"+ + "\1\305\3\154\1\306\7\141\1\144\1\141\1\307\1\136"+ + "\3\144\1\310\3\144\2\311\1\312\34\311\1\313\23\311"+ + "\1\217\7\311\1\220\1\311\1\221\43\311\2\314\1\315"+ + "\4\314\1\316\25\314\1\317\1\320\102\314\2\321\1\322"+ + "\32\321\1\323\60\321\1\324\22\321\1\325\1\44\1\326"+ + "\1\327\1\44\1\325\1\154\1\330\1\331\6\332\1\65"+ + "\4\332\2\325\1\332\1\325\3\332\1\325\1\333\1\325"+ + "\1\65\3\332\1\65\1\332\1\325\1\136\2\65\3\325"+ + "\1\334\2\65\27\332\1\335\4\332\1\336\3\154\1\337"+ + "\7\332\1\325\2\332\4\325\1\332\3\325\1\340\1\44"+ + "\1\341\1\342\1\44\3\340\1\343\6\344\1\340\4\344"+ + "\2\340\1\344\1\340\3\344\4\340\1\345\2\344\2\340"+ + "\1\346\6\340\1\347\2\340\27\344\1\340\4\344\5\340"+ + "\7\344\1\340\2\344\4\340\1\344\3\340\1\350\1\44"+ + "\1\351\1\352\1\44\1\350\1\353\1\330\1\354\6\355"+ + "\1\350\4\355\2\356\1\355\1\356\1\355\1\357\1\355"+ + "\1\350\1\360\1\355\2\350\2\355\1\350\1\136\1\346"+ + "\1\136\3\350\1\361\4\350\27\355\1\350\4\355\1\350"+ + "\1\362\1\363\1\350\1\337\7\355\1\356\2\355\1\350"+ + "\3\356\1\355\3\356\2\206\1\364\1\203\3\206\1\365"+ + "\25\206\1\317\103\206\2\201\1\366\1\203\31\201\1\317"+ + "\60\201\1\367\22\201\2\213\1\370\1\203\33\213\1\371"+ + "\23\213\1\217\7\213\1\220\1\213\1\221\43\213\2\372"+ + "\1\373\32\372\1\374\1\375\72\372\1\376\7\372\2\377"+ + "\1\u0100\33\377\1\u0101\5\377\1\u0102\74\377\2\40\4\0"+ + "\134\40\1\41\2\0\1\44\1\0\133\40\151\0\1\u0103"+ + "\1\u0104\5\u0105\1\0\10\u0105\2\0\1\u0105\5\0\2\u0105"+ + "\7\0\1\u0106\1\u0107\3\0\10\u0105\1\u0104\16\u0105\1\0"+ + "\4\u0105\5\0\12\u0105\1\0\7\u0105\1\0\1\44\2\0"+ + "\1\44\134\0\4\45\1\0\1\45\1\u0108\132\45\2\46"+ + "\1\0\26\46\1\0\31\46\1\0\7\46\1\0\1\46"+ + "\1\0\43\46\31\0\1\u0109\165\0\1\u010a\1\0\1\u010b"+ + "\140\0\1\u010c\155\0\1\u010d\43\0\2\54\1\0\14\54"+ + "\1\0\121\54\2\57\1\0\1\57\1\0\2\57\2\0"+ + "\6\57\1\0\26\57\1\0\47\57\1\0\23\57\1\60"+ + "\1\0\1\57\1\44\2\57\2\0\6\57\1\0\26\57"+ + "\1\0\47\57\1\0\24\57\1\0\1\57\1\0\2\57"+ + "\2\0\6\57\1\0\26\57\1\0\3\57\1\u010e\43\57"+ + "\1\0\22\57\17\0\1\64\121\0\2\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\26\67\1\0\47\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\1\67"+ + "\1\u010f\2\67\1\u0110\1\u0111\1\0\2\67\1\u0112\7\67"+ + "\1\u0113\13\67\1\0\10\67\1\u0114\1\u0111\1\67\1\u0112"+ + "\1\67\1\u0115\3\67\1\u010f\3\67\1\u0116\3\67\1\u0110"+ + "\5\67\1\u0113\1\67\1\u0115\5\67\1\0\1\u0116\1\u0114"+ + "\22\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u0117"+ + "\2\67\1\0\2\67\1\u0118\23\67\1\0\7\67\1\u0117"+ + "\3\67\1\u0118\1\67\1\u0119\7\67\1\u011a\13\67\1\u0119"+ + "\5\67\1\0\1\u011a\23\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\12\67\1\u011b\13\67\1\0\37\67"+ + "\1\u011b\7\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\u011c\5\67\1\0\1\67\1\u011d\24\67\1\0"+ + "\10\67\1\u011e\3\67\1\u011f\1\67\1\u011d\1\u011c\3\67"+ + "\1\u0120\14\67\1\u011f\1\67\1\u0120\4\67\1\0\1\67"+ + "\1\u011e\22\67\1\0\1\67\1\0\2\67\2\0\2\67"+ + "\1\u0121\3\67\1\0\1\67\1\u0122\24\67\1\0\12\67"+ + "\1\u0121\2\67\1\u0123\1\u0122\22\67\1\u0123\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\2\67\1\114"+ + "\1\u0124\1\67\1\114\1\0\2\67\1\u0125\3\67\1\u0126"+ + "\12\67\1\114\4\67\1\0\7\67\1\u0124\1\67\2\114"+ + "\1\u0125\1\u0127\1\u0128\2\67\1\u0126\3\67\1\u0129\3\67"+ + "\1\114\7\67\1\u0127\1\u0128\5\67\1\0\6\67\1\u0129"+ + "\15\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u012a"+ + "\2\67\1\0\2\67\1\u012b\23\67\1\0\7\67\1\u012a"+ + "\3\67\1\u012b\1\67\1\u012c\23\67\1\u012c\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u012d\22\67\1\u012e\13\67\1\0"+ + "\1\67\1\u012d\3\67\1\u012e\16\67\1\0\1\67\1\0"+ + "\2\67\2\0\2\67\1\114\1\u011e\2\67\1\0\1\67"+ + "\1\u012f\10\67\1\u0130\6\67\1\u0131\4\67\1\0\7\67"+ + "\1\u011e\2\67\1\114\2\67\1\u0132\1\u012f\3\67\1\u0133"+ + "\2\67\1\u0134\2\67\1\u0131\6\67\1\u0130\1\67\1\u0132"+ + "\5\67\1\0\1\u0134\1\67\1\u0133\21\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\1\67\1\114\24\67"+ + "\1\0\16\67\1\114\30\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\3\67\1\u0135\1\67\1\114\1\0"+ + "\1\67\1\114\1\u0136\16\67\1\114\4\67\1\0\7\67"+ + "\1\u0135\1\67\1\114\1\67\1\u0136\1\u0137\1\u0138\1\114"+ + "\11\67\1\114\7\67\1\u0137\1\u0138\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0139\7\67\1\u013a\13\67\1\0\13\67\1\u0139\1\67"+ + "\1\u013b\21\67\1\u013a\1\67\1\u013b\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\2\67\1\u013c\1\u013d"+ + "\2\67\1\0\26\67\1\0\7\67\1\u013d\2\67\1\u013c"+ + "\12\67\1\u013e\21\67\1\0\1\u013e\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\u013f\1\u0140\1\u0141\1\67\1\u0142"+ + "\1\67\1\0\6\67\1\u0143\3\67\1\u0144\6\67\1\u0145"+ + "\4\67\1\0\12\67\1\u0141\4\67\1\u013f\1\u0143\1\u0140"+ + "\6\67\1\u0145\1\u0142\5\67\1\u0144\7\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0146\23\67\1\0\13\67\1\u0146\1\67\1\u0147\7\67"+ + "\1\u0148\13\67\1\u0147\5\67\1\0\1\u0148\23\67\1\0"+ + "\1\67\1\0\2\67\2\0\2\67\1\114\2\67\1\u0149"+ + "\1\0\2\67\1\u014a\23\67\1\0\11\67\1\u0149\1\114"+ + "\1\u014a\33\67\1\0\7\67\1\114\3\67\3\114\1\67"+ + "\2\114\3\67\1\0\1\67\1\0\2\67\2\0\4\67"+ + "\1\u014b\1\67\1\0\1\67\1\114\4\67\1\u014c\3\67"+ + "\1\u014d\13\67\1\0\16\67\1\114\1\67\1\u014c\10\67"+ + "\1\u014b\5\67\1\u014d\7\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\2\67\1\u014e\3\67"+ + "\1\u014f\17\67\1\0\13\67\1\u014e\4\67\1\u014f\26\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\3\67"+ + "\1\u0150\2\67\1\0\26\67\1\0\7\67\1\u0150\5\67"+ + "\1\u0151\23\67\1\u0151\5\67\1\0\22\67\3\115\1\0"+ + "\3\115\1\0\131\115\52\0\1\u0152\66\0\3\120\1\0"+ + "\112\120\1\0\22\120\17\0\1\u0153\121\0\1\132\10\0"+ + "\6\132\1\0\11\132\1\0\1\132\1\0\3\132\1\0"+ + "\2\132\14\0\27\132\1\0\5\132\4\0\12\132\1\0"+ + "\7\132\3\0\1\u0154\4\0\1\u0155\35\0\1\65\3\0"+ + "\1\u0156\73\0\1\65\40\0\1\65\72\0\10\u0157\1\u0158"+ + "\24\u0157\1\u0159\1\u0157\1\u015a\6\u0157\1\u015b\72\u0157\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u015d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\17\0\1\u015e\26\0"+ + "\1\65\72\0\1\u015f\10\0\6\u015f\1\0\1\u015f\1\u0160"+ + "\1\u0161\1\u015f\2\144\1\u015f\1\144\1\u015f\1\0\1\u015f"+ + "\1\0\3\u015f\1\0\1\u015f\1\u0162\1\0\1\u0163\12\0"+ + "\4\u015f\1\u0161\1\u0162\1\u015f\1\u0160\11\u015f\1\u0162\5\u015f"+ + "\1\0\1\u015f\1\u0162\3\u015f\4\0\7\u015f\1\144\2\u015f"+ + "\1\0\3\144\1\u015f\3\144\1\u015f\10\0\6\u015f\1\0"+ + "\1\u015f\1\u0160\1\u0161\1\u015f\1\u0164\1\u0165\1\u015f\1\u0165"+ + "\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u0166\1\u0162"+ + "\1\0\1\u0163\12\0\4\u015f\1\u0161\1\u0162\1\u015f\1\u0160"+ + "\11\u015f\1\u0162\3\u015f\1\u0166\1\u015f\1\0\1\u015f\1\u0162"+ + "\3\u015f\4\0\7\u015f\1\u0165\2\u015f\1\0\3\u0165\1\u015f"+ + "\2\u0165\1\u0164\31\0\1\65\14\0\1\65\72\0\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0167\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\46\0"+ + "\1\65\134\0\1\65\3\0\1\65\116\0\2\u0163\1\0"+ + "\1\u0163\76\0\1\u0163\3\0\3\u0163\1\0\3\u0163\46\0"+ + "\1\65\6\0\1\65\63\0\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0168\3\141\1\u0169\2\141\1\u016a"+ + "\3\141\1\u016b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u016c\11\141\1\u016d\5\141\1\u016e\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u016f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0170\1\u0171\1\u0172"+ + "\3\141\1\u0173\7\141\1\u0174\1\u0175\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0176\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0177\5\141\1\u0178\1\u0179\6\141"+ + "\1\u017a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u017b\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u017c\11\141\1\u017d\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u017e\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u017f\12\141\1\u0180\1\141\1\u0181\3\141"+ + "\1\u0182\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0183\12\141\1\u0184\4\141\1\u0185\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0186\1\u0187\5\141\1\u0188"+ + "\1\u0189\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u018a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u018b"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u018c\1\141\1\u018d\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u018e\14\141\1\u018f\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0190\11\141\1\u0191\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0192\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0193\2\141\1\u0194"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u017a"+ + "\7\141\1\u0195\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0196\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\2\201\2\0\31\201\1\0\60\201\1\0"+ + "\22\201\52\0\1\u0197\66\0\2\u0198\1\0\27\u0198\1\u0199"+ + "\50\u0198\1\u019a\35\u0198\2\206\2\0\3\206\1\0\25\206"+ + "\1\0\103\206\52\0\1\u019b\66\0\2\213\2\0\33\213"+ + "\1\0\23\213\1\0\7\213\1\0\1\213\1\0\43\213"+ + "\10\0\1\u019c\140\0\1\u019d\206\0\1\u019e\1\0\1\u019f"+ + "\140\0\1\u01a0\155\0\1\u01a1\43\0\2\222\2\0\33\222"+ + "\1\0\23\222\1\0\7\222\1\0\1\222\1\0\7\222"+ + "\1\0\4\222\1\0\26\222\10\0\1\u01a2\6\u01a3\1\u01a4"+ + "\4\u01a3\2\0\1\u01a3\3\0\1\u01a3\5\0\2\u01a3\14\0"+ + "\27\u01a3\1\0\4\u01a3\5\0\7\u01a3\1\0\2\u01a3\4\0"+ + "\1\u01a3\13\0\1\u01a5\206\0\1\u01a6\1\0\1\u01a7\140\0"+ + "\1\u01a8\155\0\1\u01a9\155\0\1\u01aa\104\0\1\u01ab\1\u01ac"+ + "\1\u01ad\1\u01ae\1\u01af\1\u01b0\1\u01b1\1\u01b2\1\u01b3\1\u01b4"+ + "\1\u01b5\1\u01b6\1\u01b7\3\0\1\u01b8\1\u01b9\1\u01ba\1\0"+ + "\1\u01bb\36\0\2\233\2\0\57\233\1\0\7\233\1\0"+ + "\1\233\1\0\43\233\10\0\1\u01bc\206\0\1\u01bd\1\0"+ + "\1\u01be\140\0\1\u01bf\155\0\1\u01c0\46\0\1\u0154\42\0"+ + "\1\65\102\0\1\250\26\0\1\u01c1\6\0\1\65\72\0"+ + "\1\132\10\0\2\141\1\u01c2\3\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u01c3\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u01c4\1\u01c5"+ + "\1\u01c6\2\141\1\u01c7\1\141\1\u01c8\1\141\1\u01c9\1\141"+ + "\1\u01ca\3\141\1\u01c7\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\2\250\1\0\136\250\1\132\10\0"+ + "\6\u01cb\1\0\4\u01cb\2\141\1\u01cb\1\141\1\u01cb\1\0"+ + "\1\u01cb\1\0\1\132\1\u015c\1\141\1\0\2\u01cb\14\0"+ + "\27\u01cb\1\0\4\u01cb\1\132\4\0\7\u01cb\1\141\2\u01cb"+ + "\1\0\3\141\1\u01cb\3\141\17\0\1\u01cc\121\0\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u01cd\1\u01ce"+ + "\2\141\1\u0169\2\141\1\u01cf\1\u01d0\1\u01d1\1\u01d2\1\u01d3"+ + "\4\141\1\u01d4\1\u01d5\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u01d6\1\141\1\u01d7\1\141\1\u01d8\1\141\1\u01d9"+ + "\1\141\1\u01da\1\u01db\1\u01dc\2\141\1\u01dd\1\u01de\1\141"+ + "\1\u01df\1\u01e0\1\141\1\u01e1\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u01e2\1\u01e3\1\141\1\u01e4\1\u01e5\1\141"+ + "\1\u01e6\3\141\1\u01e7\2\141\1\u01e8\1\u01e9\4\141\1\u01ea"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u01eb"+ + "\1\u01ec\1\141\1\u01ed\1\141\1\u01ee\1\141\1\u01ef\5\141"+ + "\1\u01f0\3\141\1\u01f1\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u01f2\1\141\1\u01f3\2\141\1\u01f4\1\u01f5"+ + "\1\u01f6\1\u01f7\1\u01f8\1\141\1\u01f9\1\141\1\u01fa\5\141"+ + "\1\u01fb\1\u01fc\1\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u01fd\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u01fe\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u01ff\1\u0200\1\u0201\1\u0202\1\u0203\1\u0204\1\u0178"+ + "\1\u0205\1\u0206\1\u0207\1\u0208\1\u0209\1\u020a\1\141\1\u020b"+ + "\1\u020c\2\141\1\u020d\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u020e\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u020f\1\u0210\3\141\1\u0211\1\u0212\1\u0213"+ + "\1\u0214\1\u0215\1\u0216\4\141\1\u0217\1\u0218\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0219\1\141\1\u01ec\1\141"+ + "\1\u021a\1\141\1\u021b\1\141\1\u021c\1\141\1\u021d\3\141"+ + "\1\u021e\2\141\1\u021f\5\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u0220\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0221\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0222\1\141\1\u0223\1\u0224\1\u0225\1\141"+ + "\1\u0226\1\u0227\1\u0228\1\141\1\u0229\1\141\1\u022a\1\u022b"+ + "\1\u022c\1\u022d\1\u022e\1\141\1\u022f\1\u0230\2\141\1\u0231"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0232\2\141\1\u0183"+ + "\1\u0233\1\141\1\u0234\3\141\1\u0235\14\141\1\0\4\141"+ + "\1\132\4\0\11\141\1\u0236\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0237\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0238\1\u0239\1\u023a"+ + "\1\u023b\1\u023c\2\141\1\u023d\2\141\1\u023e\1\u023f\4\141"+ + "\1\u0240\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0241\1\141\1\u0242\1\u0243\2\141\1\u0244\6\141\1\u018a"+ + "\2\141\1\u0245\5\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u0246\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0247\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0248\1\141\1\u0249\1\u024a\1\u024b\2\141"+ + "\1\u024c\2\141\1\u024d\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u024e\1\141\1\u024f\1\141\1\u0250\1\141\1\u0251"+ + "\10\141\1\u0252\3\141\1\u0253\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0254\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0255\1\141\1\u0256\1\141\1\u0257"+ + "\1\141\1\u0258\1\u0259\4\141\1\u025a\1\141\1\u025b\1\u025c"+ + "\1\141\1\u025d\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u025e\11\141\1\u018f\1\u025f\2\141\1\u0260\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\4\141\1\u0261"+ + "\2\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0262"+ + "\2\141\1\u01c7\1\u0263\3\141\1\u01ef\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0264\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0265\2\141\1\u0266\1\u0267\1\141"+ + "\1\u0268\1\u0269\1\u026a\1\u026b\1\u026c\1\u024c\1\u026d\1\141"+ + "\1\u026e\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u026f"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0270"+ + "\2\141\1\u0271\1\141\1\u0272\1\u0273\3\141\1\u0274\1\u0275"+ + "\1\u0276\1\u0277\1\u0278\2\141\1\u0279\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u027a\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u027b\3\141\1\u027c\1\u027d\1\u027e"+ + "\1\141\1\u027d\11\141\1\u027f\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0280\1\u0281\4\141\1\u0282\1\141\1\u0283"+ + "\5\141\1\u017a\3\141\1\u0284\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0285\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0286\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\2\141\1\u0287\1\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\1\u0288\3\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\u0289\1\0\4\u0289"+ + "\2\132\1\u0289\1\132\1\u0289\1\0\1\u0289\1\0\2\132"+ + "\1\u0289\1\0\2\u0289\14\0\27\u0289\1\0\4\u0289\1\132"+ + "\4\0\7\u0289\1\132\2\u0289\1\0\3\132\1\u0289\4\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u028a\3\141\1\u028b"+ + "\2\141\1\u028c\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u028d\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u028e\1\141\1\u028f\1\141\1\u0290\5\141\1\u0291"+ + "\2\141\1\u0292\1\u0293\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\2\311\1\0\34\311\1\0\23\311"+ + "\1\0\7\311\1\0\1\311\1\0\43\311\10\0\1\u0294"+ + "\130\0\2\314\1\0\4\314\1\0\25\314\2\0\102\314"+ + "\2\u0295\1\0\136\u0295\11\0\6\u0296\1\0\4\u0296\2\0"+ + "\1\u0296\1\0\1\u0296\1\0\1\u0296\5\0\2\u0296\14\0"+ + "\27\u0296\1\0\4\u0296\5\0\7\u0296\1\0\2\u0296\4\0"+ + "\1\u0296\3\0\2\321\1\0\32\321\1\0\60\321\1\0"+ + "\22\321\2\u0297\1\0\136\u0297\10\0\1\u0298\41\0\1\u0156"+ + "\125\0\1\u0299\112\0\6\332\1\0\13\332\5\0\2\332"+ + "\1\0\1\332\12\0\27\332\1\0\4\332\5\0\12\332"+ + "\1\0\7\332\11\0\6\u029a\1\0\4\u029a\2\0\1\u029a"+ + "\1\0\3\u029a\4\0\3\u029a\1\0\1\u029a\12\0\27\u029a"+ + "\1\0\4\u029a\5\0\7\u029a\1\0\2\u029a\4\0\1\u029a"+ + "\56\0\1\u029b\4\0\1\u029c\1\u029d\1\u029e\1\u029f\1\u02a0"+ + "\1\u02a1\2\0\1\u02a2\1\0\1\u02a3\1\u02a4\1\u02a5\2\0"+ + "\1\u02a6\2\0\1\u02a7\47\0\6\u02a8\1\0\4\u02a8\2\0"+ + "\1\u02a8\1\0\3\u02a8\4\0\3\u02a8\1\0\1\u02a8\12\0"+ + "\27\u02a8\1\0\4\u02a8\5\0\7\u02a8\1\0\2\u02a8\4\0"+ + "\1\u02a8\14\0\6\344\1\0\13\344\5\0\2\344\14\0"+ + "\27\344\1\0\4\344\5\0\12\344\1\0\7\344\11\0"+ + "\6\344\1\0\4\344\2\0\1\344\1\0\3\344\5\0"+ + "\2\344\14\0\27\344\1\0\4\344\5\0\7\344\1\0"+ + "\2\344\4\0\1\344\13\0\7\355\1\0\4\355\2\0"+ + "\1\355\1\0\3\355\2\0\1\355\1\0\1\u0299\2\355"+ + "\14\0\27\355\1\0\4\355\2\0\1\363\2\0\7\355"+ + "\1\0\2\355\4\0\1\355\13\0\7\355\1\0\4\355"+ + "\2\0\1\355\1\0\3\355\2\0\1\355\2\0\2\355"+ + "\14\0\27\355\1\0\4\355\2\0\1\363\2\0\7\355"+ + "\1\0\2\355\4\0\1\355\27\0\2\356\1\0\1\356"+ + "\13\0\1\356\4\0\1\u02a9\5\0\1\u02aa\1\u02ab\2\0"+ + "\1\u02ac\3\0\1\u02a9\1\0\1\u02ad\7\0\1\u02ae\25\0"+ + "\1\356\3\0\3\356\1\0\3\356\10\0\7\355\1\0"+ + "\4\355\2\356\1\355\1\356\3\355\2\0\1\355\2\0"+ + "\2\355\14\0\27\355\1\0\4\355\2\0\1\363\2\0"+ + "\7\355\1\356\2\355\1\0\3\356\1\355\3\356\12\0"+ + "\1\u02af\7\0\1\u02af\1\0\4\u02af\11\0\1\u02af\20\0"+ + "\3\u02af\2\0\2\u02af\6\0\1\u02af\7\0\2\u02af\15\0"+ + "\1\u02af\3\0\3\u02af\1\0\3\u02af\56\0\1\u02b0\72\0"+ + "\1\u02b1\130\0\2\372\1\0\32\372\2\0\72\372\1\0"+ + "\7\372\105\0\1\u02b2\33\0\2\377\1\0\33\377\1\0"+ + "\5\377\1\0\74\377\105\0\1\u02b3\44\0\6\u02b4\1\0"+ + "\10\u02b4\2\0\1\u02b4\5\0\2\u02b4\14\0\27\u02b4\1\0"+ + "\4\u02b4\5\0\12\u02b4\1\0\7\u02b4\11\0\1\u0105\1\u02b5"+ + "\3\u0105\1\u02b6\1\0\10\u0105\2\0\1\u0105\5\0\2\u0105"+ + "\14\0\2\u0105\1\u02b6\7\u0105\1\u02b5\14\u0105\1\0\4\u0105"+ + "\5\0\12\u0105\1\0\7\u0105\11\0\6\u0105\1\0\10\u0105"+ + "\2\0\1\u0105\5\0\2\u0105\14\0\27\u0105\1\0\4\u0105"+ + "\5\0\12\u0105\1\0\7\u0105\31\0\1\u02b7\207\0\1\u02b8"+ + "\57\0\1\u02b9\206\0\1\u02ba\153\0\1\u02bb\120\0\1\u02bc"+ + "\155\0\1\u02bd\43\0\2\57\1\0\1\57\1\0\2\57"+ + "\2\0\6\57\1\0\26\57\1\0\31\57\1\u02be\15\57"+ + "\1\0\22\57\2\67\1\0\1\67\1\0\2\67\2\0"+ + "\2\67\1\u02bf\3\67\1\0\26\67\1\0\12\67\1\u02bf"+ + "\34\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\15\67\1\u02c0\23\67\1\u02c0"+ + "\5\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\2\67\1\u02c1\3\67\1\0\1\u011b\25\67\1\0\12\67"+ + "\1\u02c1\17\67\1\u011b\14\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\67\1\u02c2\1\u02c3\3\67\1\0"+ + "\1\67\1\u02c4\24\67\1\0\12\67\1\u02c3\3\67\1\u02c4"+ + "\2\67\1\u02c2\25\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\4\67\1\114\1\67\1\0\6\67\1\114"+ + "\17\67\1\0\20\67\1\114\10\67\1\114\15\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\15\67\1\u02c5\23\67\1\u02c5\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u02c6\36\67\1\0\1\67\1\u02c6"+ + "\22\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\12\67\1\u02c7\13\67\1\0\37\67\1\u02c7\7\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\5\67\1\u02c8"+ + "\1\0\26\67\1\0\11\67\1\u02c8\35\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u02c9\16\67\1\u02c9\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\4\67\1\u02c2\1\67"+ + "\1\0\26\67\1\0\23\67\1\u02ca\5\67\1\u02c2\10\67"+ + "\1\u02ca\4\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u02cb\17\67\1\u02c8\4\67"+ + "\1\0\10\67\1\u02cc\5\67\1\u02cb\11\67\1\u02c8\16\67"+ + "\1\0\1\67\1\u02cc\22\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u02c8\24\67\1\0\16\67"+ + "\1\u02c8\30\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u02cd\2\67\1\0\26\67\1\0\7\67"+ + "\1\u02cd\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\15\67\1\u02ce\23\67"+ + "\1\u02ce\5\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\22\67\1\114\24\67"+ + "\1\0\2\67\1\114\21\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u02cf\3\67\1\0\26\67\1\0\12\67"+ + "\1\u02cf\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\114\3\67\1\u02d0\1\67\1\0\26\67\1\0"+ + "\17\67\1\114\11\67\1\u02d0\15\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\2\67\1\114"+ + "\23\67\1\0\13\67\1\114\11\67\1\u02d1\21\67\1\0"+ + "\1\u02d1\23\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\15\67\1\u02d2\23\67\1\u02d2\5\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\2\67"+ + "\1\u02d3\3\67\1\0\26\67\1\0\12\67\1\u02d3\34\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\5\67"+ + "\1\u011b\1\0\26\67\1\0\10\67\1\u02c8\1\u011b\35\67"+ + "\1\0\1\67\1\u02c8\22\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\20\67\1\u02d4\5\67\1\0\34\67"+ + "\1\u02d4\12\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\25\67\1\u0134\21\67"+ + "\1\0\1\u0134\23\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\25\67\1\u02d5\21\67\1\0"+ + "\1\u02d5\23\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\6\67\1\u011b\17\67\1\0\20\67\1\u011b\26\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\2\67\1\u02d6\23\67\1\0\13\67\1\u02d6\33\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\23\67\1\u02d7\16\67\1\u02d7\4\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\22\67\1\u02d8\24\67\1\0\2\67"+ + "\1\u02d8\21\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\1\u02d9\5\67\1\u02da\17\67\1\0\20\67\1\u02da"+ + "\11\67\1\u02d9\14\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\6\67\1\u02db\17\67\1\0"+ + "\20\67\1\u02db\26\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u02dc\23\67\1\0"+ + "\13\67\1\u02dc\33\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\3\67\1\u02dd\2\67\1\0\26\67\1\0"+ + "\7\67\1\u02dd\15\67\1\u02de\21\67\1\0\1\u02de\23\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u02df\1\0"+ + "\26\67\1\0\11\67\1\u02df\35\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\25\67\1\114\21\67\1\0\1\114\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\u02e0\5\67\1\0\26\67\1\0"+ + "\17\67\1\u02e0\27\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\1\u02e1\5\67\1\0\26\67\1\0\17\67"+ + "\1\u02e1\27\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\21\67\1\u02e2\4\67\1\0\30\67"+ + "\1\u02e2\16\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\114\3\67\1\0\26\67\1\0\12\67"+ + "\1\114\2\67\1\u02e3\15\67\1\114\5\67\1\u02e3\5\67"+ + "\1\0\5\67\1\114\16\67\1\0\1\67\1\0\2\67"+ + "\2\0\5\67\1\u02e4\1\0\1\67\1\114\24\67\1\0"+ + "\11\67\1\u02e4\4\67\1\114\30\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\23\67\1\114\16\67\1\114\4\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\5\67\1\u02e5\1\0\26\67"+ + "\1\0\11\67\1\u02e5\35\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\5\67\1\u02e6\1\0\26\67\1\0"+ + "\11\67\1\u02e6\11\67\1\u02e7\16\67\1\u02e7\4\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\1\67\1\u02e8\24\67\1\0\16\67\1\u02e8\30\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u02e9"+ + "\1\67\1\114\1\67\1\0\26\67\1\0\12\67\1\u02e9"+ + "\16\67\1\114\15\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u02ea"+ + "\23\67\1\u02ea\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u02eb\23\67\1\0"+ + "\13\67\1\u02eb\6\67\1\u02ec\24\67\1\0\2\67\1\u02ec"+ + "\21\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u02ed"+ + "\3\67\1\0\26\67\1\0\12\67\1\u02ed\10\67\1\u02ee"+ + "\1\67\1\u02c9\14\67\1\u02ee\4\67\1\0\1\u02c9\23\67"+ + "\1\0\1\67\1\0\2\67\2\0\3\67\1\u02ef\2\67"+ + "\1\0\26\67\1\0\7\67\1\u02ef\37\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\2\67\1\u02f0\3\67"+ + "\1\0\26\67\1\0\12\67\1\u02f0\34\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u02f1\1\0"+ + "\2\67\1\u02f2\23\67\1\0\11\67\1\u02f1\1\67\1\u02f2"+ + "\33\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\4\67\1\u02f3\1\67\1\0\26\67\1\0\31\67\1\u02f3"+ + "\15\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\6\67\1\u0151\17\67\1\0\20\67\1\u0151"+ + "\26\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\21\67\1\u02f4\4\67\1\0\30\67\1\u02f4"+ + "\16\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\21\67\1\u02f5\4\67\1\0\30\67\1\u02f5"+ + "\16\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\1\u02ee\5\67\1\0\26\67\1\0\17\67\1\u02ee\27\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\33\67\1\114\13\67\1\0\5\67"+ + "\1\114\16\67\1\0\1\67\1\0\2\67\2\0\1\u02f6"+ + "\5\67\1\0\1\67\1\u011d\1\u02f7\3\67\1\u0151\17\67"+ + "\1\0\13\67\1\u02f7\1\u02f8\1\67\1\u011d\1\u02f6\1\u0151"+ + "\17\67\1\u02f8\6\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\10\67\1\u02f9"+ + "\36\67\1\0\1\67\1\u02f9\22\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u02fa"+ + "\23\67\1\u02fa\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\5\67\1\u02fb\1\0\26\67\1\0\11\67"+ + "\1\u02fb\35\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\47\67\1\0\10\67"+ + "\1\u02c4\5\67\1\u02c4\5\67\1\0\1\67\1\0\2\67"+ + "\2\0\5\67\1\u02fc\1\0\26\67\1\0\11\67\1\u02fc"+ + "\35\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\u02fd\25\67\1\0\32\67\1\u02fd\14\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\21\67\1\114\4\67\1\0\30\67\1\114\16\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\21\67\1\u02fe\4\67\1\0\30\67\1\u02fe\16\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\2\67"+ + "\1\114\3\67\1\0\26\67\1\0\12\67\1\114\34\67"+ + "\1\0\22\67\100\0\1\u02ff\51\0\1\u0300\54\0\1\u0300"+ + "\152\0\1\u0301\40\0\10\u0157\1\u0302\24\u0157\1\u0159\105\u0157"+ + "\1\0\136\u0157\37\0\1\u0303\101\0\1\132\10\0\6\132"+ + "\1\0\11\132\1\0\1\u0304\1\0\3\132\1\0\2\132"+ + "\14\0\27\132\1\0\5\132\4\0\12\132\1\0\10\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0305\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\17\0"+ + "\1\151\26\0\1\65\72\0\1\u015f\10\0\6\u015f\1\0"+ + "\11\u015f\1\0\1\u015f\1\0\3\u015f\1\0\2\u015f\14\0"+ + "\27\u015f\1\0\5\u015f\4\0\12\u015f\1\0\10\u015f\10\0"+ + "\6\u015f\1\0\4\u015f\2\u0306\1\u015f\1\u0306\1\u015f\1\u0307"+ + "\1\u015f\1\0\3\u015f\1\0\2\u015f\1\u0307\13\0\27\u015f"+ + "\1\0\5\u015f\4\0\7\u015f\1\u0306\2\u015f\1\0\3\u0306"+ + "\1\u015f\3\u0306\1\u015f\10\0\6\u015f\1\0\2\u015f\1\u0161"+ + "\1\u015f\2\u0163\1\u015f\1\u0163\1\u015f\1\0\1\u015f\1\0"+ + "\3\u015f\1\0\1\u015f\1\u0162\14\0\4\u015f\1\u0161\1\u0162"+ + "\13\u015f\1\u0162\5\u015f\1\0\1\u015f\1\u0162\3\u015f\4\0"+ + "\7\u015f\1\u0163\2\u015f\1\0\3\u0163\1\u015f\3\u0163\1\u015f"+ + "\10\0\6\u015f\1\0\2\u015f\1\u0161\1\u015f\2\u0164\1\u015f"+ + "\1\u0164\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u015f"+ + "\1\u0162\1\0\1\u0163\12\0\4\u015f\1\u0161\1\u0162\13\u015f"+ + "\1\u0162\5\u015f\1\0\1\u015f\1\u0162\3\u015f\4\0\7\u015f"+ + "\1\u0164\2\u015f\1\0\3\u0164\1\u015f\3\u0164\1\u015f\10\0"+ + "\6\u015f\1\0\1\u015f\1\u0308\1\u0161\1\u015f\1\u0164\1\u0165"+ + "\1\u015f\1\u0165\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0"+ + "\1\u015f\1\u0162\1\0\1\u0163\12\0\4\u015f\1\u0161\1\u0162"+ + "\1\u015f\1\u0308\11\u015f\1\u0162\5\u015f\1\0\1\u015f\1\u0162"+ + "\3\u015f\4\0\7\u015f\1\u0165\2\u015f\1\0\3\u0165\1\u015f"+ + "\2\u0165\1\u0164\1\u015f\10\0\1\u015f\1\u0309\4\u015f\1\0"+ + "\2\u015f\1\u0309\1\u015f\4\u0309\1\u015f\1\0\1\u015f\1\0"+ + "\3\u015f\1\0\1\u015f\1\u0309\14\0\4\u015f\3\u0309\2\u015f"+ + "\2\u0309\6\u015f\1\u0309\5\u015f\1\0\1\u015f\2\u0309\2\u015f"+ + "\4\0\7\u015f\1\u0309\2\u015f\1\0\3\u0309\1\u015f\3\u0309"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u030a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u030b"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\1\141\1\u030c\1\141\1\u030d\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u030e\5\141\1\u030f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0310\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0311\14\141\1\u0169\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0312\2\141\1\u0313\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0314\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0315\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0316\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0317\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0318\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0319\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u031a\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u031b\17\141\1\u031c\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u031d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u031e\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u031f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0320\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0169\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0321\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0322\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0323\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0324\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0325\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0326\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0327\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0328\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0329\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u032a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u032b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u032c\5\141\1\u0317\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u032d\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u032e\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u032f\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0330\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0331\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0169\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0332\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0333\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0334\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0335\1\141\1\u0336"+ + "\1\141\1\u0337\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0338\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0339"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u033a\15\141"+ + "\1\u033b\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u033c\6\141\1\u033d\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0216\6\141\1\u033e\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\3\141\1\u0169\1\132\4\0"+ + "\12\141\1\0\7\141\100\0\1\u033f\52\0\1\u0340\7\0"+ + "\1\u0340\1\0\4\u0340\11\0\1\u0340\20\0\3\u0340\2\0"+ + "\2\u0340\6\0\1\u0340\7\0\2\u0340\15\0\1\u0340\3\0"+ + "\3\u0340\1\0\3\u0340\12\0\1\u0341\7\0\1\u0341\1\0"+ + "\4\u0341\11\0\1\u0341\20\0\3\u0341\2\0\2\u0341\6\0"+ + "\1\u0341\7\0\2\u0341\15\0\1\u0341\3\0\3\u0341\1\0"+ + "\3\u0341\100\0\1\u0342\51\0\1\u0343\54\0\1\u0343\137\0"+ + "\1\u0344\153\0\1\u0345\120\0\1\u0346\155\0\1\u0347\54\0"+ + "\6\u01a3\1\u01a4\4\u01a3\2\0\1\u01a3\3\0\1\u01a3\5\0"+ + "\2\u01a3\14\0\27\u01a3\1\0\4\u01a3\5\0\7\u01a3\1\0"+ + "\2\u01a3\4\0\1\u01a3\3\0\17\u01a3\1\u01a4\121\u01a3\65\0"+ + "\1\u0348\153\0\1\u0349\120\0\1\u034a\155\0\1\u034b\123\0"+ + "\1\u034c\4\0\1\u034d\144\0\1\u034e\1\u034f\124\0\1\u0350"+ + "\3\0\1\u0351\11\0\1\u0352\137\0\1\u0353\1\u0354\4\0"+ + "\1\u0355\121\0\1\u0356\150\0\1\u0357\7\0\1\u0358\1\u0359"+ + "\113\0\1\u035a\114\0\1\u035b\32\0\1\u035c\1\0\1\u035d"+ + "\1\u035e\126\0\1\u035f\3\0\1\u0360\110\0\1\u0361\23\0"+ + "\1\u0362\1\0\1\u0363\1\0\1\u0364\152\0\1\u0365\130\0"+ + "\1\u0366\1\u0367\6\0\1\u0368\131\0\1\u0369\137\0\1\u036a"+ + "\132\0\1\u036b\144\0\1\u036c\110\0\1\u036d\26\0\1\u036e"+ + "\2\0\1\u036f\136\0\1\u0370\1\0\1\u0371\65\0\1\u0372"+ + "\54\0\1\u0372\137\0\1\u0373\153\0\1\u0374\120\0\1\u0375"+ + "\155\0\1\u0376\102\0\1\u0377\101\0\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\1\u0378\3\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\1\141\1\u0379"+ + "\4\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\1\141\1\u037a\14\0\2\141\1\u037b\7\141"+ + "\1\u037c\1\u037d\13\141\1\0\1\141\1\u037e\1\141\1\u037f"+ + "\1\132\4\0\1\141\1\u0380\10\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0381\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0382\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0383\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u01ef\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0384\2\141"+ + "\1\u0385\6\141\1\u0386\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0387\11\141\1\u0388\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0389\2\141\1\u038a\3\141\1\u038b"+ + "\1\u038c\11\141\1\u038d\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\u01cb\1\0\11\u01cb"+ + "\1\0\1\u01cb\1\0\1\132\1\u015c\1\141\1\0\2\u01cb"+ + "\14\0\27\u01cb\1\0\4\u01cb\1\132\4\0\12\u01cb\1\0"+ + "\7\u01cb\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u038e\13\141\1\u038f\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0390\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0391\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0392\1\141\1\u0393\1\u0394\1\u0395\1\u0396"+ + "\1\u0397\1\u0398\1\u0399\1\141\1\u039a\2\141\1\u039b\1\141"+ + "\1\u039c\1\141\1\u039d\1\u039e\2\141\1\u039f\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\3\141\1\u03a0\3\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u03a1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u03a2"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03a3"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u03a4\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u03a5"+ + "\1\141\1\u03a6\1\141\1\u03a7\1\u03a8\2\141\1\u03a9\1\141"+ + "\1\u03aa\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u03ab\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u03ac\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u03ad\6\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u03ae\10\141\1\u03af\1\141\1\u03b0\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u03b1\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u03b2\1\u03b3\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u03b4\7\141\1\u03b5\2\141"+ + "\1\u03b6\11\141\1\u0269\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u03b7\6\141\1\u03b8\12\141\1\u031a\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u03b9\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u03ba\2\141\1\u03bb\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u03bc\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03bd\10\141"+ + "\1\u03be\7\141\1\u03bf\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u03c0\16\141\1\u03c1\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u03c2\22\141\1\0\4\141"+ + "\1\132\4\0\7\141\1\u03c3\2\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u03c4\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u03c5\1\u03c6"+ + "\16\141\1\u03c7\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03c8\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u03c9\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u03ca\22\141\1\u0169\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u03cb\5\141\1\u031a\15\141\1\u03cc\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03cd\7\141"+ + "\1\u03ce\1\u03cf\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03d0\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03d1\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u03d2\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u03d3\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03d4\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u03c1\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03d5\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u03d6\1\u0315\3\141\1\u03d7\1\u03d8\1\u03d9\1\141"+ + "\1\u03da\1\u03db\1\u03dc\2\141\1\u03dd\2\141\1\u03de\3\141"+ + "\1\u03df\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03e0"+ + "\10\141\1\u03e1\2\141\1\u03e2\1\141\1\u03e3\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0386\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u03e4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03e5\4\141\1\u03e6"+ + "\7\141\1\u03e7\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u03e8\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03e9\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03ea\1\u03eb\1\141\1\u03ec\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u03ed\1\141\1\u03ee\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u03ef\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u03f0\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u03f1\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0330\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03f2\3\141"+ + "\1\u03f3\12\141\1\u03f4\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0269\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0331\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u03f5\1\141\1\u03f6\1\141\1\u03f7\15\141\1\u03f8"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u03f9"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03fa"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03fb"+ + "\1\u03fc\2\141\1\u03fd\4\141\1\u03fe\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0392\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u03ff\1\u0262\3\141\1\u021c"+ + "\5\141\1\u0400\3\141\1\u0401\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0402\3\141\1\u0403\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0404\13\141\1\u01fa\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0405\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0406\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0407\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0408\1\141"+ + "\1\u0409\5\141\1\u040a\3\141\1\u040b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u040c\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u040e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u040f\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0410\16\141\1\u0411\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0412\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0413\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0414\2\141"+ + "\1\u0415\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0416\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0417\3\141\1\u0418\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0419\4\141\1\u01ef\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u041a\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u041b\7\141\1\u041c\1\141\1\u041d\3\141"+ + "\1\u0386\6\141\1\u041e\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u041f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0420\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0421\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0169\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0422\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0423\12\141\1\u0424\1\u0425\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0426\3\141\1\u0427"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0428"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0429"+ + "\3\141\1\u042a\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0408\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u042b\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u042c\3\141\1\u042d\1\u042e\1\u042f\1\141\1\u0430"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0431"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0432"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0433"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0434"+ + "\12\141\1\u03cf\12\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u0435\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0436\1\141\1\u0437\2\141\1\u0438\7\141"+ + "\1\u0439\2\141\1\u043a\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u03e4\3\141\1\u043b\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u043c\1\u043d\1\u043e\1\u0400"+ + "\2\141\1\u043f\1\u0440\3\141\1\u0441\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u0442\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0443\1\141\1\u0444\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0445\2\141"+ + "\1\u040a\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0446\6\141\1\u0447\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0448\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0449\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u044a\2\141\1\u044b\1\141\1\u044c\7\141"+ + "\1\u044d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u044e"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u044f\6\141\1\u0450\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0327\4\141\1\u0451\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0452\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0414\1\u0453\2\141\1\u0454\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0455\6\141"+ + "\1\u0456\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u044f\3\141\1\u0457\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0458\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0459\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u045a\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u045b\4\141\1\u045c\1\141\1\u045d\1\141"+ + "\1\u045e\6\141\1\u045f\1\u0460\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0461\1\u0462\1\u0204\4\141\1\u0463"+ + "\3\141\1\u0464\1\u020c\1\141\1\u0465\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0466\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0467\1\141\1\u0468\3\141"+ + "\1\u0469\10\141\1\u046a\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u031a\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0176\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u032c"+ + "\4\141\1\u046b\1\u0317\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u046c\3\141\1\u046d\1\141\1\u046e\7\141\1\u046f"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0470"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0471\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0472\1\u0200"+ + "\1\141\1\u0473\1\u0474\1\141\1\u0475\4\141\1\u0476\2\141"+ + "\1\u0477\2\141\1\u03c1\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0478\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0479\6\141\1\u03cf\3\141\1\u047a\5\141"+ + "\1\u047b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u047c\5\141\1\u047d\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u047e\6\141\1\u047f\10\141\1\u0480\1\u0481"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0482"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0483"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0484"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0485\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0486\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0487\1\141\1\u0488"+ + "\1\u0489\1\u048a\1\u0396\2\141\1\u048b\1\141\1\u0463\1\u048c"+ + "\2\141\1\u0464\1\u020c\1\141\1\u048d\1\u048e\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u048f\5\141\1\u0331"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0169"+ + "\5\141\1\u0490\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0491\1\u0492\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0493\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\u0494\6\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0495\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0496\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0497\1\u0498\15\141\1\u0499\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u049a\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u049b\1\u049c\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u049d\2\141"+ + "\1\u049e\13\141\1\u049f\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u04a0\3\141\1\u04a1\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u04a2\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u04a3\1\141\1\u021c"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u04a4"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u04a5"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u04a6"+ + "\12\141\1\u0269\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u04a7\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u04a8\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u04a9"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\3\141\1\u04aa\3\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u04ab\1\141\1\u049f\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u04ac\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u04ad\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u04ae\1\141\1\u04af\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u04b0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u04b1\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u04b2\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u04b3\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\1\u04b4\6\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u031a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u04b5\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u04b6\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u04b7\1\u0169\3\141\1\u04b8\5\141"+ + "\1\u04b9\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u04ba\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u04bb\1\u04bc\1\u04bd\1\u04be\1\u04bf\1\u04c0\1\u04c1\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u04c2\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u04c3\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u04c4\5\141"+ + "\1\u04c5\1\u021c\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u021c\2\141\1\u024c\1\u04c6\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u04c7\2\141\1\u024c\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u04c8\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u04c9\1\u04ca"+ + "\7\141\1\u04cb\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04cc\6\141\1\u04cd\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u04ce\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u04cf\3\141\1\u04d0\11\141\1\u04d1\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u04d2\11\141"+ + "\1\u04d3\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u04d4\1\u04d5\4\141\1\u04d6\1\141\1\u0400\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u040d\4\141\1\u04d7"+ + "\1\141\1\u04d8\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u04d9"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u04da\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u04db\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u04dc\6\141\1\u0269\2\141\1\u0411\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u04dd\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u04de\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u04df\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u04e0\3\141\1\u04e1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u04e2\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u04e3\3\141\1\u04e4"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0414"+ + "\12\141\1\u04e5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u04e6\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u04e7\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04e8\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u04e9\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04ea\3\141\1\u04eb\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u04ec\11\141\1\u04ed\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u04ee\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\1\141\1\u04ef\7\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\1\141\1\u04f0\7\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\u0289\1\0\11\u0289\1\0\1\u0289\1\0\1\132\1\u04f1"+ + "\1\u0289\1\0\2\u0289\14\0\27\u0289\1\0\4\u0289\1\132"+ + "\4\0\12\u0289\1\0\7\u0289\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u04f2\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u04f3\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u04f4\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u04f5\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u04f6\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u04f7\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u04f8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u04f9\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u04fa\1\u04fb\16\141\1\u04fc\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0276\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\11\0\6\u0296\1\0"+ + "\11\u0296\1\0\1\u0296\5\0\2\u0296\14\0\27\u0296\1\0"+ + "\4\u0296\5\0\12\u0296\1\0\7\u0296\11\0\1\u04fd\54\0"+ + "\1\u04fd\63\0\6\u029a\1\0\13\u029a\5\0\2\u029a\1\0"+ + "\1\u029a\12\0\27\u029a\1\0\4\u029a\5\0\12\u029a\1\0"+ + "\7\u029a\63\0\1\u04fe\1\u04ff\2\0\1\u0500\135\0\1\u0501"+ + "\150\0\1\u0502\123\0\1\u0503\12\0\1\u0504\124\0\1\u0505"+ + "\15\0\1\u0506\134\0\1\u0507\126\0\1\u0508\5\0\1\u0509"+ + "\147\0\1\u050a\125\0\1\u050b\13\0\1\u050c\140\0\1\u050d"+ + "\136\0\1\u050e\124\0\1\u050f\140\0\1\u0510\73\0\6\u02a8"+ + "\1\0\13\u02a8\5\0\2\u02a8\1\0\1\u02a8\12\0\27\u02a8"+ + "\1\0\4\u02a8\5\0\12\u02a8\1\0\7\u02a8\72\0\1\u02a9"+ + "\125\0\1\u02a9\6\0\1\u02a9\131\0\1\u02a9\23\0\1\u02a9"+ + "\114\0\1\u02a9\141\0\1\u02a9\7\0\1\u02a9\12\0\1\u02a9"+ + "\114\0\1\u0511\72\0\2\u0105\1\u0512\3\u0105\1\0\10\u0105"+ + "\2\0\1\u0105\5\0\2\u0105\14\0\3\u0105\1\u0512\23\u0105"+ + "\1\0\4\u0105\5\0\12\u0105\1\0\7\u0105\11\0\6\u0105"+ + "\1\0\1\u0513\7\u0105\2\0\1\u0105\5\0\2\u0105\14\0"+ + "\23\u0105\1\u0513\3\u0105\1\0\4\u0105\5\0\12\u0105\1\0"+ + "\7\u0105\31\0\1\u0514\202\0\1\u0515\127\0\1\u02bb\131\0"+ + "\1\u0516\165\0\1\u0517\103\0\1\u0518\75\0\2\57\1\0"+ + "\1\57\1\0\2\57\2\0\6\57\1\0\26\57\1\0"+ + "\24\57\1\u0519\22\57\1\0\22\57\2\67\1\0\1\67"+ + "\1\0\2\67\2\0\3\67\1\u051a\2\67\1\0\26\67"+ + "\1\0\7\67\1\u051a\37\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\67\1\u02d9\4\67\1\0\26\67"+ + "\1\0\21\67\1\u02d9\1\67\1\114\16\67\1\114\4\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\3\67"+ + "\1\u051b\2\67\1\0\26\67\1\0\7\67\1\u051b\15\67"+ + "\1\u051c\21\67\1\0\1\u051c\23\67\1\0\1\67\1\0"+ + "\2\67\2\0\5\67\1\u051d\1\0\26\67\1\0\11\67"+ + "\1\u051d\35\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\33\67\1\u02d9\13\67"+ + "\1\0\5\67\1\u02d9\16\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u051e\23\67\1\0\13\67"+ + "\1\u051e\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u02f9\24\67\1\0\16\67"+ + "\1\u02f9\30\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\4\67\1\114\1\67\1\0\26\67\1\0\31\67"+ + "\1\114\15\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u051f\3\67\1\0\26\67\1\0\12\67"+ + "\1\u051f\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\114\23\67\1\0\13\67"+ + "\1\114\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\5\67\1\u02d9\1\0\26\67\1\0\11\67\1\u02d9"+ + "\35\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\33\67\1\u0520\13\67\1\0"+ + "\5\67\1\u0520\16\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\22\67\1\u0521\24\67\1\0"+ + "\2\67\1\u0521\21\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\10\67\1\u0522\36\67\1\0"+ + "\1\67\1\u0522\22\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\23\67\1\u0523\16\67\1\u0523"+ + "\4\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\u02d9\25\67\1\0\32\67\1\u02d9\14\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\15\67\1\u0524\23\67\1\u0524\5\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\12\67\1\u02ee\13\67\1\0\37\67\1\u02ee\7\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\22\67\1\u02f5\24\67\1\0\2\67"+ + "\1\u02f5\21\67\1\0\1\67\1\0\2\67\2\0\3\67"+ + "\1\u0525\2\67\1\0\26\67\1\0\7\67\1\u0525\37\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\15\67\1\u02ed\23\67\1\u02ed\5\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\5\67"+ + "\1\u0526\1\0\26\67\1\0\11\67\1\u0526\35\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\25\67\1\u02ee\21\67\1\0\1\u02ee\23\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\15\67\1\u014f\23\67\1\u014f\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\27\67\1\114\17\67\1\0\3\67\1\114\20\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0527\23\67\1\0\13\67\1\u0527\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0151\23\67\1\0\13\67\1\u0151\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u02f9\23\67\1\0\13\67\1\u02f9\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u014f\23\67\1\0\13\67\1\u014f\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u0528\16\67\1\u0528\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\1\67\1\u0529\4\67"+ + "\1\0\26\67\1\0\21\67\1\u0529\25\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u052a\1\0"+ + "\26\67\1\0\11\67\1\u052a\35\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\2\67\1\u052b"+ + "\23\67\1\0\13\67\1\u052b\33\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\25\67\1\u052c\21\67\1\0\1\u052c\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\1\114\25\67\1\0"+ + "\32\67\1\114\14\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\1\67\1\u052d\24\67\1\0"+ + "\16\67\1\u052d\30\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u052e"+ + "\23\67\1\u052e\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u052f"+ + "\23\67\1\u052f\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u0151\23\67\1\0"+ + "\13\67\1\u0151\1\67\1\114\23\67\1\114\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\12\67\1\114\13\67\1\0\37\67\1\114\7\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\5\67\1\u0530"+ + "\1\0\26\67\1\0\11\67\1\u0530\35\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\27\67\1\114\5\67\1\u0531\11\67\1\0\3\67"+ + "\1\114\1\u0531\17\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\10\67\1\u0532\36\67\1\0"+ + "\1\67\1\u0532\22\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\67\1\u0533\24\67\1\0\16\67\1\u0533"+ + "\30\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\12\67\1\u0534\13\67\1\0\37\67\1\u0534"+ + "\7\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\10\67\1\114\36\67\1\0"+ + "\1\67\1\114\22\67\1\0\1\67\1\0\2\67\2\0"+ + "\5\67\1\114\1\0\26\67\1\0\11\67\1\114\35\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\21\67\1\u02c8\4\67\1\0\30\67\1\u02c8\16\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\25\67\1\u0535\21\67\1\0\1\u0535"+ + "\23\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u0536"+ + "\2\67\1\0\26\67\1\0\7\67\1\u0536\37\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\15\67\1\114\23\67\1\114\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\1\67\1\u0537\24\67\1\0\16\67\1\u0537\30\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u0131"+ + "\2\67\1\0\26\67\1\0\7\67\1\u0131\37\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u0538"+ + "\3\67\1\0\26\67\1\0\12\67\1\u0538\34\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\1\67\1\u010f"+ + "\4\67\1\0\26\67\1\0\21\67\1\u010f\25\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u0539\36\67\1\0\1\67\1\u0539"+ + "\22\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u053a"+ + "\3\67\1\0\26\67\1\0\12\67\1\u053a\34\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\21\67\1\u053b\4\67\1\0\30\67\1\u053b\16\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u052a"+ + "\2\67\1\0\26\67\1\0\7\67\1\u052a\12\67\1\u0521"+ + "\24\67\1\0\2\67\1\u0521\21\67\1\0\1\67\1\0"+ + "\2\67\2\0\4\67\1\u02d0\1\67\1\0\26\67\1\0"+ + "\31\67\1\u02d0\15\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\22\67\1\u053c"+ + "\24\67\1\0\2\67\1\u053c\21\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u0131\23\67\1\0"+ + "\13\67\1\u0131\33\67\1\0\22\67\73\0\1\u053d\57\0"+ + "\1\u053e\55\0\1\u053e\143\0\1\u053f\123\0\2\u0302\11\0"+ + "\1\u0302\57\0\1\u0540\130\0\1\132\10\0\1\132\1\u0541"+ + "\4\132\1\0\2\132\1\u0541\1\132\4\u0541\1\132\1\0"+ + "\1\132\1\0\3\132\1\0\1\132\1\u0541\14\0\4\132"+ + "\3\u0541\2\132\2\u0541\6\132\1\u0541\5\132\1\0\1\132"+ + "\2\u0541\2\132\4\0\7\132\1\u0541\2\132\1\0\3\u0541"+ + "\1\132\3\u0541\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0542\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\u015f\10\0\6\u015f\1\0\4\u015f\2\u0306\1\u015f"+ + "\1\u0306\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u015f"+ + "\1\u0162\14\0\5\u015f\1\u0162\13\u015f\1\u0162\5\u015f\1\0"+ + "\1\u015f\1\u0162\3\u015f\4\0\7\u015f\1\u0306\2\u015f\1\0"+ + "\3\u0306\1\u015f\3\u0306\24\0\2\u0306\1\0\1\u0306\76\0"+ + "\1\u0306\3\0\3\u0306\1\0\3\u0306\1\u015f\10\0\1\u015f"+ + "\1\u0309\4\u015f\1\0\1\u015f\1\u0308\1\u0309\1\u015f\4\u0309"+ + "\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u015f\1\u0309"+ + "\14\0\4\u015f\3\u0309\1\u0308\1\u015f\2\u0309\6\u015f\1\u0309"+ + "\5\u015f\1\0\1\u015f\2\u0309\2\u015f\4\0\7\u015f\1\u0309"+ + "\2\u015f\1\0\3\u0309\1\u015f\3\u0309\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0172\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0543\6\141\1\u0544\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0545\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0546\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0547\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0548\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0549\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u054a\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0169\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u054b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u054c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u054d\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u054e\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0169\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u01ea\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0169\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0269\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u054f\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0544\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0550\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0551\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0310\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0552\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0553\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0554\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u017a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0555\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0552\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u032c\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0556\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0557\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0558\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0554\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0333\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0312\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0554\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0559\5\141\1\u0426\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0169\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0169\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u055a\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0169\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0317\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u055b\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u055c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u055d\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u055e\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0555\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u055f\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0560\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0561\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0562\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0563\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\73\0\1\u0564\57\0\1\u0565\7\0"+ + "\1\u0565\1\0\4\u0565\11\0\1\u0565\20\0\3\u0565\2\0"+ + "\2\u0565\6\0\1\u0565\7\0\2\u0565\15\0\1\u0565\3\0"+ + "\3\u0565\1\0\3\u0565\12\0\1\u0566\7\0\1\u0566\1\0"+ + "\4\u0566\11\0\1\u0566\20\0\3\u0566\2\0\2\u0566\6\0"+ + "\1\u0566\7\0\2\u0566\15\0\1\u0566\3\0\3\u0566\1\0"+ + "\3\u0566\73\0\1\u0567\57\0\1\u0568\55\0\1\u0568\132\0"+ + "\1\u0345\131\0\1\u0569\165\0\1\u056a\103\0\1\u056b\157\0"+ + "\1\u0349\131\0\1\u056c\165\0\1\u056d\103\0\1\u056e\127\0"+ + "\1\u056f\164\0\1\u0570\154\0\1\u0571\134\0\1\u0572\3\0"+ + "\1\u0573\151\0\1\u0574\114\0\1\u0575\1\u0576\157\0\1\u0577"+ + "\117\0\1\u0578\2\0\1\u0579\156\0\1\u057a\141\0\1\u057b"+ + "\120\0\1\u057c\3\0\1\u057d\17\0\1\u057e\66\0\1\u057f"+ + "\170\0\1\u0580\136\0\1\u0581\3\0\1\u0582\13\0\1\u0583"+ + "\121\0\1\u0584\3\0\1\u0364\133\0\1\u0585\10\0\1\u0586"+ + "\125\0\1\u0587\150\0\1\u0588\142\0\1\u0589\140\0\1\u058a"+ + "\1\0\1\u058b\140\0\1\u058c\125\0\1\u058d\153\0\1\u058e"+ + "\132\0\1\u058f\136\0\1\u0590\137\0\1\u0591\144\0\1\u0592"+ + "\137\0\1\u0593\146\0\1\u0594\5\0\1\u0595\134\0\1\u0596"+ + "\123\0\1\u0597\153\0\1\u0598\131\0\1\u0599\2\0\1\u059a"+ + "\11\0\1\u059b\127\0\1\u059c\127\0\1\u059d\15\0\1\u059e"+ + "\125\0\1\u059f\140\0\1\u05a0\140\0\1\u05a1\71\0\1\u05a2"+ + "\55\0\1\u05a2\132\0\1\u0374\131\0\1\u05a3\165\0\1\u05a4"+ + "\103\0\1\u05a5\75\0\1\132\10\0\6\141\1\0\2\141"+ + "\1\u0549\6\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\1\141"+ + "\1\u05a6\7\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\3\141\1\u05a7\2\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u05a8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0262\7\141\1\u05a9\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05aa\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\3\141"+ + "\1\u05ab\2\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\1\u05ac"+ + "\3\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\2\141\1\u05ad"+ + "\1\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\2\141\1\u05ae\6\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0400\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\6\141\1\u05af\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05b0\14\141\1\u05b1\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u05b2\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u05b3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0443"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u044f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u05b4\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u05b5\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u05b6\1\u05b7"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u05b8\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05b9\15\141\1\u05ba"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u05bb"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05ba"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u05bc"+ + "\6\141\1\u05bd\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u05be\6\141\1\u05bf\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0269\1\141\1\u05c0\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u05c1\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u05c2\2\141\1\u05c3\1\u0395"+ + "\1\u05c4\1\u05c5\1\u05c6\1\u05c7\1\u05c8\1\u05c9\1\141\1\u05ca"+ + "\1\141\1\u05cb\1\u05cc\1\141\1\u05cd\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0269\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05ce\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05cf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u05d0\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03c6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u05d1\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u05d2\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05d3\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0426\1\141\1\u05d4\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u05d5\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u041e\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u05d6\11\141\1\u05d7\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05d8\15\141\1\u044f"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u05d1"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u031a"+ + "\13\141\1\u039b\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u05d9\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u05da\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u05db\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u05dc\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u05dd\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u05de"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0269\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u05df\17\141\1\u0174\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u05e0\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0269\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0548\1\141\1\u05e1\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u05e2\3\141"+ + "\1\u05e3\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u05e4\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u05e5\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u05e6\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05e7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u05e8\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u05e9\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u05ea\4\141\1\u05eb\2\141\1\u05ec\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u05ed\3\141\1\u05ee\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05ef\6\141"+ + "\1\u05f0\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0269\4\141\1\u0269\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u05f1\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u05f2\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u05f3\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u05f4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u05f5"+ + "\2\141\1\u05f6\1\u05f7\2\141\1\u05f8\1\u05f9\1\141\1\u05fa"+ + "\1\u05fb\1\141\1\u05fc\1\u05fd\2\141\1\u05fe\1\u05ff\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0600\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0601\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0602\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0603\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0604\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0605\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0606\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u05d8\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0607\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u03c8\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\26\141\1\u0608\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0609\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u03d4\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u060a\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0396\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0549\7\141\1\u060b\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0269\11\141\1\u060c\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u060d\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u060e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u060f\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0610\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0269\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0611\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0612\11\141"+ + "\1\u018c\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u03ee\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0613\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0269\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0614"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0615"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0616"+ + "\1\u0617\10\141\1\u0618\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0619\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u061a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u061b\1\141\1\u044f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u061c\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u061d\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u061e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u061f\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0620\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0621\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0622\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u03d4"+ + "\5\141\1\u0269\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0623\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\1\u0624\6\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0392\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0625\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0626\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0627\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0628\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0629\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u062a\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u062b\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u03d4\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u062c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u062d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u062e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u062f\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0630\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0631\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0632\4\141\1\u0633\2\141\1\u0634"+ + "\6\141\1\u0635\1\141\1\u0636\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0637\2\141\1\u0638\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0639\1\u063a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u063b\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u063c\5\141"+ + "\1\u063d\6\141\1\u0386\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u063e\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u063f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0640\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0641\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0642\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0331\12\141\1\u0269\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0643\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0269\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0644\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0645\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0646\1\141\1\u0392\5\141\1\u0647\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0648\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0406\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u03ee\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0649\3\141\1\u0400\3\141\1\u05d8"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u044f"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0400"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u064a"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u064b"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u064c"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u03ec\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u064d\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u064e\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u064f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u04f9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05d9\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0650\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0651\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u04d6\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0652\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0653\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0654\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0655\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u04f9\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u03cf\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0656\3\141\1\u0657\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0658\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u031a\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u03cf\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0659\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u065a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u065b\1\u065c\1\u065d"+ + "\1\141\1\u065e\1\141\1\u065f\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0660\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0661\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0662\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0169\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0663\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0664\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0665\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0666\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0667\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0668\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0669\11\141\1\u0269\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\5\141\1\u066a\1\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u066b\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u066c\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u066d\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u066e\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u066f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0670\21\141\1\u0671\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0672\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0673\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0674\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0675\1\141\1\u0676\1\u0677\1\u0678"+ + "\1\u0679\1\141\1\u0411\1\u067a\1\141\1\u067b\1\141\1\u067c"+ + "\5\141\1\u067d\1\141\1\u0174\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u067e\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u067f\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\1\141\1\u0680"+ + "\4\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0681\1\141\1\u0682\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0683\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0684\1\0\1\u05d1\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0685\1\u0686\1\u0687\1\u0688"+ + "\1\141\1\u0689\1\u068a\1\u068b\1\u068c\1\u068d\1\u068e\1\141"+ + "\1\u0610\1\u068f\1\u0690\2\141\1\u0691\1\u0692\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0693\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0694\1\u0169\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0695\1\141\1\u0696"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0697"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0668"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u05d1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0698"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0699\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u069a\4\141"+ + "\1\u01eb\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u069b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u069c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u069d\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u069e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u069f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u06a0\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\5\141"+ + "\1\u03c3\1\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u06a1\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u06a2\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0269\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u06a3\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u06a4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u06a5\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u06a6\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u06a7\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u06a8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u06a9\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0398\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u06aa\4\141\1\u06ab\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u06ac\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06ad\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u06ae\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u06af\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06b0\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u06b1\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u031a\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0392\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0392\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u06b2\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u06b3\13\141\1\u0386\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u06b4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06b5\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u06b6\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u06b7\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u06b8\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\6\141\1\u06b9\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0411\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06ba\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u06bb\3\141"+ + "\1\u06bc\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u06bd\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u06be\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\4\141\1\u06bf"+ + "\2\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u044f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u06c0\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u06c1\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u06c2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u06c3\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u06c4\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u06c5\3\141\1\u06c6\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u06c7\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u06c8\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u06c9\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u04a4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u06ca\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u06cb\10\141\1\u06cc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u05d1\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u04f9\2\141\1\u0269"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06cd"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u06ce"+ + "\20\141\1\u0639\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u06cf\5\141\1\u06d0\3\141\1\u06d1\7\141\1\u06d2"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0269"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u06d3\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u06d4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0679\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u06d5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u05d9\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u06d6\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u06d7\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u06d8\1\0\1\u06d9\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06da\1\u06db\1\u06dc\1\u06dd"+ + "\1\u06de\1\u06df\1\u06e0\1\u06e1\1\u06e2\1\u06e3\1\u06e4\1\u06e5"+ + "\1\u06e6\1\u06e7\1\u06e8\1\u06e9\1\141\1\u06ea\1\u06eb\1\141"+ + "\1\u06ec\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u06ed\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u06ee"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06ba"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06ef"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0262"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06f0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06f1"+ + "\1\141\1\u01fa\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0409\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u06f2\22\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u06f3\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u06ef\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u06f4\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0415\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u06f5\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u06f6\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u06f7\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u06f8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u01ef\1\141\1\u06f9\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u06fa\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u05d8\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u06fb\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u06fc\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u06fd\1\141\1\u06fe"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0693"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06ff"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0700"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0701"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0702"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0703"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0704"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0705"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0706\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0707\1\u0708\1\141\1\u0709\1\141\1\u070a\1\141\1\u0393"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u03c6"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u070b\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u070c\1\u070d"+ + "\1\141\1\u070e\1\u070f\1\u0710\1\u0711\1\141\1\u0712\1\141"+ + "\1\u0713\1\u0714\1\u0715\1\141\1\u0716\1\u0717\1\141\1\u0718"+ + "\1\u0719\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u071a\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u044f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u071b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u071c\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u071d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u071e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u071f\1\141\1\u0720"+ + "\1\141\1\u0721\1\u0204\1\141\1\u0722\1\u0723\1\141\1\u0724"+ + "\1\u0725\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0726\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0727\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0728\2\141\1\u0729\1\u072a\1\u072b\1\141\1\u072c\1\u072d"+ + "\1\u072e\1\u072f\1\141\1\u0730\2\141\1\u0731\1\141\1\u0732"+ + "\1\u0733\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0734\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0735\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0736"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0737"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0738"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0739"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u073a"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u073b"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u073c"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u073d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u073e\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u03f3\11\141"+ + "\1\u073f\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0740\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0741"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0742\5\141"+ + "\1\u055b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0743\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0744\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0745\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0746"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u05e2\3\141"+ + "\1\u0747\1\141\1\u0291\3\141\1\u0748\1\u0749\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u074a\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u074b\1\141\1\u074c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0681\7\141"+ + "\1\u074d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u074e"+ + "\2\141\1\u074f\1\u0750\1\u0751\4\141\1\u0208\1\141\1\u0752"+ + "\1\141\1\u0464\2\141\1\u0753\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0754\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u024c\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0755\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0756\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0757"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u0758\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0759\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u075a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0687\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u075b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u075c\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0269\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u075d\7\141\1\u055f\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u075e\5\141\1\u075f\6\141"+ + "\1\u0760\1\141\1\u0761\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0560\7\141\1\u0762\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u040b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0763\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0485\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0764\3\141\1\u0765\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0766\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0767\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0768\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0769\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u074e\1\u076a\1\u076b"+ + "\1\u076c\1\u076d\1\u076e\1\u076f\1\u0770\1\u0771\1\141\1\u0772"+ + "\1\u0773\1\u0774\1\u0775\1\u0776\2\141\1\u0777\1\u0778\1\141"+ + "\1\u06ec\1\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\u077a"+ + "\6\141\1\132\10\0\6\141\1\0\10\141\1\u077b\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u06ee\11\141\1\u077c\11\141\1\u06ec\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u077d\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u077e\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u077f\2\141\1\u0780\1\u0387\1\u0262\3\141"+ + "\1\u0408\1\u0781\1\u0393\6\141\1\u0782\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0783\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0784\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0785\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0414\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0786\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0787\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0788\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0789\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u078a\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u078b\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u078c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u078d\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u078e\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u078f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0790\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0791\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0792\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u047b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0793\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0794\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\1\u0378\5\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\1\141\1\u0169\7\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\132"+ + "\1\0\11\132\1\0\1\u0795\1\0\3\132\1\0\2\132"+ + "\14\0\27\132\1\0\5\132\4\0\12\132\1\0\10\132"+ + "\10\0\6\141\1\0\10\141\1\u0796\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0797\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u0798\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0799\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u079a\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u079b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u079c\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0269\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u079d\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u079e\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u079f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\16\0\1\u07a0\41\0\1\u07a0"+ + "\136\0\1\u07a1\145\0\1\u07a2\137\0\1\u07a3\137\0\1\u07a4"+ + "\153\0\1\u050c\144\0\1\u07a5\124\0\1\u07a6\135\0\1\u07a7"+ + "\147\0\1\u07a8\130\0\1\u07a9\152\0\1\u07aa\134\0\1\u07ab"+ + "\3\0\1\u07ac\130\0\1\u07ad\151\0\1\u07ae\125\0\1\u07af"+ + "\162\0\1\u07b0\123\0\1\u07b1\141\0\1\u0504\140\0\1\u07b2"+ + "\152\0\1\u07b3\51\0\3\u0105\1\u07b4\2\u0105\1\0\10\u0105"+ + "\2\0\1\u0105\5\0\2\u0105\14\0\1\u07b4\26\u0105\1\0"+ + "\4\u0105\5\0\12\u0105\1\0\7\u0105\11\0\6\u0105\1\0"+ + "\1\u0105\1\u07b5\6\u0105\2\0\1\u0105\5\0\2\u0105\14\0"+ + "\7\u0105\1\u07b5\17\u0105\1\0\4\u0105\5\0\12\u0105\1\0"+ + "\7\u0105\100\0\1\u07b6\50\0\1\u07b7\203\0\1\u0516\12\0"+ + "\1\u02bb\57\0\2\u07b8\1\0\7\u0518\1\0\10\u0518\2\u07b8"+ + "\1\u0518\1\0\1\u07b8\1\0\1\u0518\1\u07b8\2\u0518\2\u07b8"+ + "\1\0\2\u07b8\1\0\5\u07b8\1\0\27\u0518\1\0\4\u0518"+ + "\5\u07b8\12\u0518\1\0\7\u0518\2\57\1\0\1\57\1\0"+ + "\2\57\2\0\6\57\1\0\26\57\1\0\31\57\1\u07b9"+ + "\15\57\1\0\22\57\2\67\1\0\1\67\1\0\2\67"+ + "\2\0\4\67\1\u02ee\1\67\1\0\26\67\1\0\31\67"+ + "\1\u02ee\15\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\27\67\1\u02c8\17\67"+ + "\1\0\3\67\1\u02c8\20\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\23\67\1\u011e\16\67"+ + "\1\u011e\4\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u052a\2\67\1\0\26\67\1\0\7\67"+ + "\1\u052a\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u02ee\4\67\1\0\26\67\1\0\21\67"+ + "\1\u02ee\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u02c8\4\67\1\0\26\67\1\0\21\67"+ + "\1\u02c8\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\15\67\1\u07ba\23\67"+ + "\1\u07ba\5\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u07bb\3\67\1\0\26\67\1\0\12\67"+ + "\1\u07bb\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u07bc\23\67\1\0\13\67"+ + "\1\u07bc\1\67\1\u0527\23\67\1\u0527\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\21\67"+ + "\1\u07bd\4\67\1\0\30\67\1\u07bd\16\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\10\67\1\u02c8\36\67\1\0\1\67\1\u02c8\22\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u07be\16\67\1\u07be\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\15\67\1\u07bf\23\67\1\u07bf\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u014f\16\67\1\u014f\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u07c0\1\0"+ + "\26\67\1\0\11\67\1\u07c0\35\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\27\67\1\u07c1\17\67\1\0\3\67\1\u07c1\20\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\25\67\1\u0137\21\67\1\0\1\u0137\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\26\67\1\0\14\67"+ + "\1\u07c2\23\67\1\u07c2\6\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\12\67\1\u0527\13\67"+ + "\1\0\37\67\1\u0527\7\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\26\67\1\0\25\67"+ + "\1\u011e\21\67\1\0\1\u011e\23\67\1\0\1\67\1\0"+ + "\2\67\2\0\3\67\1\u07c3\2\67\1\0\26\67\1\0"+ + "\7\67\1\u07c3\37\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\5\67\1\u07c4\1\0\1\67\1\u07c5\24\67"+ + "\1\0\11\67\1\u07c4\4\67\1\u07c5\3\67\1\u07c6\24\67"+ + "\1\0\2\67\1\u07c6\21\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u07c7\2\67\1\0\26\67\1\0\7\67"+ + "\1\u07c7\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\12\67\1\u07c8\13\67\1\0\37\67"+ + "\1\u07c8\7\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u07c9\23\67\1\0\13\67"+ + "\1\u07c9\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\21\67\1\u07ca\4\67\1\0\30\67"+ + "\1\u07ca\16\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u02c8\3\67\1\0\26\67\1\0\12\67"+ + "\1\u02c8\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\23\67\1\u07cb\16\67"+ + "\1\u07cb\4\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u011b\4\67\1\0\26\67\1\0\21\67"+ + "\1\u011b\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u02ee\23\67\1\0\13\67"+ + "\1\u02ee\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u07cc\23\67\1\0\13\67"+ + "\1\u07cc\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\15\67\1\u07cd\23\67"+ + "\1\u07cd\5\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u0137\23\67\1\0\13\67"+ + "\1\u0137\33\67\1\0\22\67\100\0\1\u07ce\53\0\1\u07cf"+ + "\45\0\1\u07cf\157\0\1\u07d0\40\0\1\132\10\0\1\132"+ + "\1\u07d1\4\132\1\0\2\132\1\u07d1\1\132\4\u07d1\1\132"+ + "\1\0\1\132\1\0\3\132\1\0\1\132\1\u07d1\14\0"+ + "\4\132\3\u07d1\2\132\2\u07d1\6\132\1\u07d1\5\132\1\0"+ + "\1\132\2\u07d1\2\132\4\0\7\132\1\u07d1\2\132\1\0"+ + "\3\u07d1\1\132\3\u07d1\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u07d2\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u07d3\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0426\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0412\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\3\141\1\u0269\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u07d4\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u07d5\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u07d6\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u07d7\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0632\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u07d8\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u07d9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u07da\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u07db\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0554\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u07dc\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u07dd\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u07de\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u0169\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u07df\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u07e0"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0317"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u07e1\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0317\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u07e2\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u032b\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u055c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u07e3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u07e4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u07e5\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u018f\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\100\0\1\u07e6"+ + "\140\0\1\u07e7\53\0\1\u07e8\45\0\1\u07e8\67\0\1\u07e9"+ + "\203\0\1\u0569\12\0\1\u0345\57\0\2\u07ea\1\0\7\u056b"+ + "\1\0\10\u056b\2\u07ea\1\u056b\1\0\1\u07ea\1\0\1\u056b"+ + "\1\u07ea\2\u056b\2\u07ea\1\0\2\u07ea\1\0\5\u07ea\1\0"+ + "\27\u056b\1\0\4\u056b\5\u07ea\12\u056b\1\0\7\u056b\10\0"+ + "\1\u07eb\203\0\1\u056c\12\0\1\u0349\57\0\2\u07ec\1\0"+ + "\7\u056e\1\0\10\u056e\2\u07ec\1\u056e\1\0\1\u07ec\1\0"+ + "\1\u056e\1\u07ec\2\u056e\2\u07ec\1\0\2\u07ec\1\0\5\u07ec"+ + "\1\0\27\u056e\1\0\4\u056e\5\u07ec\12\u056e\1\0\7\u056e"+ + "\60\0\1\u07ed\152\0\1\u07ee\142\0\1\u07ef\124\0\1\u07f0"+ + "\142\0\1\u07f1\134\0\1\u07f2\3\0\1\u0578\145\0\1\u07f3"+ + "\144\0\1\u07f4\77\0\1\u07f5\174\0\1\u0590\146\0\1\u07f6"+ + "\140\0\1\u0590\126\0\1\u07f7\110\0\1\u07f8\205\0\1\u07f9"+ + "\73\0\1\u07fa\165\0\1\u0590\153\0\1\u07fb\130\0\1\u07fc"+ + "\135\0\1\u07fd\155\0\1\u07fe\126\0\1\u0578\151\0\1\u07ff"+ + "\124\0\1\u0800\145\0\1\u0578\134\0\1\u0801\142\0\1\u0802"+ + "\140\0\1\u0803\154\0\1\u0590\141\0\1\u0578\120\0\1\u0804"+ + "\151\0\1\u0364\130\0\1\u0805\141\0\1\u0579\144\0\1\u0806"+ + "\141\0\1\u0807\140\0\1\u0808\153\0\1\u0809\126\0\1\u080a"+ + "\133\0\1\u080b\155\0\1\u0590\125\0\1\u080c\144\0\1\u0590"+ + "\131\0\1\u080d\144\0\1\u0805\155\0\1\u080e\116\0\1\u080f"+ + "\17\0\1\u0810\124\0\1\u057f\142\0\1\u0811\130\0\1\u0812"+ + "\75\0\1\u0813\45\0\1\u0813\67\0\1\u0814\203\0\1\u05a3"+ + "\12\0\1\u0374\57\0\2\u0815\1\0\7\u05a5\1\0\10\u05a5"+ + "\2\u0815\1\u05a5\1\0\1\u0815\1\0\1\u05a5\1\u0815\2\u05a5"+ + "\2\u0815\1\0\2\u0815\1\0\5\u0815\1\0\27\u05a5\1\0"+ + "\4\u05a5\5\u0815"; + + private static final String ZZ_TRANS_PACKED_1 = + "\12\u05a5\1\0\7\u05a5\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\2\141\1\u0816\1\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\2\141\1\u0817\3\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0818\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0819\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u081a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\1\141"+ + "\1\u081b\7\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\3\141\1\u081c\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\1\141\1\u081d\10\141"+ + "\1\0\7\141\1\132\10\0\5\141\1\u081e\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0383\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06f1"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06f1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u081f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0820\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u04c5\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0754\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0821\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0822\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0392"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0823"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0824"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0400"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0169"+ + "\1\u043e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0825\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0826\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u07d3"+ + "\11\141\1\u0827\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0828\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0829\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u082a\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u082b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u082c\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u082d\6\141\1\u082e\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u082f\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u05d2\15\141\1\u0830\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0831\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0832\7\141\1\u0833\3\141\1\u0834"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0835"+ + "\6\141\1\u0836\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0837\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0838\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u04f9\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0839\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u083a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u05d8\15\141\1\u083b\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u044f\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u083c\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u083d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0269\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0400\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u083e\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u083f\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0840\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0841\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0842\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0269\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u03d4\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0843\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0844\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0845\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0846\2\141\1\u0847\1\141\1\u060f\2\141\1\u0848\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0849\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u084a\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u084b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0840\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u084c\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u084d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u084e\15\141\1\u084f\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0830\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0850\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0687\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0679\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0851\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u03e4\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u05ea\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0852\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0853\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0854\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0855\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0856\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0857\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0858\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0859\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u085a\4\141\1\u085b"+ + "\2\141\1\u085c\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u085d\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u085e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u085f\10\141\1\u0860\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0861\5\141\1\u0862\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0863\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0864\1\141\1\u0865\15\141"+ + "\1\u0866\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0867\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0868\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0869\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u086a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u086b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u086c\2\141"+ + "\1\u086d\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u086e\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u086f\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0870"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0871\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0872\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0873\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03a8"+ + "\17\141\1\u0874\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u03d4\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0875\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0876\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0877"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0878\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0480"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0879"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u087a"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u087b"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u044f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0606"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u087c"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u087d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u087e"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0269"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u087f"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0880\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u0881\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u04f9\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0882\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0396\1\141\1\u0883\3\141\1\u0884\5\141\1\u03c1"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0885"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0886"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0887"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0888"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0889"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u088a"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u088b"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u088c"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u088d\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u088e\2\141"+ + "\1\u04c5\2\141\1\u0208\3\141\1\u0464\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u01c6\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u088f\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u069a\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u038d\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0890\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0891\3\141\1\u0892\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u0169\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0893\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0894\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0895\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0896\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0632\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0897\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0898\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0899\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u089a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u0169\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u089b\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0181\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u018f\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u089c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u089d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0749\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u089e\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05d9\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\5\141\1\u0269"+ + "\1\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0827\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u089f\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u08a0\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08a1\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08a2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u08a3\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u08a4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u08a5\1\u0679\1\u0687\3\141\1\u0679\1\141\1\u08a6"+ + "\1\141\1\u0679\1\u06e5\2\141\1\u08a7\3\141\1\u08a8\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u060b\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u08a9\1\141"+ + "\1\u08aa\1\u08ab\1\u08ac\1\u08ad\1\u08ae\1\u08af\1\141\1\u08b0"+ + "\1\u08b1\1\u08b2\4\141\1\u0753\1\u08b3\3\141\1\u08b4\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u08b5\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u05b2\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u08b6\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u08b7\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u08b8\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u01fa\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u08b9\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08ba\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08bb\1\141\1\u08bc\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03d2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u032c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0269\1\141\1\u08bd"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08be"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u08bf"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u08c0\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08c1"+ + "\3\141\1\u08c2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0269\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\u0269\6\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u08c3\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u08c4\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u08c5\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u08c6\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08c7\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u070e\10\141\1\u08c8\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u08c9\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u08ca\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0262\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u08cb\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0832\4\141\1\u08cc\5\141\1\u0318\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u08cd\5\141"+ + "\1\u08ce\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u08cf\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u08d0\3\141\1\u08d1\1\u08d2\1\u08d3\1\u08d4\5\141\1\u08d5"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08d6"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08d7"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u08d8\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08d9"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u08da"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u08db"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u08dc"+ + "\7\141\1\u041e\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u08dd\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\5\141\1\u0269"+ + "\3\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0269\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\u08de\6\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u08df\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u08e0\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u08e1"+ + "\3\141\1\u08e2\2\141\1\u0465\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u08e3\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08e4\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08e5\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u01fa\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u08e6\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0894\2\141\1\u08e7\4\141\1\u08e8\6\141\1\u08e9"+ + "\2\141\1\u06b7\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u08ea\11\141\1\u08eb\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0269\12\141\1\u08ec\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u08ed\3\141\1\u06b5\5\141"+ + "\1\u08ee\7\141\1\u08ef\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u08f0\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u03c0\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u05d8\17\141\1\u04f9\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u05d1\4\141\1\u08f1\1\141"+ + "\1\u08f2\4\141\1\u05d8\1\u0262\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u08f3\3\141\1\u08f4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03c0\6\141\1\u08f5"+ + "\4\141\1\u08f6\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08f7\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0187\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u08f8\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u08f9\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u08fa\2\141\1\u08fb\4\141\1\u060f\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u08fc\1\u08fd\1\u08fe\1\141"+ + "\1\u08ff\1\u0900\1\u0901\1\u0902\2\141\1\u0903\1\141\1\u0904"+ + "\1\141\1\u046a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0905\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0906\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u01ea\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0907\5\141\1\u0908\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0909\12\141\1\u090a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u090b\7\141\1\u08cb\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u090c\3\141\1\u090d"+ + "\11\141\1\u090e\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u090f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0910\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0911\7\141\1\u0912\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0913\6\141\1\u0914\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u044f\3\141\1\u0915\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0916\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0917\3\141\1\u0918"+ + "\11\141\1\u0919\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u091a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u091b\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u091c\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u091d\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u091e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u091f\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0920"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u060f"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0921"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0922"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0923"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u03c6"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0924"+ + "\2\141\1\u0925\4\141\1\u0926\5\141\1\u0927\1\u0928\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0929\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u092a\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u092b\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0748\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u092c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u092d\1\u092e\1\u092f"+ + "\1\u0930\1\u0931\1\u0932\1\u0933\1\u0934\1\141\1\u0935\1\u0936"+ + "\1\u0937\1\141\1\u0938\2\141\1\u0939\1\u093a\1\141\1\u093b"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u093c\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u0921\1\141\1\u0921"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u093d\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u093e\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u093f\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0940\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u04ce\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0941\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0942\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0943\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0944"+ + "\1\141\1\u0945\5\141\1\u0946\7\141\1\u0947\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0748\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0948\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0949\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0610\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\1\141\1\u094a"+ + "\5\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0269\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u03c6\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u05d1\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0269\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u094b\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0392\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u094c\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u094d\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u08e1\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u090a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u094e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u094f"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0950"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\1\u0269\6\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u06ee\1\141\1\u0951"+ + "\2\141\1\u0952\13\141\1\u0953\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0954\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0955\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0956\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0957\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0958\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0959\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u095a\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u095b\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u095c\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u095d\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u095e\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u095f\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0960\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u044f\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u07e0"+ + "\3\141\1\u090a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0961\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0962\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0963\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0964\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0965\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0966\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0967\1\u045b\1\141\1\u0968\1\141\1\u0639\1\u0969\1\u096a"+ + "\1\u096b\1\141\1\u096c\1\u096d\1\u088f\1\u096e\1\u05d8\2\141"+ + "\1\u096f\1\u0970\2\141\1\u0971\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\3\141\1\u0972\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0973\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0974\1\u0975\1\141\1\u0976"+ + "\1\u0977\1\141\1\u0978\1\u0979\1\u097a\1\u097b\1\u097c\1\141"+ + "\1\u097d\1\u097e\1\u097f\2\141\1\u0980\1\u0981\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0982\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0983\1\u0984\11\141"+ + "\1\u0985\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u03c0\1\141\1\u0986\16\141\1\u0987\1\141\1\u0988\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0989\3\141\1\u05ce"+ + "\16\141\1\u01ea\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u098a\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u098b\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u098c\4\141\1\u06b5\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u098d\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u098e\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u098f\4\141\1\u0990\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0991\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0992\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0993\1\141\1\u0994\1\141\1\u0995"+ + "\10\141\1\u0996\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0910\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03c0"+ + "\1\u0945\11\141\1\u0997\1\141\1\u0392\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0998\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0999\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0915\11\141\1\u099a\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u099b\2\141"+ + "\1\u044f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u099c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0918"+ + "\1\141\1\u05d9\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u099d\1\u099e\1\141\1\u099f\7\141\1\u09a0\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09a1\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u09a2\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u09a3\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0392\10\141"+ + "\1\u09a4\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u063d\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u09a5\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u020c\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u08f6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u09a6\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u09a7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u09a8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u09a9\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u09aa\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u09ab\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u09ac\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u09ad\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0393\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u09ae\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u04ae\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u09af\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u09b0"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u09b1\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u09b2\3\141\1\u09b3\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u09b4\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09b5\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09b6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0945\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u09b7\3\141\1\u09b8\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u09b9\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u09ba\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u09bb\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u09bc\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u09bd\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u09be\4\141\1\u01d4\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u09bf\7\141\1\u09c0\5\141"+ + "\1\u0269\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u09c1\15\141\1\u09c2\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u09c3\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u09c4\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0408\1\141\1\u09c5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\5\141\1\u09c6\1\u09c7"+ + "\3\141\1\u0269\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09c8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09c9\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u09ca\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u09cb\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u03a8\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u09cc\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09cd\11\141\1\u09ce\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u09cf\11\141\1\u09d0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u09d1\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u09d2\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u09d3\1\u09d4\1\u09d5\1\141\1\u09d6\1\141\1\u09a4"+ + "\1\u09d7\1\u09d8\1\u09d9\1\141\1\u0464\2\141\1\u03a8\1\u09da"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09db"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u023a"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u09dc"+ + "\10\141\1\u09dd\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u09de\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u09df\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u09e0"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u09e1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u09e2"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09e3"+ + "\22\141\1\0\4\141\1\132\4\0\11\141\1\u09e4\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u09e5\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u09e6"+ + "\2\141\1\u09e7\1\u072a\1\u09e8\1\141\1\u09e9\1\u09ea\1\u09eb"+ + "\1\u09ec\1\141\1\u09ed\4\141\1\u09ee\1\u09ef\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u09f0\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u09f1\11\141\1\u09f2"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u09f3"+ + "\21\141\1\u09f4\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u09f5\1\u09f6\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u09f7\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u09f8\1\141\1\u09f9\1\141\1\u09fa\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u09fb\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u09fc\1\u09fd\6\141"+ + "\1\u09fe\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u09ff"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a00\2\141\1\u0a01\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0a02\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0a03\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a04\1\u0a01\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0a05\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a06\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0a07\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u06ab\1\u0a08\10\141\1\u03c1\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0a09\3\141\1\u0a0a"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a0b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0a0c"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0a0d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0a0e\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0750\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0a0f\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0a10\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0a11\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0a12\1\u0461"+ + "\1\141\1\u0a13\2\141\1\u0a14\1\141\1\u0208\3\141\1\u0464"+ + "\1\u020c\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0a15\2\141\1\u0a16\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0a17\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0a18\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0a19\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0a1a\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0a1b\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a1c\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0a1d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u044f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u06b7\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0a1e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0a1f"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0a20\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0a21\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a22\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u0a23\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a24"+ + "\3\141\1\u064e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a25\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a26\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u044f\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0a27\1\u0a28\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0a29\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0a2a\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0a2b\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a2c\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0a2d\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u06b5\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0a2e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0a2f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a1d"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0a30\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0a31\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0a32\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0a33\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a34\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0a35\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0a36\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a37\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0a38\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0a39\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0a3a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0a3b\5\141"+ + "\1\u0a3c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a3d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u047b\1\u0a3e\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a3f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0a40\4\141\1\u0a41\3\141\1\u0a42\10\141\1\u0705"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a43\2\141"+ + "\1\u0a44\1\u0a45\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0a46\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0a47\7\141\1\u0a48\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0a49\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0a4a\4\141\1\u0a4b\1\u0a4c\6\141"+ + "\1\u0a4d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a4e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0a4f"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0754\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u06fe\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a26\4\141"+ + "\1\u03ce\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0a50"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0830"+ + "\5\141\1\u0a51\3\141\1\u09d0\3\141\1\u0386\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0a52\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0a53\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u03ce\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0a54\6\141\1\u0a55\1\u0a56\1\141\1\u0a57"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0a58"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0a59"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a5a\1\u0a5b"+ + "\1\u0a5c\1\u0a5d\1\u0a5e\1\u0a5f\1\u0a60\1\u0a61\1\u0a62\1\u0a63"+ + "\1\u0a64\1\u0a65\1\u0a66\1\141\1\u0a67\2\141\1\u0753\1\u0a68"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0a69"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0a6a"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a6b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0a6c"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0174\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0a6d\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0a6e\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0a6f\14\141\1\u0a70\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0a71\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u08bb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0a72\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0a73\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0a74\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a75\3\141"+ + "\1\u0a76\2\141\1\u0a77\6\141\1\u0a78\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0a79\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0a7a\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u0a7b\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0a7c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a7d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u0a7e\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0a7f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0a80\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\1\132\1\u0a81\4\132\1\0"+ + "\2\132\1\u0a81\1\132\4\u0a81\1\132\1\0\1\132\1\0"+ + "\3\132\1\0\1\132\1\u0a81\14\0\4\132\3\u0a81\2\132"+ + "\2\u0a81\6\132\1\u0a81\5\132\1\0\1\132\2\u0a81\2\132"+ + "\4\0\7\132\1\u0a81\2\132\1\0\3\u0a81\1\132\3\u0a81"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0461"+ + "\1\u0a82\5\141\1\u0208\3\141\1\u0464\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0a83\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a84\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a85\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u08b6\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0a86\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0a87"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0a88\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0a89"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0a8a\5\141\1\u0a8b\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\3\141\1\u0a8c\3\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u0a8d\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\20\0\1\u0a8e\60\0"+ + "\1\u0a8e\120\0\1\u0a8f\137\0\1\u07b0\143\0\1\u0a90\146\0"+ + "\1\u0a91\127\0\1\u0a92\147\0\1\u0a93\137\0\1\u07ab\104\0"+ + "\1\u0a94\164\0\1\u0a95\160\0\1\u07af\122\0\1\u0a96\151\0"+ + "\1\u07af\137\0\1\u0a97\101\0\1\u0a98\171\0\1\u0a99\157\0"+ + "\1\u0a96\115\0\1\u0a9a\156\0\1\u0a9b\55\0\4\u0105\1\u0a9c"+ + "\1\u0105\1\0\10\u0105\2\0\1\u0105\5\0\2\u0105\14\0"+ + "\22\u0105\1\u0a9c\4\u0105\1\0\4\u0105\5\0\12\u0105\1\0"+ + "\7\u0105\11\0\6\u0105\1\0\2\u0105\1\u0a9d\5\u0105\2\0"+ + "\1\u0105\5\0\2\u0105\14\0\4\u0105\1\u0a9d\22\u0105\1\0"+ + "\4\u0105\5\0\12\u0105\1\0\7\u0105\10\0\1\u0518\130\0"+ + "\2\67\1\0\1\67\1\0\2\67\2\0\1\114\5\67"+ + "\1\0\26\67\1\0\17\67\1\114\27\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\25\67\1\u0a9e\21\67\1\0\1\u0a9e\23\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\23\67\1\u02ee\16\67\1\u02ee\4\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\2\67\1\u0a9f"+ + "\23\67\1\0\13\67\1\u0a9f\33\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\5\67\1\u0aa0\1\0\26\67"+ + "\1\0\11\67\1\u0aa0\35\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\2\67\1\u0aa1\3\67\1\0\26\67"+ + "\1\0\12\67\1\u0aa1\34\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\u0aa2\5\67\1\0\26\67\1\0"+ + "\17\67\1\u0aa2\27\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\35\67\1\u0aa3"+ + "\11\67\1\0\4\67\1\u0aa3\17\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\25\67\1\u07bc"+ + "\21\67\1\0\1\u07bc\23\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u07ba\24\67\1\0\16\67"+ + "\1\u07ba\30\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u0aa4\23\67\1\0\13\67"+ + "\1\u0aa4\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u0146\2\67\1\0\26\67\1\0\7\67"+ + "\1\u0146\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u0aa5\3\67\1\0\26\67\1\0\12\67"+ + "\1\u0aa5\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u0aa6\4\67\1\0\26\67\1\0\21\67"+ + "\1\u0aa6\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u02c8\23\67\1\0\13\67"+ + "\1\u02c8\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\u0537\5\67\1\0\26\67\1\0\17\67\1\u0537"+ + "\27\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\u02ed\25\67\1\0\32\67\1\u02ed\14\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\1\u07ba"+ + "\5\67\1\0\26\67\1\0\17\67\1\u07ba\27\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u0aa7\36\67\1\0\1\67\1\u0aa7"+ + "\20\67\14\0\1\u0aa8\41\0\1\u0aa8\62\0\1\132\10\0"+ + "\1\132\1\u0aa9\4\132\1\0\2\132\1\u0aa9\1\132\4\u0aa9"+ + "\1\132\1\0\1\132\1\0\3\132\1\0\1\132\1\u0aa9"+ + "\14\0\4\132\3\u0aa9\2\132\2\u0aa9\6\132\1\u0aa9\5\132"+ + "\1\0\1\132\2\u0aa9\2\132\4\0\7\132\1\u0aa9\2\132"+ + "\1\0\3\u0aa9\1\132\3\u0aa9\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u03e9\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0aaa\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0aab\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0aac\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0aad\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0637\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0312\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0aae\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0629\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0aaf\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0169\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0ab0\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0ab1\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0ab2\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0426\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0324\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0ab3\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\3\141\1\u090a\2\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\1\141\1\u0ab4\2\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0317\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\14\0\1\u0ab5\41\0\1\u0ab5\72\0"+ + "\1\u056b\140\0\1\u056e\224\0\1\u0ab6\142\0\1\u0ab7\123\0"+ + "\1\u0364\143\0\1\u0362\135\0\1\u0590\151\0\1\u0590\130\0"+ + "\1\u0ab8\152\0\1\u0598\131\0\1\u0364\150\0\1\u0578\142\0"+ + "\1\u0ab9\122\0\1\u0aba\153\0\1\u0abb\122\0\1\u0abc\142\0"+ + "\1\u0590\141\0\1\u0abd\157\0\1\u07f5\121\0\1\u0abe\153\0"+ + "\1\u07f1\126\0\1\u0abf\137\0\1\u0ac0\145\0\1\u0578\144\0"+ + "\1\u0ac1\132\0\1\u0ac2\132\0\1\u059a\151\0\1\u0ac3\137\0"+ + "\1\u0ac4\132\0\1\u0ac5\141\0\1\u0ac6\143\0\1\u0ac7\142\0"+ + "\1\u0ac8\104\0\1\u0ac9\170\0\1\u0aca\142\0\1\u0acb\136\0"+ + "\1\u0acc\140\0\1\u0acd\134\0\1\u0ace\146\0\1\u0acf\70\0"+ + "\1\u0ad0\41\0\1\u0ad0\72\0\1\u05a5\130\0\1\132\10\0"+ + "\1\u0ad1\5\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0ad2\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0832\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0ad3\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0ad4\2\141\1\u0ad5\1\141\1\u0ad6"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\2\141\1\u0817\6\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\1\141\1\u0ad7\4\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\2\141\1\u0ad8\6\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\6\141\1\u0ad9\3\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09f1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ada"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u08f6"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0adb"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0adc\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0add\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0ade\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0adf\1\141"+ + "\1\u0ae0\1\u0ae1\1\u0ae2\1\u0ae3\1\u0ae4\1\u0ae5\1\u0ae6\1\141"+ + "\1\u0ae7\1\u0ae8\3\141\1\u0a53\1\141\1\u0ae9\1\u0aea\2\141"+ + "\1\u0aeb\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u077a\2\141\1\u0aec\3\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0aed\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0aee\1\u0aef\1\u0af0\1\u0af1\1\u0af2"+ + "\1\u0af3\1\u0af4\1\u0af5\1\u0af6\1\u0af7\1\u0af8\1\u0af9\1\u0afa"+ + "\1\u0464\2\141\1\u0afb\1\u0afc\3\141\1\u0afd\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\6\141\1\u0afe\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u03d4\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0aff\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b00\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0b01\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b02\2\141\1\u030c"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0b03"+ + "\1\141\1\u0b04\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u03d4\4\141\1\u0412\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0408\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0b05\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u0b06\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0afc\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b07\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b08\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b09\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u031a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0b0a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0b0b\5\141\1\u031a\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\3\141\1\u0a3a\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0b0c\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0b0d\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0b0e\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0b0f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0b10\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u08a5\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u06bb\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b0e\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b11\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0b12\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b13"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b14\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b15\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0b16\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b17\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0b18\6\141\1\u0b19\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0b1a\5\141\1\u0b1b\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0b1c\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0b1d\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0b1e\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0b1f\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b20\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0b21\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0b22\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0b23\7\141\1\u0b24\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b25\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0b26\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u0b27\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0b28\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0b29\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0920\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0b2a\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0b2b\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0b2c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0b2d\1\141\1\u0b2e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b2f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b30\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0b31\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b32\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0b33\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0b34\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0b35\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u0b36\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0b37\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0b38\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u06ce\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0b39\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0245\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b3a\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b3b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b3c\7\141\1\u0b33"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0b3d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0b3e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0b3f"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b40\1\141"+ + "\1\u0b41\1\u0b42\1\u0b43\1\u0b44\1\u0b45\1\u0b46\1\u0b47\1\141"+ + "\1\u0b48\1\141\1\u0b49\1\141\1\u0464\1\u0b4a\1\141\1\u0b4b"+ + "\1\u08b9\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b4c\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0b4d"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0b4e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u05c1\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0b4f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u0b50\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0b51\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0b52\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b53\2\141\1\u0b54\1\u0b55\1\141\1\u0b56"+ + "\1\u0b57\1\u0b58\1\141\1\u0b59\1\u0b5a\3\141\1\u0b5b\1\141"+ + "\1\u0b5c\1\u0b5d\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0b5e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0614\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0b5f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0b60\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0b61\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b62"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b63\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b64\5\141\1\u09d0\13\141\1\u0779\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b65\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0b66\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b67\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u03c8"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0b68\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0b69\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0b6a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0b6b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0b6c\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0b6d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0b6e\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0b6f\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0b1d\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0b70\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u04ce\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u090a\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0b71"+ + "\2\141\1\u0b72\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0b73\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0b74\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u06ee"+ + "\11\141\1\u063d\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u074f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0894"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0b75\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b76\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0b77\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b78"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0b79"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0410"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0b7a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b7b\1\141"+ + "\1\u0b7c\1\u0b7d\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0b7e\10\141\1\u0312\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0b7f\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0b80\1\u0b81\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b82\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u08d8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b83"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0750\6\141\1\u0b84\6\141\1\u0b85\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u063d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0993\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u099b\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0b86\1\u099e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u01eb\1\u0b87\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u01eb\2\141\1\u03ce"+ + "\1\141\1\u0b88\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u0705\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u060f\6\141\1\u0b89\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0b8a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0b8b\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b8c\3\141\1\u0b8d\3\141\1\u0b8e\12\141"+ + "\1\u0b8f\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u040d\5\141\1\u0b90\1\u04d8\2\141\1\u0b91\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b92\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u04c5\1\141\1\u0b93"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u044f\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u08bd"+ + "\10\141\1\u0392\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u06ce\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0b94"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u05b6"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0b95\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0262\1\141\1\u0b96\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u0174\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0464\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0b97\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0269\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u06b5\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u01fa\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0b98\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u060f\2\141\1\u060f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u0b99\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u05d6\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0b9a\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0b9b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b9c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u0b9d\6\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0b9e\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0b9f\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04ec\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u065d\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0ba0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0ba1\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u08cc\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0971\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ba2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0717\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ba3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0ba4\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0ba5\2\141\1\u0ba6\1\u0ba7\6\141\1\u0ba8\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ba9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0baa\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0bab\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0bac\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0bad\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0bae\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0baf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0bb0\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0bb1\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u03c0\1\141\1\u0bb2\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05d1\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0bb3\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0bb4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0bb5\1\u0bb6\1\u0bb7"+ + "\1\u0bb8\1\u0bb9\1\u045c\1\u04c5\1\u0bba\1\u09a4\1\u0bbb\1\u0bbc"+ + "\1\u0bbd\4\141\1\u0bbe\1\u0bbf\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\6\141\1\u0bc0\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u06b9\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0bc1\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0bc2\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0bc3\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0bc4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0bc5\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bc6\11\141\1\u0bc7\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0bc8\4\141\1\u0866"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0bc9"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u05d8"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0bca\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u08cd\1\141\1\u0bcb\3\141\1\u08f6\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0bcc\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u03c0\4\141\1\u0bcd\10\141"+ + "\1\u0269\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u08ef\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u05d8\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u08f6\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0bce\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0bcf\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u04f9\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0bd0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u05d1\4\141\1\u08f1\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0400\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0bd1\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0bd2\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0bd3\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0bd4\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0bd5\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0bd6\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0bd7\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0bd8\21\141\1\u0bd9\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0bda\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0bdb\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0bdc\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0bdd\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0bde\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0bdf\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0be0\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0be1\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0be2\14\141\1\u0be3\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0be4\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u044f\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0be5\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0be6\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0be7\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u06b3\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0be8\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0be9\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0bea\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0beb\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a34\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0bec\5\141\1\u0971\6\141\1\u0bed\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0bee\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u05d8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0bef\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0b65\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u04f9\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0bf0\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u08a6\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0bf1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0bf2\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0bf3\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0bf4\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0bf5\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u03a8\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0bf6\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0bf7\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bf8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0bf9\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bfa\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bf9\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0bfa\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0bfb"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0bfc\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0b04"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0bfd"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0bfe\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u09c0"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0bff"+ + "\1\u0c00\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c01\11\141\1\u0c02\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0c03\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0c04\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0c05\6\141\1\u0c06\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c07\7\141\1\u0c08\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0c09\1\141"+ + "\1\u0c0a\5\141\1\u06b3\2\141\1\u0c0b\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0c0c\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c0d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c0e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0c0f\10\141\1\u0c10\5\141"+ + "\1\u0c11\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c12\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0c13"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c14\2\141\1\u0c15\6\141\1\u0c16\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0c17\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0c18\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u0c19\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0c1a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0269\1\141\1\u0393\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0c1b\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c1c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c1d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c1e\1\u081f\16\141\1\u0947"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c1f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0269"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0c20"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0c21"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0c22"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0c23"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\2\141\1\u05af\4\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0200"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u08ea"+ + "\3\141\1\u03a8\1\141\1\u05d8\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0c24\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0bc5\1\u0c25\2\141\1\u0c26\3\141\1\u0c27"+ + "\1\141\1\u0c28\1\u0c29\10\141\1\u06ec\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c2a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0c2b\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0c2c\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0c2d\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0c2e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0c2f\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0c30\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0c31\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0c32"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0c33\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u06ab\11\141\1\u03c1\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u08a5\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u063d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0bc5\1\141\1\u0c34\1\u0c35"+ + "\2\141\1\u0c36\1\u0c37\1\u0c38\1\141\1\u0c39\1\141\1\u0a66"+ + "\4\141\1\u0c3a\2\141\1\u0c3b\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0c3c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0c3d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0411\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u04f9\15\141\1\u0b89\2\141\1\u0c3e\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0c3f\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c40\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0c41\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u090a\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0c42\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0c43\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0c44\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0c45\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0679\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0c46\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c47\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u08f6\2\141\1\u0392\4\141"+ + "\1\u0392\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c48\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u06b2"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u041a"+ + "\1\141\1\u0c49\1\141\1\u0c4a\5\141\1\u0c4b\13\141\1\u0c4c"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u05d1\5\141"+ + "\1\u0c4d\6\141\1\u0614\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0c4e\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0c4f\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0c50\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0c51\1\u0c52\11\141\1\u0c53\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u05d8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c54\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u04f5\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0c55\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c56\1\141\1\u0c57\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c58\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0c59\15\141"+ + "\1\u0c5a\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0c5b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0c5c\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c5d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0c5e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0c5f"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0c60\1\141\1\u0c61\6\141\1\u0bdd\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0c62\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c63\1\141\1\u0c64\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0c65\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c66\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0c67\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0c68\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0c69\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c6a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0c6b\1\141"+ + "\1\u0827\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0c6c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08a5"+ + "\12\141\1\u05b7\6\141\1\u05b7\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u05d8\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0c6d\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0c6e\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0c6f\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0c70\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0c71\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0c72\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0606\1\141\1\u0c73\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0c74\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0c75\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0c76\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u03d4\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u06f4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0c77\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0c78\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0c79\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0b91\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0c7a\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0c7b\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0916\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0b65\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0c7c\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0c7d\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0c7e\7\141\1\u0c7f\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0c80\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0c81\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u03a8\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0480\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03e4\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08bb\1\141\1\u0269\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0c82\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0872\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u081f\4\141\1\u0c83"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0610"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0aab"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0c84"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0c85"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0c86\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0c87\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0687\11\141\1\u0610"+ + "\7\141\1\u08db\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0c88\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c89\14\141\1\u0c8a\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0c8b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0c8c\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0c8d\5\141\1\u0c8e\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0c8f\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u0c90\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c91\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0c92\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c93\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c94\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0c95\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0c96\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0c97\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u03a8\2\141\1\u0c98\1\141\1\u0c99"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u05b7"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0c9a"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0c9b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0496\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c9c\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0c9d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0c9e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0c9f\5\141\1\u0ca0"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0ca1"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0ca2"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0a05"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0ca3"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\3\141\1\u0ca4\3\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0ca5"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0ca6"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0ca7"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0ca8"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u04d8"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0ca9\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0caa\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0cab\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0cac\21\141"+ + "\1\u0705\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0cad\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0cae\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u040d\6\141\1\u0caf\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0cb0\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0cb1\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0b20\1\u0a01\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0cb2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u0cb3\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0cb4\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0cb5\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0cb6\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0cb7\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0386\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cb8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0cb9\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0cba\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0cbb\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0cbc\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09f1\11\141\1\u0cab\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0cbd\2\141\1\u0cbe\1\u0cbf\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0cc0\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0cc1\1\141\1\u0cc2"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0cc3\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u09fc\1\u040d"+ + "\6\141\1\u0cc4\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0cc5\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cc6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cc7\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0cc8\3\141\1\u09d0\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0cc9\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0cca\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u03e6\7\141\1\u03e7\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0971\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0ccb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0ccc\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ccd\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0cce\4\141\1\u0ccf"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0cd0"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0cd1"+ + "\1\u0cd2\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0cd3\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0cd4\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0cd5\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0cd6\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0cd7\5\141\1\u0cd8\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cd9\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u0cda\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0cdb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0cdc\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0cdd\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03ec\4\141\1\u0cde\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0cdf\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0ce0\1\u0ce1\1\u0ce2\1\u0ce3\1\u0ce4\1\u0ce5"+ + "\1\u0ce6\1\u0ce7\1\u0ce8\1\u0ce9\1\u0cea\4\141\1\u0ceb\1\u0cec"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08f6"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ced"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0cee\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u06b7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0cef\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0cf0\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0cf1\1\141"+ + "\1\u0cf2\10\141\1\u0cf3\1\u0cf4\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0cf5\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cf6\3\141\1\u0396\6\141\1\u063d\4\141"+ + "\1\u0cf7\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0cf8\2\141\1\u0cf9\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0cfa\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u03ff\6\141\1\u0cfb\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0cfc\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0408\1\141\1\u0409\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0cfd\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0cfe\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0cff\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141"; + + private static final String ZZ_TRANS_PACKED_2 = + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d00"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d01"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d02\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0d03\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0d04"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0317"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0269"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d05"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u048b"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d06"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d07"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0d08"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d09\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d0a\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0d0b\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0d0c\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0d0d\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d0e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u08b8\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0d0f\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0d10\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d11\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d12\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0d13\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u05d8\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d14"+ + "\1\u0269\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0d15\1\141\1\u0d16\4\141\1\u0d17\2\141\1\u0d18\12\141"+ + "\1\u0d19\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03d4"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0d1a"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d1b"+ + "\7\141\1\u0208\1\u0d1c\1\u0d1d\1\141\1\u0464\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u08f6\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0d1e\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d1f\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0d20\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0d21\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0d22\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0d23\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0749\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d24\1\141\1\u0d25\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0480\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d26\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d27\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d28\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d29\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0d2a\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0d2b\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d2c\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d2d\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d2e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0d2f\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d30\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0d31\1\0\1\u0d32\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d33\2\141"+ + "\1\u0d34\1\u0a6f\5\141\1\u0d35\3\141\1\u0464\1\u020c\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d36\4\141"+ + "\1\u0a3a\4\141\1\u0d37\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0d38\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0d39\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0d3a\15\141\1\u03ec\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0d3b\5\141\1\u0d3c\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d3d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0d3e\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d3f\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0d40\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u04ec\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u06b4\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0d41\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0d42\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d43\3\141\1\u0d44"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0d45"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d46"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0d47\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0d48\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d49\7\141"+ + "\1\u0d4a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0bff\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0d4b\11\141\1\u0c02\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0d4c\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0d4d\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0d4e\1\u0d4f\15\141\1\u0d50\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d51\15\141\1\u0d52\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d53\1\141\1\u0d54"+ + "\1\141\1\u0d55\3\141\1\u06b3\2\141\1\u0d56\2\141\1\u0a66"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d57"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0d58\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d59\6\141"+ + "\1\u0d5a\6\141\1\u0d5b\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0d5c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0d5d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0d5e\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0d5f\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u03d2\5\141\1\u0b16\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0d60\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d61\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0d62\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0d63\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0d64\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u0d65\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u06b4\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0d66\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0d67\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0827"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d68\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d69\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d6a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d6b\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0d6c\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0d6d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0d6e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0d6f\1\u0d70\2\141"+ + "\1\u0d71\1\u0d72\1\u0d73\1\u0c27\6\141\1\u0d74\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u08b8\7\141\1\u0d75"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0d76\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0d77\17\141"+ + "\1\u0d78\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0d70\1\141\1\u0ada\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\1\132\1\u0d79\4\132"+ + "\1\0\2\132\1\u0d79\1\132\4\u0d79\1\132\1\0\1\132"+ + "\1\0\3\132\1\0\1\132\1\u0d79\14\0\4\132\3\u0d79"+ + "\2\132\2\u0d79\6\132\1\u0d79\5\132\1\0\1\132\2\u0d79"+ + "\2\132\4\0\7\132\1\u0d79\2\132\1\0\3\u0d79\1\132"+ + "\3\u0d79\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0d7a\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0a55\14\141\1\u06ec\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0d7b\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u05b6\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0d7c\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u05b0\2\141\1\u0d7d\11\141\1\u05b1\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d7e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u075e\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d7f\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d80\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0d81\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d82\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0d83\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\21\0"+ + "\1\u0d84\43\0\1\u0d84\141\0\1\u0d85\146\0\1\u0d86\126\0"+ + "\1\u050c\157\0\1\u07af\124\0\1\u0d87\141\0\1\u07af\154\0"+ + "\1\u0d88\67\0\1\u0d89\205\0\1\u0d87\127\0\1\u0d8a\2\0"+ + "\1\u0d8b\3\0\1\u0d8c\125\0\1\u07af\137\0\1\u0d87\141\0"+ + "\1\u0d8d\70\0\5\u0105\1\u0d8e\1\0\10\u0105\2\0\1\u0105"+ + "\5\0\2\u0105\14\0\2\u0105\1\u0d8e\24\u0105\1\0\4\u0105"+ + "\5\0\12\u0105\1\0\7\u0105\2\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\12\67\1\u02c6\13\67\1\0"+ + "\37\67\1\u02c6\7\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\20\67\1\114\5\67\1\0"+ + "\34\67\1\114\12\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u0d8f\23\67\1\0"+ + "\13\67\1\u0d8f\33\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u02f2\23\67\1\0"+ + "\13\67\1\u02f2\33\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\25\67\1\u0116"+ + "\21\67\1\0\1\u0116\23\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\12\67\1\u0d90\13\67\1\0\37\67"+ + "\1\u0d90\7\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\10\67\1\u0d91\36\67"+ + "\1\0\1\67\1\u0d91\22\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u014f\2\67\1\0\26\67\1\0\7\67"+ + "\1\u014f\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\25\67\1\u02f9\21\67"+ + "\1\0\1\u02f9\23\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\2\67\1\u07ba\23\67\1\0\13\67\1\u07ba"+ + "\33\67\1\0\22\67\15\0\1\u0d92\62\0\1\u0d92\40\0"+ + "\1\132\10\0\1\132\1\141\4\132\1\0\2\132\1\141"+ + "\1\132\4\141\1\132\1\0\1\132\1\0\3\132\1\0"+ + "\1\132\1\141\14\0\4\132\3\141\2\132\2\141\6\132"+ + "\1\141\5\132\1\0\1\132\2\141\2\132\4\0\7\132"+ + "\1\141\2\132\1\0\3\141\1\132\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0d93\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0d94\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0314\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0d95\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0d96\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0426\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0d97\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0554\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0317\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0d98\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u082e\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\15\0\1\u0d99\62\0\1\u0d99"+ + "\121\0\1\u0d9a\57\0\44\u0ab7\1\u0590\74\u0ab7\61\0\1\u0d9b"+ + "\141\0\1\u0d9c\150\0\1\u0d9d\140\0\1\u0d9e\127\0\1\u0584"+ + "\151\0\1\u080a\126\0\1\u0578\152\0\1\u0abe\132\0\1\u0d9f"+ + "\142\0\1\u0364\133\0\1\u0da0\143\0\1\u0da1\153\0\1\u0da2"+ + "\122\0\1\u0da3\2\0\1\u0580\132\0\1\u0da4\147\0\1\u0590"+ + "\153\0\1\u0da5\125\0\1\u07fb\143\0\1\u0da6\130\0\1\u0364"+ + "\150\0\1\u0da7\131\0\1\u0da8\153\0\1\u07f2\124\0\1\u0811"+ + "\75\0\1\u0da9\62\0\1\u0da9\40\0\1\132\10\0\1\u0817"+ + "\5\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0169\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0daa\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u0dab\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u098d\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0dac\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\5\141\1\u0dad\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\1\u0dae\5\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\1\u0daf\11\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u09f3\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\3\141\1\u0392\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0db0\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u08a5\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0db1\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0db2\3\141\1\u0db3\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0db4\1\u0db5"+ + "\17\141\1\u0dab\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0db6\11\141\1\u0c02\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0db7\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0db8\1\141\1\u0db9\13\141\1\u0dba\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0945\3\141"+ + "\1\u0dbb\4\141\1\u0dbc\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0dbd\5\141\1\u0dbe\7\141\1\u0dbf\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0dc0\1\141\1\u0dc1"+ + "\1\141\1\u0dc2\14\141\1\u0269\1\141\1\u0269\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0dc3\11\141\1\u0dc4"+ + "\1\u0dc5\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u01fa"+ + "\5\141\1\u0dc6\12\141\1\u0dc7\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0dc8\1\141\1\u0dc9\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0dca\1\141\1\u0dcb"+ + "\3\141\1\u04ce\1\141\1\u0dcc\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u0614\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u088f\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0392\1\141\1\u0dcd\11\141\1\u0dce\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0dcf\5\141\1\u0dd0"+ + "\1\141\1\u0dd1\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0dd2\14\141\1\u0dd3\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0dd4\1\u0dd5\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0dd6\21\141\1\u0dd7\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0dd8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0dd9\12\141\1\u0dda"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0ddb\5\141"+ + "\1\u0ddc\1\141\1\u0ddd\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0dde\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0ddf\1\141\1\u0de0\5\141\1\u0de1\3\141"+ + "\1\u0386\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0de2"+ + "\5\141\1\u0de3\7\141\1\u0de4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0de5\3\141\1\u0de6\5\141\1\u0de7"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0de8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0de9\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0dea\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0deb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0830\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0dec\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u06ce\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0ded\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u063d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0dee\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0def\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0df0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0269\11\141\1\u0b0e"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0df1"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u047b"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0df2"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0df3"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0df4"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0df5"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0b0e"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0df6"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0df7"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u03c6"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0b0d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0841\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0df8\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0df9\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0dfa\1\u0dfb\1\u0dfc"+ + "\1\u0dfd\1\u0dfe\1\u0dff\1\141\1\u0e00\1\u0e01\1\u0e02\1\u0e03"+ + "\1\u0e04\2\141\1\u0e05\1\141\1\u0e06\1\u0e07\3\141\1\u0779"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0e08\6\141"+ + "\1\u0e09\2\141\1\u0e0a\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0e0b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e0c\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0916\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e0d\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0e0e\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0e0f\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e10\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0617\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0e11"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0e12\2\141\1\u0e13\1\u0e14\6\141\1\u0e15"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e16"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u047b"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0e17"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03ec"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0e18"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e19"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e1a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e1b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e1c"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0e1d"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0e1e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0dbd\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0e1f\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0e20\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0e21\10\141\1\u0e22"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0b2f"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0e23"+ + "\11\141\1\u0392\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e23\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e24\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e25\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0e26\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0e27\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e28\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0e29\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e2a\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0e2b\1\141\1\u0e2c\1\u08ed\3\141\1\u0411\2\141\1\u0b89"+ + "\4\141\1\u06e9\2\141\1\u08ef\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e2d\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\24\141\1\u0e2e\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0e2f\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0e30\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0e31\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u0e32\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0e33\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0e34\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0e35\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e36\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e37\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u0e38\1\u0dd7\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0e39\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0e3a\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e3b\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e3c\11\141\1\u0e3d\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0e3e\3\141\1\u040d\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e3f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e40\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e41\1\141\1\u0e42"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0627"+ + "\1\u0e43\4\141\1\u0e44\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0e45\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0e46\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0921\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0e47\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0e48\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e49\1\141\1\u0e4a\1\u0e4b\1\u0e4c\1\u0e4d\1\u076f"+ + "\1\u0e4e\1\u0e4f\1\141\1\u0e50\1\u0e51\1\u0e52\4\141\1\u0e53"+ + "\1\u0e54\3\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0e55\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e56\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e57\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0e58\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0e59\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0e5a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e5b\1\141\1\u0e5c\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0e5d\6\141\1\u0e5e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e5f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0e60\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0e61\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0e62\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0e63\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0e64\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0e65\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0e66\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0e67\1\u0610\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0e68\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0e69\3\141\1\u0bad"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e6a"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03ee"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0e6b"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0e6c"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0bf6"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0e6d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e6e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0e6f\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e70\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0e71\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0e72\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0e73\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0e74\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0e75\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0e76\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0e77\3\141\1\u06ab\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0e78\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05a8\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e79\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u0e7a\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u08f6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0e7b\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0747\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0e7c\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0e7d\6\141\1\u0e7e\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e7f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0e80\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0e81\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e82\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0e83\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0e84\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u048b\1\141\1\u0627\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e85\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0e85\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0e86\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0614\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0e87\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u044f\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0e88\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0291\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u03d4\24\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u03d4\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0e89\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0e8a\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0e8b\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0200\17\141\1\u03c1\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u05d1\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0e8c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0e8d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0e8e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0e8f\1\141\1\u0e90\1\u0e91\7\141\1\u05cb\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0e92\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0e93\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0cd7\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0e94\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0e95\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e96\1\u0e97\1\141\1\u0e98\1\141\1\u0e99\2\141"+ + "\1\u0e9a\1\141\1\u0e9b\4\141\1\u0e9c\1\u0e9d\1\u0e9e\1\u0e9f"+ + "\1\141\1\u0ea0\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ea1\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0ea2"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0ea3\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0ea4\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0ea5\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0617"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ea6"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0ea7\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0ea8\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ea9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0eaa\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0eab\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u05d2\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0eac\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0ead\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0eae\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0eaf\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0bad\6\141\1\u0eb0"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0eb1"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0eb2"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0eb3"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0667"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0eb4"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0eb5"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0eb6"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0eb7"+ + "\5\141\1\u0eb8\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0eb9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0eba\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\141"+ + "\1\u0ebb\5\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ebc\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0ebd\21\141\1\u0ebe\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0ebf\2\141\1\u0ec0\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0ec1\1\141\1\u0ec2\1\141"+ + "\1\u0ec3\7\141\1\u0386\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u040d\6\141\1\u0ec4\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0ec5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0ec6\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0a26\7\141\1\u0ec7\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0ec8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\6\141\1\u0ec9\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0eca\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0ecb\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0ecc\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0ecd\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u0ece\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u06ce\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0ecf\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ed0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0449\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0ed1\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0ed2\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08cd\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0ed3\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0ed4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0ed5\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0ed6\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0ed7\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u08f4\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0ed8\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0754\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0ed9\5\141\1\u0eda\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0edb\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0edc\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u03b6\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0edd\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0ede\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0edf\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0ee0\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ee1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0ee2\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0ee3\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0ee4\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0ee5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0ee6\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0be7\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u03a8\3\141\1\u0269\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0ee7\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0b78\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0ee8\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ee9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0eea\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0afc\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0eeb\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0eec\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0821\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0eed\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0eee\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0eef\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ef0\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ef1\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0ef2\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u09d3\1\u0ef3\1\u0ef4"+ + "\1\u076f\1\141\1\u0ef5\1\141\1\u0ef6\1\141\1\u0ef7\4\141"+ + "\1\u0ef8\4\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0ef9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0efa\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\26\141\1\u0779\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0efb\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0efc\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0efd\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0efe\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0eff\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0461\4\141\1\u08a6\1\141\1\u0208\3\141\1\u0464\1\u020c"+ + "\1\141\1\u0753\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08ab\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0f00"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0f01\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f02\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u0f03\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0f04\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0480\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0f05\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0f06\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f07\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0f08\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0f09\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0f0a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f0b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f0c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f0d\7\141\1\u0f0e\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0f0f\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f10\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u0f11\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f12\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0f13\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f14\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0f15\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0f16\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f17\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0f18\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0f19\1\u0f1a\11\141\1\u0f1b\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0f1c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0f1d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0e17\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0f1e\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u05b7\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0f1f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0f20\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f21\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u03cc\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0f22\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u087a\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f23\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0f24\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f25\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0f26\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f27\21\141\1\u0705\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f28\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u040d\6\141\1\u0f29\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0f2a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0f2b\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0f2c\1\141\1\u0f2d"+ + "\1\141\1\u0f2e\3\141\1\u0f2f\6\141\1\u0f30\1\u0f31\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f32\1\u0f33"+ + "\2\141\1\u0f34\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0adb"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0f35\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u0f36\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0f37\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0f38\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f39"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0f3a\3\141"+ + "\1\u0750\15\141\1\u0f3b\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0f3c\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0f3d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0f3e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0b65\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0392\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0f3f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0ddf\3\141\1\u03c6\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0f40\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0a26\11\141\1\u0dbd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u05b7\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0d17\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u097d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u05d9\5\141\1\u0f41"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f42"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0f43\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f44\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f45\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f46\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0bb4\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0f47\2\141"+ + "\1\u09a4\1\u0f48\13\141\1\u0779\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0f49\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u044f\1\141\1\u08b8\21\141\1\u0d07\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0f4a\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0f4b\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u08b8\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0afe\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0f4c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0f4d\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0afe\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0f4e\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0f4f\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u0f50\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0f51\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0f52\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u0f53\2\141\1\u03e7"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f54"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f55"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f56"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0f57"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0f58"+ + "\15\141\1\u0f59\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0f5a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f5b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f5c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f5d\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f5e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0f5f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f60\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0eff\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0f61"+ + "\5\141\1\u0f62\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0b78\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0f63\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0f64\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\3\141"+ + "\1\u0f65\3\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0f66\4\141\1\u0f67\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f68\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0f69\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0f6a\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f6b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f6c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u0200\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f6d\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0f6e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0f6f\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0f70\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u06fe\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f71\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f72\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u0f73\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0f74\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0f75\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u0f76\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0f77\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0f78\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f79\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f7a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f7b\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u08f6\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u04b7\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0f7c\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u08cb\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0ba0\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u08f6\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0f7d\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u01c7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0485\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f7e\20\141\1\u0f7f\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0f80\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0f81\3\141\1\u0f82\1\141\1\u0f83\1\u0f84"+ + "\1\u0f85\1\u0f86\1\141\1\u0f87\1\u0f88\3\141\1\u0f89\2\141"+ + "\1\u06ec\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0f8a\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0f8b\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0f8c"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03f2\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0f8d\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0f8e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0f8f\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0f90\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0f91\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0f92\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0f93\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f94\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0f95\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0f96\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u05ba\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f97\5\141\1\u0f98\6\141\1\u0e88"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0f99"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0f9a\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0f9b\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a05\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0f9c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0f9d\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0f9e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0f9f\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0fa0\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0fa1\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0393\1\u0fa2"+ + "\2\141\1\u0fa3\1\141\1\u0fa4\1\141\1\u0fa5\3\141\1\u0fa6"+ + "\3\141\1\u0fa7\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u0fa8\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0fa9\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u047b\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0faa\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0fab\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0fac\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cdf\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0fad\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0fae"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u03e6\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0faf\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0fb0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0ccf\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0fb1\5\141\1\u0fb2\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0fb3\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0fb4\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0fb5\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0750\3\141\1\u060f\2\141\1\u060f\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0fb6\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0fb7\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u09e4\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0fb8\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0fb9\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u04f9\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0fba\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0fbb\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0fbc\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0fbd\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0fbe\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0fbf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0fc0\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0fc1\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0fc2\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0fc3\1\u0fc4\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0fc5\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0cd7\12\141\1\u0768"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0fc6"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0fc7"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0fc8"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03ec"+ + "\4\141\1\u0fc9\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0fca\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0fcb\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fcc"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0fcd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fce"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0fcf"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0fd0"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0fd1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0fd2"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0fd3"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0fd4"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0fd5"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fd6"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0fd7"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u06ce"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0fd8\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0fd9"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fda"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fdb"+ + "\6\141\1\u0fdc\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0617\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0fdd\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0fde\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0fdf\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0fe0\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0fe1\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0fe2\11\141\1\u0cab\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u09c1\21\141\1\u0fe3\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0fe4\2\141\1\u0ec0\1\u0fe5\11\141"+ + "\1\u0fe6\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u020e"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0fe7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0fe8\1\141"+ + "\1\u0fe9\15\141\1\u0fea\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0feb\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0fec\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0fed\6\141\1\u0fee\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0fef\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0cc5\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0ff0\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0ff1\7\141\1\u0269\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0ff2\6\141\1\u09d0"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0ff3"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0ff4"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ff5"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05d1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0ff6"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ff7"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ff8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0ff9"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0ffa\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0614\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ffb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0ffc\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0ffd\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ea5\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ffe\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0fff\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u069a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1000\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1001\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0269"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1002"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0eb0"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u08cb"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1003"+ + "\10\141\1\u1004\4\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u1005\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1006\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1007\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1008\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0386\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0a3e\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u06f4\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0d0b\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1009\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05d9\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u100a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u100b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u100c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u100d\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u100e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u100f\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1010\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1011\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1012\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0866\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0443\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1013\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1014\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1015\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1016\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0d27\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0bc5\11\141\1\u1017\7\141\1\u1018\1\141\1\u06ec\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u08a5\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0269"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1019\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u101a\7\141"+ + "\1\u08ea\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u101b"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u101c"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u08ab"+ + "\1\u101d\1\u101e\1\141\1\u101f\2\141\1\u1020\3\141\1\u1021"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0a3e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1022"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1023"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u03d4"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1024\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1025\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1026\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1027\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1028\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1029\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u102a\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u102b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u102c\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0d32\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d33\1\141\1\u0488\1\u102d\1\u0a6f"+ + "\3\141\1\u048b\1\141\1\u0d35\3\141\1\u0464\1\u020c\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0455\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0d65\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u102e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u102f\3\141"+ + "\1\u040d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1030\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1031\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0920\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1032\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1033\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1034\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1035\7\141\1\u0d07\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1036\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1037\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1038\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1039\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u09a6\1\141\1\u103a"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u103b\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u103c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u103d\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u103e\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u103f\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1040\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1041\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1042\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u03ce\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1043\1\u1044\1\u1045\1\141"+ + "\1\u1046\3\141\1\u1047\1\141\1\u1048\1\u1049\4\141\1\u104a"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u104b\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u104c\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u104d\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e0c\1\141"+ + "\1\u044f\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u104e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u104f\4\141\1\u1050\4\141\1\u1051\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1052\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1053\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1054\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u104d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1055\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1056\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1057\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u03d4\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1058\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1059\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0d4a\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u105a\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u05d1\15\141\1\u105b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u105c\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u105d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u0269\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u105e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u105f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05a8\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03a8\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1060\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1061\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1062\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1063\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u01ef\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1064\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1065\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1066\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1067\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1068\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1069\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u106a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u106b\3\141\1\u04c5\1\u106c\2\141"+ + "\1\u060f\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u106d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f27\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u106e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u106f\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1070\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u102f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1071\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1072\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1073\7\141\1\u0d75\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1074\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1075\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\1\132\1\u1076\4\132\1\0"+ + "\2\132\1\u1076\1\132\4\u1076\1\132\1\0\1\132\1\0"+ + "\3\132\1\0\1\132\1\u1076\14\0\4\132\3\u1076\2\132"+ + "\2\u1076\6\132\1\u1076\5\132\1\0\1\132\2\u1076\2\132"+ + "\4\0\7\132\1\u1076\2\132\1\0\3\u1076\1\132\3\u1076"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1077"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1078"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1079"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u107a"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u03ce"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u107b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u107c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u107d"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u107e"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u107f"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\22\0\1\u1080\37\0\1\u1080\136\0\1\u1081\141\0\1\u0d88"+ + "\141\0\1\u1082\140\0\1\u07af\146\0\1\u0d8b\3\0\1\u0d8c"+ + "\130\0\1\u07a7\147\0\1\u1083\130\0\1\u1084\135\0\1\u1085"+ + "\60\0\2\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\20\67\1\u02ee\5\67\1\0\34\67\1\u02ee\12\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\25\67\1\u0117\21\67\1\0\1\u0117"+ + "\23\67\1\0\1\67\1\0\2\67\2\0\4\67\1\u1086"+ + "\1\67\1\0\26\67\1\0\31\67\1\u1086\15\67\1\0"+ + "\22\67\16\0\1\u1087\41\0\1\u1087\60\0\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1088\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0317\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0426\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0169\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1089\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0216\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\16\0\1\u108a"+ + "\41\0\1\u108a\136\0\1\u108b\156\0\1\u0d9c\127\0\1\u0590"+ + "\142\0\1\u0da0\143\0\1\u07fb\151\0\1\u0590\127\0\1\u058b"+ + "\132\0\1\u108c\110\0\1\u108d\177\0\1\u108e\133\0\1\u058e"+ + "\140\0\1\u0da7\134\0\1\u108f\140\0\1\u0da0\76\0\1\u1090"+ + "\41\0\1\u1090\60\0\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1091\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0b78\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1092\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\3\141\1\u1093\2\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\4\141\1\u1094\1\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\1\141"+ + "\1\u0817\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1095\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1096\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1097\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1098\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0db9\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1099\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u109a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u109b"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u109c"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0393"+ + "\6\141\1\u109d\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u109e\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u109f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u10a0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u03d4\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u10a1\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1051\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u10a2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u10a3\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u10a4\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u10a5\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u10a6\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u10a7\12\141\1\u10a8\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u10a9\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u10aa\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u10ab\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u10ac\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0393\1\141\1\u10ad\1\u10ae\1\141"+ + "\1\u10af\1\u10b0\1\u109d\1\u10b1\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u10b2\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u10b3\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u10b4\10\141\1\u0753\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u10b5\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u10b6\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u10b7\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u10b8\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0461\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u10b9\1\141\1\u0464\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u10ba\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0ed8\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u10bb\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u10bc\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u10bd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u10be\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10bf\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10c0\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u06b2\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u10c1\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u10c2\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u10c3\3\141\1\u10c4\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u10c5\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u10c6\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10c7\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u10c8\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u10c9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u10ca\11\141"+ + "\1\u03ec\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05ba\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u10cb\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u10cc\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u10cd\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u10ce\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10cf\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10d0\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10d1\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u10d2\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0916\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u10d3"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u10d4\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05d8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u10d5\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u10d6\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u10d7\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b0e\1\141\1\u0b0d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u10d8"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10d9"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u10da"+ + "\7\141\1\u10db\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u10dc\2\141\1\u10dd\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0b15\11\141\1\u10de\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u10df\21\141\1\u09f4\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u10e0\2\141\1\u10e1"+ + "\1\u10e2\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0a46\13\141\1\u10e3\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u10e4\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u10e5\1\u10e6\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u040d\6\141\1\u10e7\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u10e8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u10e9\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u10ea\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u10eb\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u10ec\1\u10ed\4\141"+ + "\1\u0245\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10ee\2\141\1\u10ef\3\141\1\u09d0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u10f0\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u10f1\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u10f2\1\141\1\u0955\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0955\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u10f3\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u10f4\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u10f5\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u10f6\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u10f7\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u05d1\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u0e13\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u10f8\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u10f9\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u10fa\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1074\7\141\1\u10fb\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u10fc\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0392\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u10fd\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u10fe\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u10ff\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u094d\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u098b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1100\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1101\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1102\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1103\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1104\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1105\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1106"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1107\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u1108\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1109\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0895\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u110a\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u110b\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0c6e\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u110c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u110d\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u110e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u110f\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1110\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1111\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1112\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1113\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1114\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1115\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1116\2\141\1\u1117\2\141\1\u1118\2\141\1\u1119"+ + "\1\u111a\2\141\1\u111b\2\141\1\u111c\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u111d\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u111e\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u111f\1\141\1\u0464\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1120\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1121\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1122\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1123\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1124\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1125\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1126\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1127\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1128\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1129\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u112a\20\141\1\u112b"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u112c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u112d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u112e"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u112f"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1130"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1131"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1132"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1133"+ + "\6\141\1\u1134\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1135\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0f27\4\141\1\u0e6a\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1136\2\141\1\u0ec0\1\u1137\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1138\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0408\1\141\1\u1139\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u113a\3\141"+ + "\1\u113b\6\141\1\u04d8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u113c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0cc5\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10ec\2\141\1\u113d\2\141\1\u113e\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0830\11\141\1\u09d0\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u113f\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1140\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1141\11\141\1\u1142\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1143\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1144\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1145\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1146\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1147\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1148\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1149\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u114a\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u114b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u114c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u114d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0820\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0291\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u114e\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u114f\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1150\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0901\3\141\1\u0bad\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1151\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1152\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1153\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1154\13\141\1\u0269"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1155"+ + "\17\141\1\u1156\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1157"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0396\2\141\1\u0818\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1158\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u1159\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u115a\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0bad\6\141\1\u0eb0\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u115b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u03d4\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u115c\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u115d\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u115e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u115f\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1160\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1161\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1162\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1163\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u03ce\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1164\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1165\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1166\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0406\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1167\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1168\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1169\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u116a\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u116b\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u04c5\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0945\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u116c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u116d"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0"; + + private static final String ZZ_TRANS_PACKED_3 = + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0687\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u08ac\4\141\1\u116e"+ + "\1\u060f\6\141\1\u0b89\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u116f\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0d5d\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1170\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u082f\4\141\1\u1171\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1172\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1133\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b78\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1173\13\141\1\u1174\4\141\1\u1175\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1176\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1177\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1178\1\141\1\u05d1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1179"+ + "\1\141\1\u03e4\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u117a\6\141\1\u08de\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0614\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u117b\2\141\1\u0d1d\5\141\1\u117c\4\141"+ + "\1\u117d\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u117e\1\u117f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1180\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1181\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1182\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0406"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0392\7\141\1\u05d1\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1183\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0cf6\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0776\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u1184\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1185\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1186\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u0b78\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f7e\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1187\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1188\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0400\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1189\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u118a\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u118b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u118c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0c83\1\141\1\u0bad\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1074\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u118d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u118e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u118f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u03d4\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1190"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u075b"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1191"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1192"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u09a4"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1193"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\5\141\1\u1194\1\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0392"+ + "\5\141\1\u0610\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1195\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1196\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1197\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u067f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1198\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1199\3\141\1\u10c4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u119a\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u119b\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u119c\12\141\1\u0768\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u119d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u119e\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u119f\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u11a0\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\7\141\1\u11a1\2\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11a2\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u074f\6\141\1\u11a3\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u11a4\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u06fc\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u11a5\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0408\2\141\1\u0a3e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\5\141\1\u11a6\1\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u11a7\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u11a8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0916\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0916\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11a9\1\141"+ + "\1\u11aa\2\141\1\u11ab\1\141\1\u11ac\1\u11ad\3\141\1\u11ae"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u11a6"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u06b4"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11af"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0d55"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u11b0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u11b1\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u11b2\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u11b4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u11b7\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u11b8\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u06bb\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b9\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u11ba\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0a07\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u11bb\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11bc\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u068c\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u11bd\3\141\1\u104a\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0832\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0f1a\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u11be\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03d4\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u044f\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0c81\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u11bf\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u06b2\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u11c0\21\141\1\u11c1\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11c2\2\141\1\u0ec0\1\u11c3\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u11c4\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0cc4\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u11c5\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11c6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u11c7\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u11c8\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u11c9\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0c3b\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u11ca\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u03d2\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u11cb\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u11cc\2\141\1\u11cd\1\u11ce\1\u11cf\1\u09a4\1\u11d0"+ + "\1\u11d1\3\141\1\u020c\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u11d2\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u11d3\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u110d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u11d4\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u11d5\1\u11d6\7\141\1\u11d7\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u11d8\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u11d9\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u11da\1\u11d2\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11db\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0408\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u11dc\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u11dd\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u11de\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u11df\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u11e0\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u11e1\3\141\1\u11e2"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u05b7"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u11e3"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11e4"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03c8"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u11e5\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0f1b\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u11e6\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u11e7\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u11e8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11e9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u11ea\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0d65\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11eb\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u11ec\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u11b0\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u11ed\7\141"+ + "\1\u11ee\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u11ef\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u11f0"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u11f1\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u11f2\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a34\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u11f3\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11f4\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u11f5\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u11f6\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0485\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u11f7\1\141"+ + "\1\u11f8\1\u1159\1\u0901\3\141\1\u11f9\7\141\1\u11fa\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u11fb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u11fc\4\141"+ + "\1\u11fd\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u11fe\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u05d5\2\141\1\u11ff\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1200\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1201\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1202\5\141\1\u0de7\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1203\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1204\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0c2c\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1205\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1206\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1207\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1208\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1209\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u120a\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u120b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u120c\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u120d\17\141\1\u01ef\1\141"+ + "\1\u120e\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u120f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u090a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1210\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0988\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1211\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1212"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1213\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1214\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1215\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1216\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u040d\6\141\1\u04d8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1217\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1218\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1219\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u121a\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u121b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u04c5\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u121c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u121d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u121e\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u121f\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1220\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1221\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1222\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1223\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1224\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1225\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1226\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1227\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1228\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1229\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u122a\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u1212\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u122b\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u122c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u122d\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u122e\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u122f\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1230\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1231\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1232\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1233\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0c7f\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1234\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1235\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0c76\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1236\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u03d4\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1237\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1238\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u03c0\11\141\1\u0610\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0c64\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0984\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1239\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u123a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u123b\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u123c\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u123d\4\141\1\u08f6\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u123e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u123f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1240\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1241\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u027b\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0dd3\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1242\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1243\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1244\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u117b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1245\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1246\12\141\1\u1247\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1248\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1249\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u10ec\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u124a\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u124b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u124c\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u124d\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u124e\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u124f\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1250\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1251\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1252\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0a31\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1253"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1254\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1255\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1256\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0262\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1257\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1258\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1259\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u125a\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u125b\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u125c\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u11e7\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u125d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u125e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u125f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1260\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1261\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1262\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1263\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1264\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1265\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1266\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u11e7\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1267\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1268\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1269\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u126a\2\141\1\u126b\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u126c\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u126d\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u126e\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u126f\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0946\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u09a6\6\141\1\u0fda\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0699\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1270\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1271\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0204\4\141\1\u0724\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1272\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0204\1\141\1\u1273"+ + "\1\u1274\1\141\1\u1275\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1276\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1277\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1278\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1279\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u127a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u127b\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u127c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u127d\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0cd1"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u127e\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u127f\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1039\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1280\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1281\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1282\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1283\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u044f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1284\1\141\1\u0fdb"+ + "\6\141\1\u1285\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1286\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1287\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u01fa\6\141\1\u0269\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1288\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1289\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u128a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u128b\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u128c\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u031a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0fcf\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u128d\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1237\1\u01ec\3\141\1\u128e\1\141"+ + "\1\u08a6\2\141\1\u128f\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1290\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0fec\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u10fa\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1291\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1292\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1293\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u1294\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u10fb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u1295\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1296\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u03f7\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1297\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1298\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1299\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u129a\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u129b\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u116c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u129c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u129d\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u129e\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u129f\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cd7\5\141\1\u12a0\4\141\1\u0768\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u12a1\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u12a2\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u12a3\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u12a4\3\141\1\u119c"+ + "\11\141\1\u12a5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u12a6"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u12a7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u12a8\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u12a9\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u12aa\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u12ab\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u12ac\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u12ad"+ + "\2\141\1\u12ae\4\141\1\u12af\10\141\1\u12b0\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u12b1\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12b2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12b3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12b4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u031a\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u069a\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u12b5\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0480\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u12b6\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u12b7\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u12b8\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u12b9\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u12ba\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12bb\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u12bc\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12bd\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u12be\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u12bf\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u12c0\1\141\1\u12c1\5\141"+ + "\1\u06ec\1\u12c2\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0a0a\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u12c3\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u12c4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u12c5\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u12c6\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u05d9\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u12c7\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u12c8\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u12c9\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u12ca\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u12cb\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u031a\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u12cc\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u12cd\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0269"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u08f5\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u12ce\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u12cf\3\141\1\u12d0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u12d0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u12d1\1\141"+ + "\1\u12d2\1\141\1\u12d3\1\141\1\u12d4\1\141\1\u12d5\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u12d6\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u12d7\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u12d8\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u12d9\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u12da\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12db\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u12dc\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05b2\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u081f\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u12dd\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u12de\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u12df\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12e0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u12e1\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0480\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12e2\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u12e3\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u12e4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u12e5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u12e6\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u12e7\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u12e8\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u081f\10\141\1\u12e9\5\141\1\u05b7\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u12ea\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u09a6\1\141"+ + "\1\u103a\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u12eb"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u12ec"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u12ed"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u12ee\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u12ef\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u12f0\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u12f1\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u12f2\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u06f4\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u12f3\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u12f4\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0be4\1\141\1\u128c\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u12f5\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u12f6\1\141\1\u12f7\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u12f8\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u12f9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0262\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12fa\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12fb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12fc\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u12fd\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0881\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u12fe\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u12ff\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1300\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1301\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1302\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1303\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1304\15\141\1\u1305\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1306\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1307\1\141"+ + "\1\u1308\1\141\1\u1309\1\141\1\u130a\2\141\1\u11d2\1\u130b"+ + "\5\141\1\u0e81\1\u130c\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u130d\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u130e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u03c6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u130f\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1310\7\141\1\u0408\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1311\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1312\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1313\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1314\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1315\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1316\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1317"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1318\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1319"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u131a"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u131b\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u131c\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u131d\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u131e\3\141\1\u131f\3\141"+ + "\1\u1320\2\141\1\u1321\5\141\1\u1322\1\u1323\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1324\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u05d3\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u044f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1325\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u03d4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1326\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1327\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1328\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u1329\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u132a\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u132b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u132c\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\1\132\1\u0289\4\132\1\0\2\132\1\u0289\1\132\4\u0289"+ + "\1\132\1\0\1\132\1\0\3\132\1\0\1\132\1\u0289"+ + "\14\0\4\132\3\u0289\2\132\2\u0289\6\132\1\u0289\5\132"+ + "\1\0\1\132\2\u0289\2\132\4\0\7\132\1\u0289\2\132"+ + "\1\0\3\u0289\1\132\3\u0289\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u132d\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u132e\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u132f\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1330\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u03d2\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1331\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0cb8\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0406\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u048b\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\17\0\1\u1332\152\0\1\u1333\206\0\1\u07af"+ + "\117\0\1\u1334\113\0\1\u1335\173\0\1\u1336\54\0\2\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\1\67"+ + "\1\u1337\24\67\1\0\16\67\1\u1337\30\67\1\0\22\67"+ + "\17\0\1\u1338\121\0\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0312\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1339\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\17\0\1\u133a\205\0\1\u133b\142\0\1\u059a"+ + "\142\0\1\u133c\143\0\1\u07fb\127\0\1\u0598\75\0\1\u133d"+ + "\121\0\1\132\10\0\6\141\1\0\11\141\1\0\1\u0749"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u133e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\1\u133f\11\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\2\141\1\u1340"+ + "\1\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1341\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1342\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1343\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1344\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1345\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1346\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1347\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0916\4\141\1\u1348\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1349\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u134a\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u134b\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u134c\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u134d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u134e\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u134f\5\141\1\u1350\1\u1351"+ + "\10\141\1\u1352\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1353\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1354\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1355\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1356\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1357\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1358\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1359\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u135a\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u135b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u135c\10\141\1\u135d\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u135e\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0dbf\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u135f\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1360\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u0cdb\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\7\141\1\u05af\1\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\6\141\1\u0269\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0dde\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1361\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1362\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u03a8\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1363\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1364\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\6\141\1\u1365\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1366\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1367"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u06f4"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u03e4"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1368"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0e63"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1369"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u136a"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u136b\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u136c\1\u136d\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03d2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u136e\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u04ec\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u136f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1370\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1371\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1372\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1373"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1374\4\141\1\u136d\1\141\1\u1375\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1376\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1377\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1371\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u090a\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1378\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1379\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u137a\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0d27\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u137b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u137c\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0945\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0e17\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u137d\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u137e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u137f\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1380\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0a07\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1381\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1382\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1383\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1384\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1385\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0c40\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1386\1\u1387\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u120f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1388\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1389\12\141\1\u0768\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u138a\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u138b\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u067f\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u138c\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u138d\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u138e\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u119c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u138f\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1390\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1391\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1392\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1393\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0a31\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0262\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1169\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1394\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1395\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u10f4\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1396\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1397\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1398\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1399\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u139a\1\141\1\u139b\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u090e\1\141\1\u139c\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u139d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u139e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u139f\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u13a0\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u13a1\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d55\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\26\141\1\u13a2\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u13a3\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u13a4\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u040f\1\141\1\u074f\4\141\1\u13a5\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u13a6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u13a7\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u13a8\2\141\1\u13a9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u06e9\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0bcc\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0bcd\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u13aa\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13ab\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u13ac\15\141\1\u13ad"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1271"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u13ae"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13af"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1391\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u13b0\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u06b2\1\141"+ + "\1\u13b1\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u13b2"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13b3"+ + "\1\141\1\u06b2\3\141\1\u0945\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13b4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u06b2\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13b5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u13b6\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13b7\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u13b8\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u13b9\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u13ba\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13bb\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u13bc\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u13bd\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0993\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u13be\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u13bf\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u13c0\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13c1\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13c2\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u13c3\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1205\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u13c4\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u13c5\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u13c6\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u13c7\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u13c8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u13c9\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u03a8\2\141\1\u13ca\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u13cb\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u13cc\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u13cd\1\141\1\u0cca\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u13ce\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u13cf\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u13d0\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u13d1\4\141\1\u13d2"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u13d3"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u046c\15\141"+ + "\1\u03ec\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13d4\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13d5\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u13d6\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u13d7"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u039f"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u13d8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u13d9"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u13da"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u13db"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u13dc"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0f38\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u046a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13dc\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u13dd\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u13de\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u13df\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u046a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u13e0\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u13e1\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u13e2\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u13e3\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u13e4\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u13e5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u13e6\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u13e7\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1023\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u13e8"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13e9\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u13ea"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u08fc\3\141\1\u08ff"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u13eb\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u08c8\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u08ca"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0bad\1\141"+ + "\1\u063d\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u13ec\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13ed\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u13ee\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u13ef\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u13f0\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13f1\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u13f2\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13f3\15\141\1\u13f4\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u13f5\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u13f6\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1023\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u13f7\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u13f8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u13f9"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u13fa\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13fb"+ + "\1\141\1\u13fc\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0d02\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u09d0\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0ba8\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u13fd\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u13fe\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e88\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u03c6\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u13ff\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1400\7\141\1\u1401\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1402\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1403\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1404\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1405\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1406\2\141\1\u120e\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1407\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u10c4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1408\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0d1d\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05d2\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1409\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u140a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u140b\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u140c\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u140d\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u140e\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u140f\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1410\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1411\3\141\1\u1412\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1413\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1414\11\141\1\u1415\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1416\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1417\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1418\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1419\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u141a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0291\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0392\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f11\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u141b\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u141c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u141d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0b1e\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u141e\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u03a8\1\141\1\u05d8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u1391\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u141f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u119e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1420\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1421\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1422\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1423\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0760\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1424\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1425\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1426\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1427\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\4\141\1\u1428"+ + "\4\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1429\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u142a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u12d7\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u142b\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\4\141"+ + "\1\u0269\2\141\1\132\10\0\6\141\1\0\10\141\1\u03e7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u08f6\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u142c\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u142d"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u142e"+ + "\11\141\1\u142f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1430\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1431\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1432\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u08f6\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u03ec\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0a31\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1433"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1434\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1271\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1435\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1436\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1437\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1438\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1439\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0bed\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u143a\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u143b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u143c\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u143d\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u143e\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u143f\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1440\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1441\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1442\3\141\1\u1443\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1444\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1445\1\141\1\u116d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1446\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1447\1\u1448"+ + "\1\141\1\u1449\1\u05b0\3\141\1\u144a\1\141\1\u144b\1\u144c"+ + "\1\u0610\2\141\1\u144d\1\141\1\u144e\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1023\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u144f\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1450\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u0df3\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1451\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1452\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1453\5\141\1\u0ddc\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12f6\1\141\1\u1454"+ + "\10\141\1\u1455\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1456\3\141\1\u1457\6\141\1\u04d8\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1458\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u08ce\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u09a3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u11e7\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0318\5\141\1\u1459"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u145a\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u145b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u145c\5\141\1\u145d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u145e"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u145f\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u11df\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0f05\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0610\12\141\1\u090a"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1460"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u09a9"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u03c8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0610"+ + "\12\141\1\u1461\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1462\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0dc7\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1463\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1464\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1465\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1466\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1467\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1468\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1469\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u146a\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0b78\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u146b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u146c\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u146d\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u04f9\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u146e\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0d07\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u146f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u03a8\1\141\1\u05d8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u046a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1470\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1471\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1472\4\141\1\u1473\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u05d5\2\141\1\u1474\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1475\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1476\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1477\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1478\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1479\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u147a\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u147b\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u147c\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u147d\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u147e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u147f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1480\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1481\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1482\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1483\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1484\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1485\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1486\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0667\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1487\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0b20\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0b91\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u05ea\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1488\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0916\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u11af\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1489\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u148a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u148b\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u148c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u148d\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0614\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u148e\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\5\141"+ + "\1\u0269\3\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\5\141\1\u0269\1\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0cf6\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0269\22\141\1\u148f\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u0639\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1490\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1491\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u1492\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1493\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0bca\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1494\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1495\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1496\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1497\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1498\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1499\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u149a\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u149b\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u149c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0868\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u149d\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u149e\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u11af\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u149f\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14a0\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u14a1\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14a2\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u08a6\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0971\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u14a3\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0a1d\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14a4\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u14a5\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\1\u0269\4\141\1\u0269\1\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0411\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u14a6\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u14a7\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u14a8\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1234\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0afc\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u14a9\15\141\1\u14aa\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u14ab\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u14ac\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u14ad\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u047b\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u14ae\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u14af\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u14b0\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u14b1\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u14b2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u14b3\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u14b4\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u14b5\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u14b6\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0d37\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u04c5\1\u06bb\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u14b7\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u14b8\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u14b9\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u11a8\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0411\10\141\1\u097d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u14ba\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u14bb\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1466\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u14bc\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u14bd\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14be\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u14bf\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u14c0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u14c1\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u14c2\5\141\1\u0455\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14c3\6\141"+ + "\1\u09bd\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u14c4\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u14c5"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\3\141\1\u14c6\3\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u14c7"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0a05"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14c8"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14c9"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u14ca"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0397"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14cb"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u14cc"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u14cd"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u14ce"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u14cf\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u14d0\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14d1\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u09e4\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u14d2\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u14d3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ddf\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u09e2\6\141\1\u14d4"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u14d5"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0e12"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u14d6"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u14d7"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u14d8\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u14d9\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u14da\11\141\1\u12db"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14db"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14dc"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u14dd\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14de\6\141"+ + "\1\u0fdc\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u14df\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u14e0\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u14e1\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u14e2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u14e3\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u14e4"+ + "\7\141\1\u1284\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u06b2\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u14e5\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u14e6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u14e7\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u14e8\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u03ce\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u14e9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u14ea\11\141\1\u0dda\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u14eb\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08f6\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u14ec\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u14ed\4\141\1\u14ee\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0fd5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u14ef\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u14f0\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u14f1\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u14f2\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u14f3\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u14f4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u14f5\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u14f6\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u14f7\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u063d\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0971\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u14f8\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u14f9\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u14fa\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08f7\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u06a1\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u14fb\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u14fc\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a75\1\u14fd\2\141\1\u14fe\1\141\1\u14ff\1\u1500"+ + "\2\141\1\u0464\3\141\1\u1501\1\141\1\u1502\1\u1503\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1504\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1505\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1506\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1507\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1508\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1509\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u150a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u150b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u150c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u150d\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u150e\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u150f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1510\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1511\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1512\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1513\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1514\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0ccf"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1515\4\141\1\u060f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0681\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u047b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u1516\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0a1d\1\141\1\u1517\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1518\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1519\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u151a\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u151b\6\141\1\u151c\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u151d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u151e\1\141\1\u151f"+ + "\1\u1520\1\u1521\1\141\1\u1522\1\u1523\2\141\1\u0464\1\u020c"+ + "\1\141\1\u1524\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1525\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1526\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1527"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1528\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1529\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u152a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u152b"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u152c\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u152d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u152e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u152f\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1530\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1531\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1532\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1533\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1534\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1535\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1536\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1537\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1538\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1539\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u153a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u153b\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u153c"; + + private static final String ZZ_TRANS_PACKED_4 = + "\1\141\1\u0687\5\141\1\u08a6\3\141\1\u153d\5\141\1\u153e"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u153f\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1540\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ada\7\141"+ + "\1\u1541\1\141\1\u05b7\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1542\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1543\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1544\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1545\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1546\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0920\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1547\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1548\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u03a8\2\141\1\u1549\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u05e4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u154a\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u154b\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0dbd\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u154c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u154d\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u154e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u154f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u03ce"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u1550\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1551\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1552\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10b7\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0820\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1553\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1554\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1555\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1556\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1557\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1558\17\141\1\u1559\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u155a\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u155b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u155c\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u155d\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u155e\3\141\1\u155f\1\u1560\1\141\1\u1561\2\141"+ + "\1\u1013\1\141\1\u1562\1\u1563\2\141\1\u1564\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1300\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1565\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u03d4\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1566\1\141\1\u1567\2\141\1\u155c"+ + "\1\141\1\u1568\1\141\1\u1569\1\u156a\2\141\1\u156b\1\141"+ + "\1\u156c\1\141\1\u156d\1\u156e\1\141\1\u08db\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u156f\5\141\1\u1469\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1570\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0408\6\141"+ + "\1\u090a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1571"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1572"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1573"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1574\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1575\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1576\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1577\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1578\1\u1579\3\141\1\u157a"+ + "\3\141\1\u157b\10\141\1\u157c\1\141\1\u08db\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u157d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u157e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u157f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0916\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1580\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u09e7\1\u08ab\1\u1581\1\u0ce4"+ + "\3\141\1\u1582\3\141\1\u1583\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1584\1\u045b\1\141\1\u11e9\1\u1585\1\u075e"+ + "\1\u0969\1\141\1\u1586\1\141\1\u1587\1\u1321\1\u1588\1\141"+ + "\1\u05d8\2\141\1\u1589\1\u0e8f\2\141\1\u0971\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u158a\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u158b\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u158c\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u158d\3\141\1\u158e\1\141"+ + "\1\u158f\1\141\1\u1590\1\141\1\u05cb\2\141\1\u1591\1\u1592"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1593"+ + "\5\141\1\u1594\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1595\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0df4\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1596\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1597\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1598\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1596\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1599\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0ed9\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u159a\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u159b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u046a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u159c\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0f25\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u159d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u159e\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0269\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u159f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u15a0\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u15a1"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15a2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15a3\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u15a4\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\65\0\1\u15a5\140\0\1\u1082\133\0\1\u15a6\152\0"+ + "\1\u15a7\46\0\2\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\15\67\1\u0117\23\67\1\u0117"+ + "\5\67\1\0\22\67\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u0d98"+ + "\1\0\7\141\65\0\1\u0ab7\133\0\1\u15a8\60\0\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15a9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\3\141"+ + "\1\u0817\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\1\141\1\u081b\4\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u15aa\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u15ab\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u15ac\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0d08\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u15ad\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0e92\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u03ec\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u15ae\1\141\1\u15af\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0a1d\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u15b0\1\141\1\u06e9"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15b1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15b2"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15b3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u15b4"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u03c6\14\141"+ + "\1\u15b5\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15b6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0405\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u15b7"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15b8"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15b9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15ba"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u15bb"+ + "\1\141\1\u15bc\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u15bd\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u15be\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u15bf\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u15c0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u15c1\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u15c2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u15c3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u15c4\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u15c5\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u15c6"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u15c7\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u15c8\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0b89\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u15c9\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\u15ca"+ + "\6\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0f6e\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u15cb\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u15cc\6\141\1\u15cd\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u15ce\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u08f6\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141"+ + "\1\u15cf\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u15d0"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u031a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u15cc"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\1\141\1\u15d1\5\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15c9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15d2"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u15d3"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15d4\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u15d5\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u14bc\1\141\1\u15d6\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15d7\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u15d8\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u15d9\7\141\1\u0627"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15da"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u15db"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0cca"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15dc"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u15dd"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u15de\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15df\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u15e0\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u14bc\10\141"+ + "\1\u063d\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u15e1\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u15e2\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u15e3\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u15e4\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u15e5"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u15e6"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u15e7"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u15e8\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15e9\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0bf1\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15ea\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15eb\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15ec\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u08ea\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u08ed\3\141"+ + "\1\u0411\12\141\1\u08ef\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u15ed\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u15ee\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u0971\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u15ef\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0840\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0d94\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u15f0\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u15f1\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u15f2\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u15f3"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u15f4\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15f5\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15f6\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u15f7\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u15f8\1\141\1\u15f9"+ + "\1\u15fa\1\141\1\u09a4\1\141\1\u15fb\1\u15fc\1\141\1\u15fd"+ + "\1\u15fc\5\141\1\u15fe\1\u15ff\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0e23\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1600\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1601\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1207\3\141\1\u1602\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1603\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1604\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1605\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1606\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0239\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1607\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1608\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1609\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u160a\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u160b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u160c"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u160d"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u160e"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u160f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1610"+ + "\11\141\1\u1611\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1612\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1613\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1614"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1615\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1616\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1617\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1618\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1619\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15e9"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1615"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u161a\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u161b\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u161c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u161d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u161e\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u161f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1620\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u06f4\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0408\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1621\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1622\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1623\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1624\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1625\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1626\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1627\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1628\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1629\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u162a"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0694\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u162b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u162c\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u162d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0610"+ + "\11\141\1\u0779\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u162e\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13dc\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u162f"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11a7"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1630"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1631\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1632\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1633\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1634\1\u1635\3\141"+ + "\1\u1274\1\u0f85\1\u1636\2\141\1\u1637\1\u13ad\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1638\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u040d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u14b2\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0de7\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u03d4\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1639\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u163a\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u06ee\2\141\1\u163b\2\141\1\u163c"+ + "\1\u163d\2\141\1\u163e\3\141\1\u163f\1\u1640\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1641\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1642\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1643\5\141\1\u1644"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u03cd\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1645\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0e8b\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1646\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u03d4\20\141\1\u08f6\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1647\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1648\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1649\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u164a\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e8b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u164b\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u164c\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u164d\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u164e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u164f\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1650\11\141\1\u1651"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1652\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1653\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1654\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1655\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0eb4\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u117c\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1656\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1657\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1658\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1659\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0d27\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0916\4\141\1\u0269\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u044f\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u165a\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u165b\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u12ec\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u165c\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u073d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0269\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u165d\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0b78\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u10d7\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u165e\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u165f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0a3e\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1660\11\141\1\u1661\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1662\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1663\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u038d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0eb4\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1664\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1665\1\141\1\u1666"+ + "\14\141\1\u1667\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1668\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u075e\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u074f\2\141\1\u045c\12\141\1\u0fd6\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1669\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u166a\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u166b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u166c\12\141\1\u0d02"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0eb9\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u166d\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u166e\1\141"+ + "\1\u166f\7\141\1\u0d02\2\141\1\u04f9\2\141\1\u1670\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1671\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u04f9\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1672\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1673\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1674\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u090a\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u119c\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1675\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u1676\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1677\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1678\4\141\1\u0a3a\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1679\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u167a\5\141\1\u167b\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u167c\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u167d\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u167e\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u167f\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1680\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u157b\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0fcc\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1681\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u08cb\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1682\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0b8b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1683\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1684\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1685\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1686\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1687\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1688\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u1689\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u168a\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u168b\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u168c\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u168d\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u168e\10\141\1\u0269\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u168f\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1690\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u09e1\1\141\1\u1691\1\141"+ + "\1\u1692\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1693\7\141\1\u0b98\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1694\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1695\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1696\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1697\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1698\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0392\3\141\1\u1699\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u169a\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u169b\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u169c\4\141\1\u0a3a\4\141\1\u169d"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u169e\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u169f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u16a0\11\141\1\u03ec"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16a1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u16a2"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0b1b"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u065d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u16a3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0993\6\141"+ + "\1\u16a4\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u16a5\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u16a6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u16a7\3\141\1\u16a8\1\u16a9\1\u16aa\2\141\1\u16ab\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0f2a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16ac\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0c80\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16ad\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16ae\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u05cb\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u16af\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u03e4\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u16b0\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u16b1\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u16b2\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u16b3\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u16b4\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u145b\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u16b5\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u16b6\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u16b7\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u16b8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u16b9\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u16ba\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u16bb\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08a5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u16bc\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u16bd\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u16be\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u16bf\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u16c0"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u16c1\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u16c2\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u16c3\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u16c4\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u16c5\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u16c6\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u16c7\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u16c8\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u16c9\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u16ca\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d33\1\u16cb\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u04f9\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u16cc\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u16cd\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0383\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u131a\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u16ce\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u16cf"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0a31\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u16d0\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u16d1\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0269"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u16d2"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u16d3\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u16d4\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u16d5\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u16d6\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u16d7\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u16d8\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u16d9\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0245\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u16da\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u16db\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u16dc\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12a9\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u16dd\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u16de\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u16df\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0b05\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u16e0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0610\5\141\1\u01ef"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16e1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u16e2"+ + "\5\141\1\u16e3\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u16e4\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u16e5\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u16e6\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u16e7"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u16e8"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16e9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u16ea"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0bf1"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u16eb\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u122a\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16ec\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u16ed\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u16ee\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u16ef\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u16f0\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0c3d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u16f1\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0681\7\141\1\u05cb\2\141\1\u0fe0\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c71\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u04ce\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u16f2\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u16f3\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16f4\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16f5\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03ce\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u16f6\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u16f7\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u16f8\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u16f9\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16fa\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16fb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u03a4\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u16fc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u16fd\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u16fe\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u16ff\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1700\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1701\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1702\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1703\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1704\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1705\7\141\1\u0fd6\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1706\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0916\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1707\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1708\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1284\1\141\1\u1709\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u170a\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u170b\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1399\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u170c\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u170d\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0fec\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u170e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u127f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u170f\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1710\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1711\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0945\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u12fc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1712\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1713\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u06ec\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1190\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u153c\1\141\1\u1714\5\141"+ + "\1\u1715\3\141\1\u0610\5\141\1\u1716\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1717\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1718\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1719\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u171a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u171b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u171c\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u171d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0b17\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u171e\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u171f\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1720\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1721\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1722\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1723\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e0d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1724\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1725\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1726\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1727\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1728\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u041a\3\141\1\u0174\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1729\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u172a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u172b\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u172c\14\141\1\u172d\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u172e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\7\141\1\u172f\2\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1730\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1213\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1731\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u043e\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1732\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1733\23\141\1\u1734\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1735\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1736\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0e8b\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0245\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u150f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1186\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1737\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1738\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1739\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u173a\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u173b\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03ec\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u173c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u173d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u173e\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u173f\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1740\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1741\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1742\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1743\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1744\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u01ef\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0754\15\141\1\u1745\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1746\1\141\1\u1747\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1748\3\141\1\u040d"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0b8d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1749"+ + "\1\u174a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u0e0d\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u174b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0c83\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u174c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1274"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u174d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u174e"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u174f"+ + "\4\141\1\u1750\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0614\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0174\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1751\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1752\3\141\1\u1753\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1754\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1755\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1756\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1757\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1758\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1759\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u175a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u175b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u047b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u175c"+ + "\1\141\1\u0687\5\141\1\u08a6\3\141\1\u153d\5\141\1\u153e"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u175d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0614\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0606"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u175e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u175f"+ + "\2\141\1\u1760\7\141\1\u05cb\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1761\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1762\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e0d\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u046c\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1763\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0b78\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0f38\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1207\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1764\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1218\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0c3b\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0821\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1765\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1766\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1767\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1768\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1769\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u176a\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u09a2\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u176b\3\141\1\u05b7\2\141\1\u05b7\6\141\1\u176c\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u176d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u176e\1\0\1\u05b7\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1434"+ + "\1\u176b\2\141\1\u08ae\1\u05b7\1\141\1\u176f\1\u1770\6\141"+ + "\1\u1771\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1772\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1773\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1774\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1775\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1776\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1777\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u090a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u152c\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u0e7e\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1778\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1779\7\141\1\u177a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u177b\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u177c\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u177d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u177e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u110d\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u177f\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1780\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1781\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1782\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1783\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1784\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1785\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1786"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1787\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1788\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1789\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u178a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u178b\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u178c\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u178d\13\141"+ + "\1\u047b\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u12fd\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u178e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u178f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1790\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1791\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1792"+ + "\5\141\1\u1793\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1794\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1795\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1787"+ + "\12\141\1\u1796\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1797\1\u1798\1\u1799\2\141\1\u0396\4\141\1\u179a\1\u179b"+ + "\6\141\1\u179c\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\3\141\1\u0aec\3\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u179d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u179e\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u179f\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u17a0\2\141\1\u17a1\1\u064e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\6\141\1\u0cc4\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u17a2\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u05d1\12\141"+ + "\1\u044f\4\141\1\u045f\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\26\141\1\u06b5\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u06b2\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u17a3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u05d1\4\141\1\u17a4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u04ce\11\141\1\u044f\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06b5\5\141\1\u17a5\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ada\1\141"+ + "\1\u17a6\1\141\1\u17a7\10\141\1\u17a8\1\u17a9\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05a8\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u17aa\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u17ab\4\141\1\u17ac\10\141"+ + "\1\u17ad\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u17ae\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u17af\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u17b0\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u17b1\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17b2\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17b3\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u17b4"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u17b5\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u17b6"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17b7"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u13ee"+ + "\1\u17b8\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13ee\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17b9\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17ba\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u17bb\2\141\1\u06ab\1\u17bc\1\u11b0\4\141\1\u05cb\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17bd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17be\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u17bf\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u17c0\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u17c1\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u17c2\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u17c3\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u17c4\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u107d\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\56\0\1\u17c5\3\0\1\u17c6\157\0"+ + "\1\u17c7\117\0\1\u17c8\146\0\1\u0590\5\0\1\u07f1\44\0"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17c9"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u17ca\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u17cb\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0f01\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u17cc\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u17cd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u17ce\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0915\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u17cf\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u17d0\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u17d1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1355\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u17d2\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u03c6\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u0fd6\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u17d3\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u17d4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u040f\1\u17d5\1\u17d6\1\u17d7"+ + "\1\141\1\u17d8\1\141\1\u17d9\1\141\1\u17da\6\141\1\u17db"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17dc"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17dd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17de"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u047b"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u103b"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u17df"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u17e0"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17e1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1300"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u17e2"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1300"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u17e3"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0ed9"+ + "\10\141\1\u17e4\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u17e5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u17e6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\u17e7"+ + "\6\141\1\132\10\0\6\141\1\0\10\141\1\u17e8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0393\5\141\1\u17e9\1\u0f85\3\141\1\u17ea\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u17eb\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u15d5\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0cb8\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u17ec\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u17ed\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u17ee\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\2\141\1\u0269\4\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u136c\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u17ef\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u17f0\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u17f1\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u17f2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u17f3\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u17f4\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u17f5"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u152c"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u17f6"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17f7"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u17f8"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u17f9"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u17fa"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u17fb"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0245"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u17fc\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u17fd\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17fe\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u17ff\3\141\1\u149b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1800\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1801\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u103a\14\141\1\u1802"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1803\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u095f\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0245\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1804\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1805\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1806\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u065d\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1598\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u14e7\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1807\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1808\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1809\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u180a\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u180b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u180c\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0945\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0dd2\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u180d\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u180e\15\141\1\u05ba\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u180f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u102f\12\141\1\u1810\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1811\3\141\1\u0dc8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1812\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0eb4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0c30\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1813\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1814\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1815\12\141\1\u1816"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1817"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1818\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1819\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0b89\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1608\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1207\11\141\1\u1061\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u181a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u181b\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u181c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u181d\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u181e\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u181f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1820\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1821\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u181d\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1822\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1823\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1824\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1825\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1826\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u15e9\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1827\1\141\1\u1828\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1829\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u182a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u182b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1580\11\141\1\u1823\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u182c\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u182d\3\141"+ + "\1\u182e\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u182f\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1830\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1831\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1832\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u03ce\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1833\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1834\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1835"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1836"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1837\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1838\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1839\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u097a\1\141"+ + "\1\u183a\2\141\1\u183b\4\141\1\u183c\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0385\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u14b2\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u11a7\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1636\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u183d\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u11a7\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u183e\11\141\1\u04a4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u183f\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1840\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1841\1\141\1\u06b7"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1633"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1842\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u158b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1843\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1844\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1845\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1846\1\u1847\6\141"+ + "\1\u1848\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1849\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u184a\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u12d7\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u184b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u184c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u184d"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u184e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u184f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1850"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1492\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1851\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1852\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u13aa\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1853\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1854\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u11a8\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u14d4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1855\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u03e7\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1856\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1857\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1858\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1859\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u185a\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u185b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u01c7\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u165c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u185c\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u185d\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u185e\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u185f\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0245\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u06ee\1\u1860\20\141\1\u1861\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1862\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1863\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1864\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u10cf\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1865\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1866\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1867\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1868\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1869\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u186a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u186b\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u186c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u186d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u186e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u186f\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1870\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1871\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1872\1\u065b\1\141\1\u0901\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1873\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1874\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u1875"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1876\6\141\1\u1877\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1878\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1879\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u187a"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u187b\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u187c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u187d\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u187e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u187f"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1880"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0cd7\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1881\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1882\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1883\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u14e7\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1884\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1885\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1886\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1887\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1888\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1889\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u188a\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u103a\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u188b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u188c\4\141\1\u060f\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u188d\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u188e\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u188f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1890\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\24\141\1\u167e\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1891\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1892\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1893\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u10aa\1\141\1\u063d\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1894\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1895\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u046a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0411\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1896\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u046a\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0921\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1897\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1898\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0b5e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1899\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u189a\5\141"+ + "\1\u046a\3\141\1\u189b\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u0836\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u189c\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u189d\5\141\1\u189e\2\141\1\u189f\1\u18a0"+ + "\2\141\1\u18a1\2\141\1\u18a2\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u18a3\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0d4a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u18a4\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0945\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u18a5\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u18a6\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u18a7"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0393"+ + "\1\u0a3a\1\141\1\u155c\1\141\1\u12ec\1\141\1\u18a8\10\141"+ + "\1\u18a9\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u18aa\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a66"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u075e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0b24"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18ab"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u18ac\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u18ad\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u18ae\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u18af\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u10d6\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u18b0\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u18b1\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u18b2\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u18b3\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u18b4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u18b5\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u18b6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u18b7\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u18b8\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u18b9\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u16c4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u18ba\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u18bb\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u18bc\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u18bd\3\141\1\u18be\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u18bf\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u18c0\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18c1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u06f4\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18c2\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u18c3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18c4\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u18c5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u18c6\4\141\1\u18c7\7\141"+ + "\1\u18c8\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u03c0\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u18c9\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u18ca\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141"+ + "\1\u18cb\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18cc"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u18cd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u18ce"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u18cf\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u18d0\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u18d1\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0c40\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u18d2\22\141\1\u1213\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u18d3\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u18d4\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18d5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18d6\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u18d7\1\u18d8\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18d9\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u18da\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u18db\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u18dc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u18dd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18de\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18df\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u18e0\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u18e1\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u18e2\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0d73\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u18e3\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cf6\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0c41\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u18e4\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u18e5\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u18e6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u18e7\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u070e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u18e8\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1411"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u18e9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u18ea"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u18eb"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u18ec"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18ed"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u18ee"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u18ef"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18f0"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u18f1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u18f2\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u14e4\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0687\5\141\1\u08a6"+ + "\3\141\1\u0610\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u18f3\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u18f4\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0b65\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1485\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u18f5\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u175c\1\141\1\u18f6\5\141\1\u1715\3\141\1\u0610\5\141"+ + "\1\u1716\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0fec"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e8f\2\141"+ + "\1\u1760\7\141\1\u05cb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u18f7\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u14e7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u12f1\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1396\4\141\1\u0768\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u18f8\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u139d\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u05e2\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u18f9\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u064e\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u18fa\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0993\11\141\1\u06b3\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u18fb\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0656\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u18fc\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u18fd\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u18fe\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u18ff\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0269\11\141\1\u1900\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1901\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1902\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u1903\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1904\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1905\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1906\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u171d\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1907\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1908\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1909\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u190a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u190b\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u190c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u190d\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u190e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u190f\5\141\1\u1910\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132"; + + private static final String ZZ_TRANS_PACKED_5 = + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u084d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\5\141\1\u1911\3\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u10c6\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1912\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1913\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1914\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1915\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1916\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1917\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u08ea\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1918\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d24\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1919\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u191a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1517\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u191b\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u191c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u191d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u184b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0d70\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u191e\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u05e2\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u191f\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1920\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1921\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e89\4\141\1\u1922\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1923\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1924\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1925\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1926\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0480\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0b91\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1927\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1928\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1929\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u192a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u192b\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u192c\1\141\1\u192d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u192e\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1529\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u192e\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u192f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0ada\3\141\1\u1930\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u098a\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0818\1\u1931\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1932\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1933\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1934\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u09f1\11\141\1\u0d5d"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u082f"+ + "\3\141\1\u031a\1\u1171\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1935\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0d1d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1936\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1937\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1938\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1939\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u05b7\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u193a"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u193b"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u047b"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u05b7"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u05b7"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u05b7"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u193c"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0392"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0392\2\141"+ + "\1\u193d\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0392"+ + "\12\141\1\u193e\3\141\1\u193f\2\141\1\u05b7\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1940\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1941\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1942\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1943\10\141\1\u03d4"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1944\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1945\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1946\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1947\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1948\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1949\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u103b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0455\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0455\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u194a\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u194b\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u18bf\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u194c\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u194d\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u194e\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u194f\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1439\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1950\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1951\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1952\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1953\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1954\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1955\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1956\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1957\21\141\1\u1958\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1959\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u195a\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u195b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u195c\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\3\141\1\u195c\3\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u195d\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u195e\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u195f\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1960\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1961\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1962\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1963\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u01fa\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u04ce\4\141\1\u1964\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1957\21\141\1\u155a\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1965\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u119c\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1966\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1967\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u1968\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1969\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0269\5\141\1\u044f\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u196a\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u196b\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u196c\11\141\1\u196d"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u196e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u196f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1970"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1971"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1972"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1973"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1974"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1975"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1976"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1977"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1978"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1979"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u197a"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u197b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u197c\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u197d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u197e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u197f\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1980\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1981\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0bd8\10\141\1\u1482"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1982"+ + "\3\141\1\u1983\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1984\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1985\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1986"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1987\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0461\1\141\1\u1988\4\141\1\u1989\1\141\1\u0610\1\141"+ + "\1\u0464\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u198a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u198b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u198c\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\72\0\1\u0d88\126\0\1\u07a2\160\0\1\u0d88\40\0"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u198d"+ + "\15\141\1\u198e\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1643\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u198f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1990\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0d62\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1991\1\u0ae2\1\141\1\u16a9\13\141\1\u1992\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1993\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1994\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u1995\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1996\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1997\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1097\2\141\1\u1998\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1999\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u199a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u199b\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0269\4\141"+ + "\1\u199c\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u199d\1\141\1\u044f\1\u199e\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u199f\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u19a0\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19a1\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u19a2\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u19a3\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1027\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u15c3\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1051\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1300\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u19a4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u19a5\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\25\141\1\u19a6\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u19a7\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u19a8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u19a9\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u19aa\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u19ab\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0e74\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1074\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u19ac\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u19ad\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u19ae\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u19af\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u06bb\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u06ee"+ + "\7\141\1\u0269\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u19b0\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u03a4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u19b1\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u19b2"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u19b3"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0c40"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u044f"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u19b4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u081f"+ + "\1\u17fe\21\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u19b5"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u19b6\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u19b7\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u19b8"+ + "\3\141\1\u08d0\1\141\1\u045c\3\141\1\u19b9\1\u060f\2\141"+ + "\1\u0464\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u19ba\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u19bb\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u19bc\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05b0\14\141\1\u19bd\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u19be\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0699\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u19bf\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u19c0\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u19c1\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u098a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u19c2\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u19c3\6\141\1\u0c97"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u19c4"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u19c5"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u19c6"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u090a\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0768"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u116d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0b8b\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u19c7\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u19c8\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u19c9\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u19ca\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u19cb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u19cc\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1207\5\141\1\u11b0\5\141\1\u19cd\3\141"+ + "\1\u19ce\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u19cf\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u19d0\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u19d1"+ + "\7\141\1\u19d2\2\141\1\u19d3\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u046a\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u19d4\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u19d5\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u19d6\10\141\1\u182d\1\u19d7\5\141\1\u19d8\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u19d9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u19da\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u19db\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u19dc\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0bc5\5\141\1\u19dd\1\141"+ + "\1\u19de\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u19bc\5\141\1\u19df\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u1485\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u19e0\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u19e1\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u19da\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u19e2\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u19e3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u19e4\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u19e5\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u19e6\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0b0b\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u19e7\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u138a\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u138a\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b64\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u19e8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u19e9\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u19ea\2\141"+ + "\1\u103a\13\141\1\u19eb\1\u19ec\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u19ed\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bf1\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u19ee\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u19ef\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f0\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f1\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0eda\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f2\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u19f3\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u19f4\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u19f5\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1844\12\141\1\u19f6\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u19f7\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u19f8\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u19f9\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u19fa\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u19fb\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u19fc\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u19fd\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u19fe\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u19ff\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1a00\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1a01\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0afc\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1a02\3\141\1\u1a03\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1a04\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u084f\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a05\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u08bb\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1a06\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1a07\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u1a08\6\141\1\132\10\0\6\141\1\0\10\141\1\u1a09"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0269\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1a0a\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a0b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1a0c\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a0d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a0e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a0f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1a10"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1a11\11\141\1\u12bc\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1a12\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1a13\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1a14\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u1a15\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a16\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1a17\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1a18\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1a19\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1a1a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1a1b\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a1c"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a1d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1290\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1a1e\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u166e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1a1f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1a20\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1a21\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a22\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a23\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a24\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a25\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1a26\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a27\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1a28\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a29\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15f9\6\141\1\u1a2a\5\141\1\u1a2b\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1a2c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1a2d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1a2e\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u076a\1\u1a2f\2\141\1\u1a30\1\141"+ + "\1\u12ec\2\141\1\u164f\4\141\1\u1a31\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1a32\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1a33\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1a34\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a35\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a36\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0d27\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0614\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1a37\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a38\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0e8f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a39"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a3a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a3b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a3c\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1a3d"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1a3e\3\141\1\u1a3f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1a40\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1a41\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1a42\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1a43\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1a44\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1549\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u15f9\6\141\1\u1a45"+ + "\2\141\1\u1a46\1\141\1\u0d02\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1a47\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1a48\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1274\5\141\1\u0d02\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1a49\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u125e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1a4a\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1a4b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0e10\1\141\1\u1a4c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1a4d"+ + "\11\141\1\u1a4e\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a4f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1a50\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1a51\3\141\1\u0b05\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1a52\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1a53\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a54\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1a55\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a56\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1a57\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a58\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1105\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u158b\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u10f4\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1a59\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1a5a\2\141\1\u1a5b\1\u08ab\1\141\1\u1a5c\1\141"+ + "\1\u1a5d\1\141\1\u0208\1\u1a5e\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a5f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a60\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1a61\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a62\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a63\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a64\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1a65\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1a66\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u15ef\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a67\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1a68\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1a69\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0749\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a6a\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a6b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1a6c\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0afc"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1a6d"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1485"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1a6e"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1a6f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15f9"+ + "\3\141\1\u1a70\1\141\1\u1274\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a71\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a72\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a73\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a72\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1a74\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a33\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1a75\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1a76\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u13ee\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1a75\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a77"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1a78\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a79\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1a7a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1a7b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1a7c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1a7d\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a7e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1a7f\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1a80\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u1a81\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u05b7\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1a82\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u05d8\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1a83\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1a84\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0606\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1a85\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1a86\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0f80\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0461\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1013\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1a87\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a88\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a89"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1a8a\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0788\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a8b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\3\141\1\u1a8c"+ + "\3\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a8d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a8e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a8f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1a90\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1a91\6\141\1\u1a92\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1a93\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1a8f\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a94\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1a95\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1a96\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1a97\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a98"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1a99\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1100\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u1a9a\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a9b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1a9c\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0e8b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1a9d\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a9e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1a9f"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1aa0"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1aa1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1aa2"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1aa3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0687"+ + "\4\141\1\u0411\1\u090e\3\141\1\u153d\5\141\1\u1716\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u14e4\2\141\1\u0e8f"+ + "\2\141\1\u05dd\7\141\1\u05cb\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1aa4\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1aa5\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1aa6\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1aa7\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0485\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1aa4\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1aa8\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1aa9\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1aaa"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1aab\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1aac"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1aad"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1aae"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1aaf"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\4\141\1\u1ab0\4\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ab1\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1ab2\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1ab3\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u0ff4\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1ab4\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1ab5\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1ab6\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1ab7\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0a70\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1ab8\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1ab9\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e88\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1aba\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1abb\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1abc\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1abd\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1abe\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1abf\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u1ac0\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1abf\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1ac1\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ac2\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1ac3\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1ac4\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ac5"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u10d8\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1ac6\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1ac7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ac8\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1ac9\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ddf\1\141\1\u0409"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1aca"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u175d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0262\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0411\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u06f5\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0f38\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1acb\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u12c9\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1acc\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1acd\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1ace\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0ddc\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u05b7\1\u087a\1\141\1\u1acf\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0392\2\141\1\u05d1"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u087a"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1ad0"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f01"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u09a3"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ad1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1ad2\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ad3\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11ba\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1ad4\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1ad5\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1ad6\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1ad7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ad8\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1ad9\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ada\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1adb\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1ada\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1adc\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1434\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1add\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0cf0\4\141\1\u06e9"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\3\141"+ + "\1\u1ade\3\141\1\132\10\0\6\141\1\0\10\141\1\u1adf"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0e81\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u0e17\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0c6e\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1964\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1ae0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0ecd\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1ae1\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u128a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1ae2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0916\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ae3\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1ae4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1ae5"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u01fa"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ae6\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1ae7\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1ae8\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1ae9\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u05b2\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1aea\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1aeb\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1aec\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1aed\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1aee\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1aef\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1af0\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1af1\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1af2\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u19b6\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1af3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1af4\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1af5\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1af6\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1af7\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1af8\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1af9\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1afa\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1afb\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1afc\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0d70\2\141\1\u1523\1\141\1\u1afd\1\u1523\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1afe\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1aff\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b00\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1b01\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1b02\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1b03\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1b04\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u06fc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b05\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1b06\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1b07\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\6\141\1\u1b08\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1b09\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1b0a\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1b0b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1b0c\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1b0d\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b0e\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b0f\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0db6\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0dcc\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1b10\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u08f6\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0a3a\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1b11\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u132b\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1b12\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1b13\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1b14\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1b15\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1b16\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b17\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b18\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b19\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1b1a\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1b1b\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1b1c\5\141\1\u1b1d\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1b1e\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b1f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1b20\20\141\1\u047b"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1b21"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u1b22"+ + "\2\141\1\u1b23\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u1b24\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1b25\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1315\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u109d\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b26"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b27\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1b28\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1b29\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1b2a\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b2b"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b2c\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b2d\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e8f\2\141"+ + "\1\u1a11\7\141\1\u05cb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1b2e\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1b2f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0d65\12\141\1\u09a2\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u102f\2\141\1\u09fc\1\u040d"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1b30\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1b31\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u06bb\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b32\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u151f\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1b33\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b34\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u04ce\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1b35\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\26\141\1\u0269\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1391\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1b36\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1b37\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1b38\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1b39\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1b3a\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0f95\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1b3b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1b3c\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1b3d\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b3e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b3f\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1b40\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b41\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b42\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u097d\4\141\1\u1b43\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1b44\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u1b45\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1b46\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1b47\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1b48\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b49\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u05b7"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b4a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1b4b"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b4c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1b4d\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u099e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1b4e\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u19bc\5\141\1\u1b4a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u048b"+ + "\3\141\1\u1b4f\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1b50\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1b51\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b52"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b53\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b54\2\141\1\u1b55\1\141\1\u0411\1\u048b\3\141\1\u0610"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e8f"+ + "\1\141\1\u1b56\1\u0e91\1\u1b57\6\141\1\u05cb\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b58\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u08f6\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1b59\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b5a\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0f61\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0868\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b5b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1b5c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b5d\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u1ac8\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1b5e\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1b5f\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1b60\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b61"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u19f7\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1b62\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1b63\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1b64\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1b65\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b66\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0cf6\3\141\1\u0396\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u12a7\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1b67\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1b68\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u04ce\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0392\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1b69\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1b6a\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1b6b\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b6c\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1b6d\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b6e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1b6f\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1b70"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1a11\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b71\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b72\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0ea0"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b73"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1a11"+ + "\11\141\1\u12bc\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1171\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1b74\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1b75\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1b76\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b77\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1b78\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1b79\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1b7a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b7b\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1b7c\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1b7d\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\6\141\1\u1b7e\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1b7f\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1b80\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0899\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1b81\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1b82\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1b83\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1b84\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b85"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b86\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1b87\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1b88\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b89\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1b8a\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1b8b\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1b8c\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b8d\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u1b8e\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b8f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1b90\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b91"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1b92"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b93"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0881"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1271"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1b94"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1b95"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05dd"+ + "\5\141\1\u0610\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u175f\2\141\1\u05dd\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1b96\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1b97\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1b98\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1b99\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1b9a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0b16\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1b9b\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1b9c\1\141\1\u1b9d\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b9e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1b9d\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b9f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1ba1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1ba2\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0919\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ba3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1ba4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0afc\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1ba5\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba6\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba7\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba8\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1ba9\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1baa\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bab\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u173c\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1bac\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bad\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1bae\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0485\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1baf\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u047b\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1bb0\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1bb1\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bb2\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1bb3\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bb4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bb5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u04a1\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1bb6\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1bb7\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u18b7\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1bb8\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1a82\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1872\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1bb9\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1bba\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bbb\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u12d9\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1bbc\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1bbd\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1bbe\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u03d4\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1bbf\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u12f1\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0b10\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1bc0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u05d8\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bc1\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bc2\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1bc3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1bc4\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1bc5\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1bc6\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1bc7"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0add"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1bc8"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1bc9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1bca"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0ad5"+ + "\4\141\1\u139b\11\141\1\u1213\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1bcb\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0913\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1bcc\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1bcd\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1bce\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1bcf\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1bd0\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u11a8\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1bd1\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u05b1\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1bd2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0269\3\141\1\u08f6\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0705\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1bd3\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1bd4\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u18e8\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1bd5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1bd6\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1bd7\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1bd8\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u166f\1\141\1\u1bd9\1\u1bda\1\u0903"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1bdb"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1bdc\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1bdd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0204\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u122f\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1bde\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0783\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18ff\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bdf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1be0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1235\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1be1\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u03c8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u1be2\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1be3\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u1be4\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1934\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1be5\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1be6\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1be7\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1009\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1be8\3\141\1\u0211\3\141\1\u0a66\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1be9\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1bea\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1beb\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1bec\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\7\141\1\u1bed\1\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1bee\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u1bef"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u03e4\3\141\1\u0723\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e8b\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1bf0\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1bf1\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1bf2\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1003\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0392\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1bf3\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1bf4\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0e88\1\u0c6e\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1bf5\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u191f\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1bf6\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1bf7\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1bf8\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1bf9\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bfa\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1bfb\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1bfc\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1bfd\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1bfe\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1bff\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u04ce\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1931\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1c00\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1c01\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u16d5\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1c02"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1c03"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1c04\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1aa6\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1487\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0c6e\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1305\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1c05\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0455\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1c06\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c07\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1c08\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c09\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1c0a\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u1c0b"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1c0c\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1c0d\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0291\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u104a\2\141\1\u1777\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1c0e\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c0f\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08a6\3\141\1\u0610\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u156e\1\141\1\u08db"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1c10"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1c11"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u044f"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1c12"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1c13"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0ce4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1c14\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0c40\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1c15\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1c16\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c17\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1c18\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u176f\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c19\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1c1a\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c1b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1973\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1c1c\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1c1d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1c1e\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1c1f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1bd2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1c20\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1c21\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c22\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1c23\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c24\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c25"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1c26\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c27\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c28"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1c29\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1c2a\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1c2b\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0f6a\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1c2c\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1c2d\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1c2e\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c2f\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1c30\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0754\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c31\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1c32\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u18bf\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0f25\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c33\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1c34\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c35\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1c36\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c37\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0174\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1c38\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1c39\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1c3a\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1c3b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u0e17\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1c3c\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0a3a\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1c3d\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u040d\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0c85\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c3e\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1c3f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u11e8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1c40\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1933\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1c41\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1c42\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c43\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1bf2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1c44\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0bf1\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u19ba\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1112\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c45"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u060f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0c7d\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1c46\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u16ca\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1c47\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1c48\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u05dd\12\141\1\u0eb0\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u1c49\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1c4a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1c4b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1c4c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u132b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c4d\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1c4e\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c4f"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c50\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1c51"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1c52"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1c53"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u045f\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1234\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1c54\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1b45\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1c55\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1b4f\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c56\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1c57\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1c58\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c59\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1c5a\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0df3\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1c5b\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u12f1\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1c5c\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c5d\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b0d\14\141\1\u01ea\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0ed2\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1c5e\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1c5f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u1546\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c60\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0699\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1c61\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1c62\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u11b6\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0690\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1c63\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1c64\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1c65\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1c66\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f7\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1c67\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c68\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u19f7\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1c69\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1c6a\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u1c6b\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e17\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0d55\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0687\7\141\1\u0627\1\141\1\u0610"+ + "\2\141\1\u06e9\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u08f6\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b1e"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c6c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1a11"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1c6d"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1c6e"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1c6f"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1c70"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1c71"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1c72"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1c73"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1739\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0"; + + private static final String ZZ_TRANS_PACKED_6 = + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1c74\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1c75\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1c76\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1c77\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1c78\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\6\141"+ + "\1\u1c79\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u04f9\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1c7a\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08c1"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c7b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c7c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1b83"+ + "\2\141\1\u0cca\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1c7d\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c7e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1c7f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u14b2\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1c80\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c81\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u189c"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1c82\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1c83\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1c84\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1c85\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c86\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1c87\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c88\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c89\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1c8a\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0269\5\141\1\u1c8b\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c8c\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u10d7\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1a3e\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1c8d\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12f1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1c8e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c8f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1c90\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c91\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1c92\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c93\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1c94\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1c95\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1c96\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u03ce\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u1c97\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1c98\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1019\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1c99\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u11df\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1c9a\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u11df\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1c9b\1\u1c9c\4\141\1\u1962\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u03a8\5\141\1\u1c9b\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1c9d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0cf0\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1c9e\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u044f\4\141\1\u1c9f\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1ca0\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1470\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0a3a\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ca1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ca2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1a65\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1ca3\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1ca4\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1ca5\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1ca6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1ca7\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1ca8\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1ca9\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1caa\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u060b\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1cab\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\26\141\1\u1cac\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1cad\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1cae\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u138a\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u1caf\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cb0"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1cb1\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1cb2\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1cb3\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1cb4"+ + "\11\141\1\u093e\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1cb5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0916\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1bd0\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0c74"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1013\4\141\1\u06b2\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u06f1\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\3\141"+ + "\1\u0269\3\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0997\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1cb6\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1cb7\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1cb8\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1cb9\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0993\3\141\1\u1bb5\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1cba\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u18e8\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1cbb\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u1cbc\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1bfa\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1cbd\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0c81\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1cbe\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1366\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u1cbf\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1cc0\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u08f6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1cc1\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1cc2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u1cc3\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1cc4\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1cc5\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1cc6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1cc7\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1be8\6\141\1\u1cc8\1\u0a66\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1cc9\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0461\1\u1be8\1\u0d70\4\141\1\u1cca"+ + "\7\141\1\u084f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1ccb\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1ccc\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1ccd\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cce"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1ccf\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1cd0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1cd1\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1cd2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1cd3\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0393\1\u1cd4\1\u0db7\2\141\1\u12ec\1\141\1\u06b4\1\u1cd5"+ + "\7\141\1\u0eee\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1cd6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cd7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cd8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1cd9\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1cda\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1c6a\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0e17\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u132b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1cdb\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ea5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1237\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u08f6\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0455\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u08f5\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1cdc\3\141\1\u1cdd"+ + "\1\141\1\u1cde\1\141\1\u1cdf\5\141\1\u1ce0\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u11ea\1\141\1\u1ce1"+ + "\16\141\1\u08ef\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1ce2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ce3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b16\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1ce4\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ce5\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u134a\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u03c3\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ce6\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ce7\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u153d\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ce8\2\141"+ + "\1\u1ce9\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1cea\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1212"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1ceb\12\141\1\u1cec\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1ced\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1212"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1cec\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1cee\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1cef\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1cf0\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1cf1\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1cf2"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1112"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1cf3"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1cf4"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1cf5"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1cf6"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1cf7\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1cf8\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1cf9\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1cfa\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1cfb\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1cfc\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0610\7\141\1\u06ec"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1cfd"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1cfe"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1cff"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1d00"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d01"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1d02"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03ec"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1d03"+ + "\2\141\1\u1d04\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1d05\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1d06\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1d07\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1d08\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1d09\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1d0a\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u044e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d0b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d0c\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u082f\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1c6a\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d0d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d0e"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d0f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0c93"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0b78"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b1f\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d10\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0925\12\141"+ + "\1\u0927\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1d11\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1d12\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1d13"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1d14\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u17ea\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1d15\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1d16\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u19ea\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1d17\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u19d1\7\141\1\u19d2\1\141\1\u0208\1\u1d18"+ + "\2\141\1\u0464\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u1d19\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1d1a\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d1b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1d1c\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1d1d\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d1e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1d1f"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1d20\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1d21\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1d22\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c7c\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1b45\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u0400\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0d37\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u118e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1d23\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1d24\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0245\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u03c1\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1d25\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1d26\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1d27\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1d28\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1d29\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0d3f\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d2a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0e17\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1d2b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1d2c\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u165d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1d2d\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1d2e\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1d2f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1d30\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1d31\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d32"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d33\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1d34"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d35\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1d36\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d37\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\7\141\1\u1d38\2\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1d39\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1d3a\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1684\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\141\1\u063c\5\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0971\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d3b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d3c\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d3d\2\141"+ + "\1\u1d3e\13\141\1\u1d3f\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0ee0\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1d40\1\u1d41\1\141\1\u11cd\1\141\1\u1d42"+ + "\1\141\1\u1d43\1\u18c3\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1d44\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d45"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1d46\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u122f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1d47\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d48\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1d49"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1ca4"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0948"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d4a\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d4b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1d4c\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1d4d\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d4e\2\141"+ + "\1\u1d4f\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0208\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1d50\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u09bd\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d51\12\141\1\u1c62\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1d52\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1d53\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u09a9\1\141\1\u1d54\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u1d55\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u19db\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1d56\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1d57\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1d58\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d59\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d5a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0903\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a07\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1d5b\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a82\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0687\2\141\1\u1d5c\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1d5d\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0b65\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d5e\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1d5f\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\141\1\u094a\5\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0760\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1546\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d60\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u1d61\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1d62\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d63\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0821\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d64\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1d65\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1d66\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1d67\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u18e8\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1a91\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141"+ + "\1\u1d68\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1d69"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d6a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d6b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d5d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1d6c"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d6d\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u08f6\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1d6e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0269\1\141"+ + "\1\u1be6\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1d6f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1d70\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d71"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1d72\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1cc6\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d73\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d74\3\141"+ + "\1\u0211\10\141\1\u111c\2\141\1\u1502\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u1d75\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1d76\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u12a7\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1d77\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\24\141\1\u19ce\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1d78\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1d79\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1d7a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1d7b\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1d7c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0db6\11\141\1\u1d7d\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u191b\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0cab\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1d7e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u13e2\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u176a\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1d7f\4\141\1\u1274\1\u1d80\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1d81\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1d82\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05cb\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1d83\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d84\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u03ec"+ + "\3\141\1\u1d85\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d86"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1d87\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1954\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1d88\2\141\1\u1777\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1d89\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u060e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1d8a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1d8b\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d8c"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d8d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1d8e\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1d8f\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d90\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1d91\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1d92\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1d93\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1d94\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1d95\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1d96\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0819\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1d97"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d98"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d99"+ + "\2\141\1\u1d9a\3\141\1\u1d9b\6\141\1\u1d9c\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1d9d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1d9e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1d9f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b02\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1da0\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1da1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1da2\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u13ee\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1da3\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1da4\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1da5\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u1da6\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1da7\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0818\2\141\1\u1da8\3\141"+ + "\1\u0a53\2\141\1\u0830\2\141\1\u1da9\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\3\141\1\u0aec\3\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1daa\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1dab\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1dac\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dad\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u060b\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u18e3\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1dae\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1daf\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1db0\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1db1\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1db2\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0679\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0bc5\2\141\1\u1db3"+ + "\4\141\1\u1db4\2\141\1\u1db5\6\141\1\u08ef\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1db6\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u1db7\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1b9a\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1db8\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1db9\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1dba\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u19d6\1\u1dbb\4\141\1\u1dbc\1\141\1\u1dbd"+ + "\1\u182d\6\141\1\u19d8\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1dbe\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1dbf\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0bc5\3\141\1\u03e4\14\141\1\u1dc0\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1dc1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0901\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1cdc\1\u1dc2\1\u03e4"+ + "\1\141\1\u101e\1\141\1\u0723\1\141\1\u1dc3\6\141\1\u1dc4"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1dc5"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1dc6"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0f1e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1dc7"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0b05"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dc8"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1dc9"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1dca"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u1dcb"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1dcc"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u185a"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1dcd"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1dce"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1dcf"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1dd0"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dd1"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dd2"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1dd3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1dd4"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1dd5"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1dd6\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\4\141\1\u0269\4\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1dd7\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1934\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1dd8\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1dd9\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1dda\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0dda\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1ddb\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1ddc\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1ddd\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1dde\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1ddf\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1de0\1\141\1\u0d73\1\u1de1\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1de2\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1de3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u122f\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1de4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1de5\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1de6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1de7\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1de8\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1271\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1de9\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1dea\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1deb\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1dec\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1453\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1ded\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u03cd\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1dee\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1def\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1df0\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1df1\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1df2\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0dd3\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u1df3\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1df4\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1df5\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1df6\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1ca9\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1df7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1df8\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1df9\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1dfa\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1dfb\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b7b\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1dfc\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1dfd\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1dfe\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1dff\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u1e00\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1e01\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1e02\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1e03\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1e04\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1e05\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1e06\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1e07\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d74\14\141\1\u111c\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e08\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u13b5\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e09\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u1e0a\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1e0b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1e0c\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1e0d\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e0e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u155c\3\141\1\u1351\10\141\1\u0411\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u155c\3\141\1\u1351\7\141"+ + "\1\u0945\1\u0411\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1e0f\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0c85"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0699"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1e10\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03c6\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1395\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0f6b\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1e11\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1e12\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1350\1\141\1\u11d2"+ + "\6\141\1\u0e81\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1e13\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1e14\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e15\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1e16\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1e17\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u045c\4\141"+ + "\1\u0848\5\141\1\u1e18\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1e19\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1e1a\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e1b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1e1c\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e1d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1e1e\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e1f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e20\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1e21\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e22\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1e23"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1e24"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1e25"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1e26"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u102f"+ + "\2\141\1\u1bf1\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0dc8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1e27\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1e28\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e29\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e2a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u18e3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e2b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1e2c\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1885"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u18cc\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0bef\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1e2d\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u01fa"+ + "\20\141\1\u1e2e\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0614\10\141\1\u0614\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1e2f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1d09\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1dab\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1e30\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e31\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e32\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e33\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e34\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e35\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u11a8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e36\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e37\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1e38\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1e39\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1e3a\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1e3b\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1b0d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1e3c\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1e3d\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1e3e\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1e3f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u12f1\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08e6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e40\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e41\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1e42\1\u0913\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e43\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1e44\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e45\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0269\5\141\1\u0827\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1e46\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1e47\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1e48\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u12a7\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1e49\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0f1f\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1105\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1e4a\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e4b\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e4c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1e4d\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1e4e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e4f\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e50\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1492\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1e51\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0f4a"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u1e52\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0ed9\11\141\1\u1b98\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0dda\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1e53\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1e54\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0690\10\141\1\u1e55\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u06bb\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e56\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e57\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1e58\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1e59\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1e5a\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e5b\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1e5c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e5d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e5e\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1e5f\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u11b1\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1e60\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\26\141\1\u1e61\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0fd6\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u11df\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1e62\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1e63\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1470\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1e64\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1e65\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1e66"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1e67"+ + "\2\141\1\u045c\3\141\1\u12db\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1e68\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e69\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1be5\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u04ae\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e6a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1e6b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e6c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e6d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1e6e\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e6f\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u0fcf\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e70\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0a07\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1e71\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1e72\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1e73\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e74"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1e75\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1e76\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1e77\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1e78\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1e79\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1e7a\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1e7b\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u047b\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u0388\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0eeb\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1240\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1e7c\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1957"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1e7d"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1d8a"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1e7e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1e7f"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1e80"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1e81"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1e82\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1e83\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1e84\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1e85\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1e86\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1e87\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1e88\1\141\1\u1e89\1\u1e8a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1ca2"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u198e"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1e8b\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1e8c\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1e8d\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1e8e\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1e8f\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0c81\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1e90\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1e91\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1e92\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u1e93\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u06bb\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u15b8\6\141\1\u1e94\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1e95\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1e96\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1e97\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1e98\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u08ed\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1e99\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1e9a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1e9b\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1e9c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1e9d\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1e9e\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1e9f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1ea0\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1ea1\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0df3\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1ea2\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1ea3\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u04be\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1ea4\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u08f6\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u04ec\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1ea5\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1dcb\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ea6"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ea7\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ea8\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ea9\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1eaa\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1eab\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0841\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1eac\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0e88\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1ead\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u1eae\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1eaf\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u12fc\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1eb0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1eb1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1eb2\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u10bd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u188c\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0e0c\2\141\1\u1b98"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0cba"+ + "\3\141\1\u1eb3\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1eb4\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u138a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1eb5\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0b16\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1eb6"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1eb7\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1eb8\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1df6\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0840\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1eb9\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1eba\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c48\7\141\1\u1ebb"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0e7d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ebc"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1ebd"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ebe"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u04ce"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ebf\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0eff\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0b78\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ec0\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1009\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ec1\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1ec2\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1ec3\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u08f6\3\141"+ + "\1\u0eb4\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0986\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u041e\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ec4\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1ec5\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b1e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1ec6\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ec7"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1ec8"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ec9"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1eca\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u136b\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ecb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1ecc\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ecd\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1ece\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1ecf\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1ed0\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1ed1\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1ed2\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1ed3\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1ed4\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1ed5\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1ed6\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ed7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1ed8\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ed9\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1eda\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1edb\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u09e1\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u06b2\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1edc\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1edd\6\141\1\u0f73\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1ede\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u1edf\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1db3\16\141\1\u08ef\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1ee0\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1ee1\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1ee2\1\141\1\u1dbd\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1ee3\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1ee4\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1ee5\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1ee6\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ee7\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1ee8\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1ee9\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1eea\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1eeb\11\141\1\u1eec\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1eed\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1eee\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1dcf\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1eef\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u0fda\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ef0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1dd3\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0bcc\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1ef1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1ef2\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1ef3\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u087a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u10d5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0e17\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1ef4\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1ef5\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1ef6\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1d7f\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1ef7\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0ed9\12\141\1\u0610\4\141\1\u1ef8\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0945\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1ef9\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1ca4\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1efa\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1efb\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1efc\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1009\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1efd\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1efe\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1eff\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1f00\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1f01\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1f02\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1f03\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1f04\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f05\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f06\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1f07\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f08\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1f09\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f0a\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1f0b\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1f0c\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1f0d\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1f0e\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f0f\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1f10\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1f11\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1f12\1\141\1\u1f13\1\u1f14\4\141\1\u1f15"+ + "\2\141\1\u1f15\1\141\1\u1f16\7\141\1\u1f17\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f18\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f19\3\141\1\u123f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1f1a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1f1b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1f1c\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1f1d\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1bb5\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u118e\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1cda\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0b16\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1f1e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1f1f\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u12f1\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f20\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1f21\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0c7d\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f22\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1e46\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1f23\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f24\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1f25\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1a3e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1f26\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f27\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f28\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1f29\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0d02\3\141\1\u1802\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0776\2\141"+ + "\1\u1eb3\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1802\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1cda\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0396\7\141\1\u1f2a\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1f2b\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1f2c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1f2d\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1a91\3\141\1\u1a8d\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u12a9\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1f2e\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u1f2f\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1f30\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1f31\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1f32\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f33\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1f34\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f35\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1cec\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0748"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f36\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1f37\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f38\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1f39\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1f3a\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1f3b"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1f3c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1f3d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1f3e\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f3f\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f40\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1f41\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1f42\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1f43\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1f44\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1f45\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1f46\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f47\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u08bb\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1f48\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1f49\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u05d9\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0c24\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1f4a\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1f4b\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u063d\4\141\1\u1f4c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f4d\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1f4e\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1f4f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1f50\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1f51\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1f52\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1f53\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1f54\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1f55\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1f56\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u08de\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1f57\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u12ec\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0b78\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u152c\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u10d7\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u0480\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1f58\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1b20\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f59\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u15b0\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1f5a\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1f5b\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1e20\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1f5c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1f5d"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1271"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1f5e"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1f5f\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1c38\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1f60\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f61\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f62\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1f63\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1f64\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1f65\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1f66\11\141\1\u1f67"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1f68"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1f69"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1f6a"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1e0b"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1f6b"+ + "\1\u060f\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1f6c\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1f6d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f6e\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f6f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1f70\12\141\1\u0b28\2\141\1\u1f71\1\141\1\u1f72\1\141"+ + "\1\u1f73\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f74\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1f75\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1f76\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f77\3\141\1\u04c5\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1b78\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1f78\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1f79\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u065d"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1f7a\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7e\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1271\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1f7f\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f80\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f3c\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f81\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f82\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f83\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1f84\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f85\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1f86\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f87\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1f88\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1f89\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1f8a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1b4f\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1f8b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1f8c\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1f8d\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f8e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1f8f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f90\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1f91\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f92\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f93\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1f94"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1f95\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1f96\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f2d\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f97\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1f98\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1f99\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u06b4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1e20"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1f9a"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1f9b"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1a84\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1f9c\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1f9d\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f9e\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1f9f\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1fa0\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1fa1\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1fa2\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u156e\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1fa3\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1fa4\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u182d\6\141\1\u19d8\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1fa5\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1ee4\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1fa6\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1fa7\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1fa8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1a58\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1fa9\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1faa\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1fab\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1fac\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1fad\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1fae\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1faf\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0396\13\141\1\u0e88\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1fb0\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1fb1\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1fb2\1\u1e77\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1fb3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1fb4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fb5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1fb6\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f68\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fb7\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1fb8\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1fb9\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1fba\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1fbb\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1fbc\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1a58\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1a58\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u15e9\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0df3\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1fbd\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1fbe\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u12fc\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u190a\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1fbf\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1fc0\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1fc1\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1fc2\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1fc3\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1fc4\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1fc5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1fc6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1fc7\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1fc8\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1fc9\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u1fca\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1fcb\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1fcc\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u05d1"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1fcd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1435"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1fce"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1fcf"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0776\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1fd0\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1fd1\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1fd2\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1fd3\17\141"+ + "\1\0"; + + private static final String ZZ_TRANS_PACKED_7 = + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1fd4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fd5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1fd6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1fd7\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1fd8\2\141\1\u106b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1271\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1fd9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1fda\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1fdb\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1fdc\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1fdd\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fde\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1fdf\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1fe0\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1fe1\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1fe2\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1fe3\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1fe4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fe5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1fe6\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1fe7\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1fe8\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1fe9\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1fea\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1feb\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1fec\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1fed\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1fee\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1fef\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1ff0\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1ff1\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1ff2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1ff3\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ff4\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u15e1\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u129d\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ff5"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u14a3"+ + "\15\141\1\u14a3\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u10f5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1ff6\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1ff7\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1ff8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1ff9\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1ffa\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1ffb\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ffc\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1ffd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1023\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ffe\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1fff\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u2000\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0d65\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u0b78\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u2001\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u2002\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1dd6\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e88\3\141\1\u041e\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0ad5\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u2003\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u060f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u2004\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u2005\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u2006\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141"; + + private static int [] zzUnpackTrans() { + int [] result = new int[775418]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_2, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_3, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_4, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_5, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_6, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_7, 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; + } + + + /* 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; + + /* 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 = + "\5\0\2\1\1\0\2\1\1\0\2\1\14\0\1\1"+ + "\5\0\2\1\1\11\4\1\1\11\5\1\2\11\3\1"+ + "\1\11\1\1\3\11\1\1\1\11\26\1\1\11\1\1"+ + "\1\11\1\1\7\11\1\1\1\11\2\1\2\11\10\1"+ + "\1\11\3\1\1\11\22\1\2\11\1\1\1\11\2\1"+ + "\1\11\1\1\1\11\1\1\1\11\2\1\1\11\6\1"+ + "\1\11\10\1\1\11\4\1\1\11\1\1\1\11\42\1"+ + "\1\11\3\1\1\11\2\1\2\11\3\1\1\11\1\1"+ + "\3\11\1\1\1\11\4\1\1\11\1\1\3\11\4\1"+ + "\4\11\1\1\1\11\6\1\7\11\2\1\1\11\2\1"+ + "\1\11\1\1\1\11\1\1\1\11\5\1\1\11\5\0"+ + "\105\1\1\11\2\0\1\1\1\0\1\11\1\0\76\1"+ + "\1\11\3\1\1\0\1\11\6\0\2\11\33\0\13\1"+ + "\1\11\307\1\2\11\1\1\1\11\1\0\1\11\1\1"+ + "\15\0\1\1\1\11\5\0\1\1\1\0\3\11\3\1"+ + "\2\0\1\11\4\0\101\1\3\0\5\1\1\0\67\1"+ + "\71\0\u0185\1\25\0\2\1\1\11\3\0\45\1\3\0"+ + "\1\11\43\1\2\0\1\11\4\0\1\1\2\0\1\1"+ + "\41\0\1\11\24\0\u01fb\1\17\0\1\11\4\0\2\1"+ + "\1\11\2\0\25\1\1\11\1\0\1\11\25\1\2\11"+ + "\17\0\1\1\23\0\1\1\12\0\u0278\1\16\0\14\1"+ + "\1\0\14\1\34\0\u02b3\1\12\0\4\1\1\0\6\1"+ + "\2\0\1\1\1\0\1\1\14\0\u02d6\1\6\0\1\1"+ + "\1\0\2\1\7\0\u02a1\1\1\11\4\0\1\1\1\11"+ + "\1\1\1\11\2\0\1\11\u0267\1\4\0\u021c\1\3\0"+ + "\1\11\u083e\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[8198]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to PHPTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + private static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to PHPTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + private static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in JavaScript. + */ + private static final int INTERNAL_IN_JS = -10; + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -12; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -13; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -14; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -15; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -16; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -17; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -18; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -19; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * Token type specifying we're in PHP. This particular field is public so + * that we can hack and key off of it for code completion. + */ + public static final int INTERNAL_IN_PHP = -(4<<11); + + /** + * Token type specifying we're in a PHP multiline comment. + */ + private static final int INTERNAL_IN_PHP_MLC = -(5<<11); + + /** + * Token type specifying we're in a PHP multiline string. + */ + private static final int INTERNAL_IN_PHP_STRING = -(6<<11); + + /** + * Token type specifying we're in a PHP multiline char. + */ + private static final int INTERNAL_IN_PHP_CHAR = -(7<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether closing markup tags are automatically completed for PHP. + */ + private static boolean completeCloseTags; + + /** + * The state PHP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int phpInState; + + /** + * The language index we were in when PHP was started. + */ + private int phpInLangIndex; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + + /** + * Language state set on PHP. + */ + private static final int LANG_INDEX_PHP = 3; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PHPTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds an end token that encodes the information necessary to return + * to the pre-PHP state and language index. + * + * @param endTokenState The PHP-related end-token state. + */ + private void addPhpEndToken(int endTokenState) { + addEndToken(endTokenState - phpInState - (phpInLangIndex<<16)); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS || + languageIndex==LANG_INDEX_PHP; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + case LANG_INDEX_PHP: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + phpInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_PHPxxx - phpInState + int main = -(-initialTokenType & 0x0000ff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_PHP: + state = PHP; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_MLC: + state = PHP_MLC; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_STRING: + state = PHP_STRING; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_CHAR: + state = PHP_CHAR; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = YYINITIAL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Overridden to remember the language index we're leaving. + */ + @Override + protected void yybegin(int state, int languageIndex) { + phpInLangIndex = getLanguageIndex(); + yybegin(state); + setLanguageIndex(languageIndex); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PHPTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PHPTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 206) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 109: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 137: break; + case 67: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 138: break; + case 92: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 139: break; + case 75: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 140: break; + case 23: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 141: break; + case 9: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); + } + case 142: break; + case 61: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 143: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 144: break; + case 129: + { addToken(Token.RESERVED_WORD_2); + } + case 145: break; + case 112: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 146: break; + case 110: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 147: break; + case 37: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 148: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 149: break; + case 131: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; yybegin(INTAG_SCRIPT); + } + case 150: break; + case 111: + { addToken(Token.REGEX); + } + case 151: break; + case 42: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 152: break; + case 135: + { int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 153: break; + case 106: + { addToken(Token.FUNCTION); + } + case 154: break; + case 101: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; + } + case 155: break; + case 39: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 156: break; + case 58: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 157: break; + case 113: + { addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + case 158: break; + case 83: + { if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + case 159: break; + case 78: + { if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 160: break; + case 80: + { /* Skip valid '$' that is not part of template literal expression start */ + } + case 161: break; + case 25: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); + } + case 162: break; + case 35: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); + } + case 163: break; + case 96: + { /* Skip all escaped chars. */ + } + case 164: break; + case 89: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 165: break; + case 28: + { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 166: break; + case 124: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 167: break; + case 119: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 168: break; + case 46: + { start = zzMarkedPos-1; yybegin(PHP_STRING); + } + case 169: break; + case 68: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 170: break; + case 99: + { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 171: break; + case 16: + { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); + } + case 172: break; + case 26: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); + } + case 173: break; + case 76: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 174: break; + case 95: + { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 175: break; + case 87: + { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 176: break; + case 114: + { varDepths.push(Boolean.TRUE); + } + case 177: break; + case 27: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); + } + case 178: break; + case 19: + { /* Allowing "start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 206: break; + case 128: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 207: break; + case 103: + { start = zzMarkedPos-2; yybegin(PHP_MLC); + } + case 208: break; + case 54: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 209: break; + case 66: + { addToken(Token.SEPARATOR); yybegin(CSS); + } + case 210: break; + case 118: + { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); + } + case 211: break; + case 134: + { yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 212: break; + case 31: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 213: break; + case 74: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 214: break; + case 79: + { if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 215: break; + case 64: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 216: break; + case 45: + { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; + } + case 217: break; + case 38: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 218: break; + case 107: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.FUNCTION); + zzMarkedPos -= (count-1); //yypushback(count-1); + } + case 219: break; + case 34: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 220: break; + case 24: + { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG_SCRIPT); + } + case 221: break; + case 126: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 222: break; + case 91: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 223: break; + case 94: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 224: break; + case 72: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 225: break; + case 50: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; + } + case 226: break; + case 136: + { addToken(Token.ANNOTATION); + } + case 227: break; + case 108: + { yybegin(PHP); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 228: break; + case 51: + { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 229: break; + case 29: + { addToken(Token.ERROR_IDENTIFIER); + } + case 230: break; + case 69: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 231: break; + case 121: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 232: break; + case 6: + { addToken(Token.MARKUP_ENTITY_REFERENCE); + } + case 233: break; + case 123: + { addToken(Token.LITERAL_BOOLEAN); + } + case 234: break; + case 17: + { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); + } + case 235: break; + case 3: + { addNullToken(); return firstToken; + } + case 236: break; + case 57: + { addEndToken(INTERNAL_CSS); return firstToken; + } + case 237: break; + case 133: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 238: break; + case 62: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 239: break; + case 86: + { addToken(Token.MARKUP_TAG_DELIMITER); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 240: break; + case 65: + { addToken(Token.RESERVED_WORD); + } + case 241: break; + case 11: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 242: break; + case 47: + { addToken(Token.COMMENT_EOL); addPhpEndToken(INTERNAL_IN_PHP); return firstToken; + } + case 243: break; + case 13: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 244: break; + case 59: + { addToken(Token.DATA_TYPE); + } + case 245: break; + case 53: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; + } + case 246: break; + case 55: + { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 247: break; + case 33: + { addToken(Token.SEPARATOR); + } + case 248: break; + case 115: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-2); //yypushback(count-2); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 249: break; + case 73: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 250: break; + case 71: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 251: break; + case 18: + { addToken(Token.MARKUP_TAG_NAME); + } + case 252: break; + case 10: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 253: break; + case 127: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; + } + case 254: break; + case 48: + { start = zzMarkedPos-1; yybegin(PHP_CHAR); + } + case 255: break; + case 105: + { yybegin(phpInState, phpInLangIndex); addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; + } + case 256: break; + case 90: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 257: break; + case 41: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 258: break; + case 93: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 259: break; + case 15: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 260: break; + case 117: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 261: break; + case 77: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 262: break; + case 12: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 263: break; + case 32: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 264: break; + case 85: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 265: break; + case 20: + { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); + } + case 266: break; + case 49: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; + } + case 267: break; + case 21: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 268: break; + case 44: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 269: break; + case 82: + { // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 270: break; + case 60: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 271: break; + case 1: + { + } + case 272: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case PHP: { + addPhpEndToken(INTERNAL_IN_PHP); return firstToken; + } + case 8199: break; + case INATTR_SINGLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; + } + case 8200: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 8201: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 8202: break; + case JS_DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; + } + case 8203: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 8204: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 8205: break; + case INTAG_SCRIPT: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; + } + case 8206: break; + case JS_TEMPLATE_LITERAL_EXPR: { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 8207: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 8208: break; + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 8209: break; + case PHP_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; + } + case 8210: break; + case CSS: { + addEndToken(INTERNAL_CSS); return firstToken; + } + case 8211: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 8212: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 8213: break; + case INATTR_DOUBLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; + } + case 8214: break; + case PHP_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; + } + case 8215: break; + case JAVASCRIPT: { + addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 8216: break; + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 8217: break; + case INTAG_CHECK_TAG_NAME: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; + } + case 8218: break; + case INATTR_SINGLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; + } + case 8219: break; + case DTD: { + addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 8220: break; + case PHP_CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; + } + case 8221: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 8222: break; + case INATTR_DOUBLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; + } + case 8223: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; + } + case 8224: break; + case JS_TEMPLATE_LITERAL: { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 8225: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 8226: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; + } + case 8227: break; + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 8228: break; + case INTAG_STYLE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; + } + case 8229: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex new file mode 100644 index 0000000..1601f98 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex @@ -0,0 +1,808 @@ +/* + * 01/26/2008 + * + * PerlTokenMaker.java - Scanner for Perl + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Perl.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PerlTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class PerlTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an single quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -3; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an single quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -4; + + /** + * Token type specific to PerlTokenMaker; this signals we are in a POD + * block. + */ + public static final int INTERNAL_POD = -5; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PerlTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * {@inheritDoc} + */ + public boolean getMarkOccurrencesOfTokenType(int type) { + return super.getMarkOccurrencesOfTokenType(type) || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + start = text.offset; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_UNQUOTED: + state = HEREDOC_EOF_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: + state = HEREDOC_EOF_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_UNQUOTED: + state = HEREDOC_EOT_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: + state = HEREDOC_EOT_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_POD: + state = POD; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + // We basically try to mimic Eclipse's JS editor's behavior here. + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' || + ch=='!' || + ch=='&' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +/*Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)))*/ +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_") +IdentifierPart = ({IdentifierStart}|{Digit}) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +LineCommentBegin = "#" + +IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +IntegerLiteral = ({IntegerHelper1}[lL]?) +HexLiteral = ({IntegerHelper2}[lL]?) +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;:,.]) + +VariableStart = ([\$\@\%)]"$"?) +BracedVariable = ({VariableStart}\{{Identifier}\}) +UnbracedVariable = ({VariableStart}{Identifier}) +BracedShellVariable = ([\$]\{[\&\`\'\+\*\.\/\|\,\\\"\;\#\%\=\-\~\^\:\?\!\@\$\<\>\)\(\[\]\)\}]) +UnbracedShellVariable = ([\$][\&\`\'\+\*\.\/\|\,\\\"\;\#\%\=\-\~\^\:\?\!\@\$\<\>\)\(\[\]\)]) +MatchVariable = ([\$]{Digit}) +Variable = ({BracedVariable}|{UnbracedVariable}|{BracedShellVariable}|{UnbracedShellVariable}|{MatchVariable}) +Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[msixpogcadlu]*) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>"|"->") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +BindingOperator = ("=~"|"!~") +FunnyOperator = (([\*][\'\"])|([\&][\'\"])) +Operator = ({NonAssignmentOperator}|{AssignmentOperator}|{BindingOperator}|{FunnyOperator}) + +PodCommandsExceptCut = ("="("pod"|"head1"|"head2"|"head3"|"head4"|"over"|"item"|"back"|"begin"|"end"|"for"|"encoding")) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + + +%state STRING +%state CHAR_LITERAL +%state BACKTICKS +%state HEREDOC_EOF_UNQUOTED +%state HEREDOC_EOF_SINGLE_QUOTED +%state HEREDOC_EOT_UNQUOTED +%state HEREDOC_EOT_SINGLE_QUOTED +%state POD + +%% + + { + + /* Keywords */ + "and" | + "cmp" | + "continue" | + "do" | + "else" | + "elsif" | + "eq" | + "esac" | + "for" | + "foreach" | + "ge" | + "if" | + "last" | + "le" | + "ne" | + "next" | + "not" | + "or" | + "redo" | + "sub" | + "unless" | + "until" | + "while" | + "xor" { addToken(Token.RESERVED_WORD); } + + /* Standard Functions */ + "abs" | + "accept" | + "alarm" | + "atan2" | + "bind" | + "binmode" | + "bless" | + "caller" | + "chdir" | + "chmod" | + "chomp" | + "chop" | + "chown" | + "chr" | + "chroot" | + "close" | + "closedir" | + "connect" | + "cos" | + "crypt" | + "dbmclose" | + "dbmopen" | + "defined" | + "delete" | + "die" | + "dump" | + "each" | + "endgrent" | + "endhostent" | + "endnetent" | + "endprotoent" | + "endpwent" | + "endservent" | + "eof" | + "eval" | + "exec" | + "exists" | + "exit" | + "exp" | + "fcntl" | + "fileno" | + "flock" | + "fork" | + "formline" | + "getc" | + "getgrent" | + "getgrgid" | + "getgrnam" | + "gethostbyaddr" | + "gethostbyname" | + "gethostent" | + "getlogin" | + "getnetbyaddr" | + "getnetbyname" | + "getnetent" | + "getpeername" | + "getpgrp" | + "getppid" | + "getpriority" | + "getprotobyname" | + "getprotobynumber" | + "getprotoent" | + "getpwent" | + "getpwnam" | + "getpwuid" | + "getservbyname" | + "getservbyport" | + "getservent" | + "getsockname" | + "getsockopt" | + "glob" | + "gmtime" | + "goto" | + "grep" | + "hex" | + "index" | + "int" | + "ioctl" | + "join" | + "keys" | + "kill" | + "last" | + "lc" | + "lcfirst" | + "length" | + "link" | + "listen" | + "local" | + "localtime" | + "log" | + "lstat" | + "map" | + "mkdir" | + "msgctl" | + "msgget" | + "msgrcv" | + "msgsnd" | + "my" | + "next" | + "no" | + "oct" | + "open" | + "opendir" | + "ord" | + "our" | + "pack" | + "package" | + "pipe" | + "pop" | + "pos" | + "print" | + "printf" | + "prototype" | + "push" | + "quotemeta" | + "rand" | + "read" | + "readdir" | + "readline" | + "readlink" | + "readpipe" | + "recv" | + "redo" | + "ref" | + "rename" | + "require" | + "reset" | + "return" | + "reverse" | + "rewinddir" | + "rindex" | + "rmdir" | + "scalar" | + "seek" | + "seekdir" | + "select" | + "semctl" | + "semget" | + "semop" | + "send" | + "sethostent" | + "setgrent" | + "setnetent" | + "setpgrp" | + "setpriority" | + "setprotoent" | + "setpwent" | + "setservent" | + "setsockopt" | + "shift" | + "shmctl" | + "shmget" | + "shmread" | + "shmwrite" | + "shutdown" | + "sin" | + "sleep" | + "socket" | + "socketpair" | + "sort" | + "splice" | + "split" | + "sprintf" | + "sqrt" | + "srand" | + "stat" | + "study" | + "sub" | + "substr" | + "symlink" | + "syscall" | + "sysopen" | + "sysread" | + "sysseek" | + "system" | + "syswrite" | + "tell" | + "telldir" | + "tie" | + "tied" | + "time" | + "times" | + "truncate" | + "uc" | + "ucfirst" | + "umask" | + "undef" | + "unlink" | + "unpack" | + "unshift" | + "untie" | + "use" | + "utime" | + "values" | + "vec" | + "wait" | + "waitpid" | + "wantarray" | + "warn" | + "write" { addToken(Token.FUNCTION); } + +} + + { + + {LineTerminator} { addNullToken(); return firstToken; } + {Identifier} { addToken(Token.IDENTIFIER); } + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + {Variable} { addToken(Token.VARIABLE); } + + /* String/Character literals. */ + \" { start = zzMarkedPos-1; yybegin(STRING); } + \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } + \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } + + /* Comment literals. */ + {LineCommentBegin}"!".* { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } + {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Easily identifiable regexes of the form "/.../". This is not foolproof. */ + {Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* More regexes (m/.../, s!...!!, etc.). This is nowhere near */ + /* exhaustive, but is rather just the common ones. */ + m"/"[^/]*"/"[msixpodualgc]* { addToken(Token.REGEX); } + m"!"[^!]*"!"[msixpodualgc]* { addToken(Token.REGEX); } + m"|"[^\|]*"|"[msixpodualgc]* { addToken(Token.REGEX); } + m\\[^\\]*\\[msixpodualgc]* { addToken(Token.REGEX); } + s"/"[^/]*"/"[^/]*"/"[msixpodualgcer]* { addToken(Token.REGEX); } + s"!"[^!]*"!"[^!]*"!"[msixpodualgcer]* { addToken(Token.REGEX); } + s"|"[^\|]*"|"[^\|]*"|"[msixpodualgcer]* { addToken(Token.REGEX); } + (tr|y)"/"[^/]*"/"[^/]*"/"[cdsr]* { addToken(Token.REGEX); } + (tr|y)"!"[^!]*"!"[^!]*"!"[cdsr]* { addToken(Token.REGEX); } + (tr|y)"|"[^\|]*"|"[^\|]*"|"[cdsr]* { addToken(Token.REGEX); } + (tr|y)\\[^\\]*\\[^\\]*\\[cdsr]* { addToken(Token.REGEX); } + qr"/"[^/]*"/"[msixpodual]* { addToken(Token.REGEX); } + qr"!"[^/]*"!"[msixpodual]* { addToken(Token.REGEX); } + qr"|"[^/]*"|"[msixpodual]* { addToken(Token.REGEX); } + qr\\[^/]*\\[msixpodual]* { addToken(Token.REGEX); } + + /* "Here-document" syntax. This is only implemented for the common */ + /* cases. */ + "<> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + + { + [^\n\\\$\@\%\"]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + \\.? { /* Skip escaped chars. */ } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped single quotes only, but this should still work. */ } + \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} + + + { + [^\n\\\$\@\%\`]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } + \\.? { /* Skip escaped chars. */ } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } +} + + + { + /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOF" will match any line containing */ + /* EOF and any other chars. */ + /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOF" will match any line containing */ + /* EOF and any other chars. */ + "EOF" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } + [^\n\\]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } + \\.? { /* Skip escaped chars. */ } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOT" will match any line containing */ + /* EOF and any other chars. */ + /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOT" will match any line containing */ + /* EOT and any other chars. */ + "EOT" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } + [^\n\\]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } + \\.? { /* Skip escaped chars. */ } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } +} + + + { + [^\n\=]+ {} + "=cut" { if (start==zzStartRead) { addToken(Token.COMMENT_DOCUMENTATION); yybegin(YYINITIAL); } } + {PodCommandsExceptCut} { if (start==zzStartRead) { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } } + = {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } +} + diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java new file mode 100644 index 0000000..02c59fc --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java @@ -0,0 +1,2107 @@ +/* The following code was generated by JFlex 1.4.1 on 3/11/12 12:58 AM */ + +/* + * 01/26/2008 + * + * PerlTokenMaker.java - Scanner for Perl + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Perl.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PerlTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class PerlTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int HEREDOC_EOF_SINGLE_QUOTED = 5; + public static final int HEREDOC_EOT_SINGLE_QUOTED = 7; + public static final int HEREDOC_EOT_UNQUOTED = 6; + public static final int STRING = 1; + public static final int BACKTICKS = 3; + public static final int YYINITIAL = 0; + public static final int HEREDOC_EOF_UNQUOTED = 4; + public static final int CHAR_LITERAL = 2; + public static final int POD = 8; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\12\1\11\1\0\1\12\1\6\22\0\1\12\1\46\1\102"+ + "\1\7\1\26\1\24\1\50\1\53\1\21\1\25\1\33\1\41\1\22"+ + "\1\17\1\20\1\32\1\3\1\61\1\62\1\61\1\61\3\5\2\2"+ + "\1\22\1\22\1\42\1\43\1\45\1\47\1\23\3\4\1\15\1\16"+ + "\1\104\5\1\1\14\2\1\1\103\4\1\1\105\3\1\1\13\2\1"+ + "\1\21\1\10\1\21\1\44\1\1\1\31\1\60\1\70\1\35\1\40"+ + "\1\57\1\74\1\72\1\56\1\65\1\101\1\71\1\37\1\67\1\73"+ + "\1\55\1\54\1\76\1\64\1\34\1\66\1\75\1\63\1\77\1\36"+ + "\1\100\1\1\1\27\1\52\1\30\1\51\uff81\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 = + "\11\0\1\1\1\2\2\3\1\1\1\4\1\5\1\6"+ + "\1\7\1\2\1\10\1\2\1\1\1\7\1\10\1\1"+ + "\1\11\2\7\5\2\10\7\1\12\24\2\1\13\1\14"+ + "\1\15\1\16\3\14\1\17\1\14\1\20\1\21\1\22"+ + "\1\14\1\23\3\14\1\24\1\14\1\25\5\14\1\26"+ + "\1\14\1\27\1\14\1\30\2\14\1\31\1\14\1\32"+ + "\1\3\1\33\1\32\1\33\1\32\1\34\1\32\1\4"+ + "\1\35\1\36\1\1\1\0\1\36\1\0\3\36\3\0"+ + "\1\7\1\0\2\2\2\0\22\2\1\37\1\2\1\40"+ + "\2\2\1\40\4\2\10\0\1\7\7\2\1\40\31\2"+ + "\1\1\1\0\1\2\2\0\1\2\1\37\6\2\1\40"+ + "\2\2\1\37\1\40\14\2\1\1\3\0\1\2\1\15"+ + "\1\41\1\14\1\0\2\41\1\0\1\20\1\42\1\14"+ + "\1\0\2\42\1\0\1\14\1\43\1\14\1\0\2\43"+ + "\1\0\3\14\10\0\1\33\1\0\2\34\1\0\1\44"+ + "\1\0\1\2\2\0\14\2\1\40\6\2\1\37\15\2"+ + "\15\0\33\2\1\37\1\2\1\0\2\45\7\2\1\40"+ + "\10\2\1\1\3\0\5\2\1\0\1\1\5\0\1\46"+ + "\1\0\1\46\11\0\1\45\10\2\1\37\26\2\4\0"+ + "\1\47\5\0\1\37\11\2\1\37\5\2\1\37\17\2"+ + "\1\0\4\45\2\2\1\37\1\2\1\0\2\45\1\50"+ + "\1\51\5\0\16\2\1\37\2\2\1\52\1\53\6\0"+ + "\2\2\1\37\25\2\1\45\2\2\3\0\1\37\7\2"+ + "\7\0\14\2\1\0\4\2\1\54\1\55\1\0\10\2"+ + "\1\0\1\2\1\0\4\2\1\0\12\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[601]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u01ea"+ + "\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4\0\u038e"+ + "\0\u041a\0\u0460\0\u04a6\0\u038e\0\u038e\0\u04ec\0\u0532\0\u0578"+ + "\0\u05be\0\u038e\0\u0604\0\u064a\0\u0690\0\u06d6\0\u071c\0\u0762"+ + "\0\u07a8\0\u07ee\0\u0834\0\u087a\0\u08c0\0\u0906\0\u094c\0\u038e"+ + "\0\u0992\0\u038e\0\u09d8\0\u0a1e\0\u0a64\0\u0aaa\0\u0af0\0\u0b36"+ + "\0\u0b7c\0\u0bc2\0\u0c08\0\u0c4e\0\u0c94\0\u0cda\0\u0d20\0\u0d66"+ + "\0\u0dac\0\u0df2\0\u0e38\0\u0e7e\0\u0ec4\0\u0f0a\0\u038e\0\u0f50"+ + "\0\u0f96\0\u038e\0\u0fdc\0\u1022\0\u1068\0\u038e\0\u10ae\0\u10f4"+ + "\0\u038e\0\u038e\0\u113a\0\u038e\0\u1180\0\u11c6\0\u120c\0\u038e"+ + "\0\u1252\0\u038e\0\u1298\0\u12de\0\u1324\0\u136a\0\u13b0\0\u038e"+ + "\0\u13f6\0\u038e\0\u143c\0\u038e\0\u1482\0\u14c8\0\u038e\0\u150e"+ + "\0\u1554\0\u1554\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\u16b2"+ + "\0\u16f8\0\u173e\0\u1784\0\u17ca\0\u1810\0\u1856\0\u189c\0\u0276"+ + "\0\u038e\0\u17ca\0\u18e2\0\u1928\0\u196e\0\u1928\0\u19b4\0\u19fa"+ + "\0\u1a40\0\u1a86\0\u1acc\0\u1b12\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a"+ + "\0\u1c70\0\u1cb6\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u1e14\0\u1e5a"+ + "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u2044\0\u208a"+ + "\0\u20d0\0\u2116\0\u02bc\0\u215c\0\u21a2\0\u21e8\0\u222e\0\u2274"+ + "\0\u22ba\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e\0\u24a4"+ + "\0\u24ea\0\u2530\0\u2576\0\u25bc\0\u2602\0\u2648\0\u268e\0\u26d4"+ + "\0\u271a\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u2878\0\u28be\0\u2904"+ + "\0\u294a\0\u2990\0\u29d6\0\u2a1c\0\u2a62\0\u2aa8\0\u2aee\0\u2b34"+ + "\0\u2b7a\0\u2bc0\0\u2c06\0\u2c4c\0\u2c92\0\u2cd8\0\u2d1e\0\u2d64"+ + "\0\u2daa\0\u2df0\0\u2e36\0\u2e7c\0\u2ec2\0\u2f08\0\u2f4e\0\u02bc"+ + "\0\u2f94\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u30f2\0\u3138\0\u317e"+ + "\0\u31c4\0\u320a\0\u3250\0\u3296\0\u32dc\0\u3322\0\u3368\0\u33ae"+ + "\0\u33f4\0\u343a\0\u3480\0\u34c6\0\u350c\0\u3552\0\u3598\0\u35de"+ + "\0\u3624\0\u366a\0\u36b0\0\u36f6\0\u038e\0\u373c\0\u3782\0\u37c8"+ + "\0\u038e\0\u3782\0\u380e\0\u038e\0\u3854\0\u389a\0\u38e0\0\u038e"+ + "\0\u389a\0\u3926\0\u396c\0\u39b2\0\u39f8\0\u3a3e\0\u038e\0\u39f8"+ + "\0\u3a84\0\u3aca\0\u3b10\0\u3b56\0\u3b9c\0\u3be2\0\u3c28\0\u3c6e"+ + "\0\u3cb4\0\u3cfa\0\u3d40\0\u3d86\0\u3dcc\0\u3e12\0\u1554\0\u3e58"+ + "\0\u3e9e\0\u3ee4\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u4088"+ + "\0\u40ce\0\u4114\0\u415a\0\u41a0\0\u41e6\0\u422c\0\u4272\0\u42b8"+ + "\0\u26d4\0\u42fe\0\u4344\0\u438a\0\u43d0\0\u4416\0\u445c\0\u44a2"+ + "\0\u44e8\0\u452e\0\u4574\0\u45ba\0\u4600\0\u4646\0\u468c\0\u46d2"+ + "\0\u4718\0\u320a\0\u475e\0\u47a4\0\u47ea\0\u4830\0\u4876\0\u48bc"+ + "\0\u4902\0\u4948\0\u498e\0\u49d4\0\u4a1a\0\u4a60\0\u4aa6\0\u4aec"+ + "\0\u4b32\0\u4b78\0\u4bbe\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6\0\u4d1c"+ + "\0\u4d62\0\u4da8\0\u4dee\0\u4e34\0\u4e7a\0\u4ec0\0\u4f06\0\u4f4c"+ + "\0\u4f92\0\u4fd8\0\u501e\0\u5064\0\u50aa\0\u50f0\0\u5136\0\u517c"+ + "\0\u51c2\0\u5208\0\u524e\0\u5294\0\u52da\0\u5320\0\u5366\0\u26d4"+ + "\0\u53ac\0\u53f2\0\u5438\0\u547e\0\u54c4\0\u550a\0\u5550\0\u5596"+ + "\0\u55dc\0\u5622\0\u5668\0\u56ae\0\u56f4\0\u573a\0\u5780\0\u57c6"+ + "\0\u580c\0\u5852\0\u5898\0\u58de\0\u5924\0\u596a\0\u59b0\0\u59f6"+ + "\0\u5a3c\0\u5a82\0\u5ac8\0\u5b0e\0\u5b54\0\u5b9a\0\u5be0\0\u5c26"+ + "\0\u5c6c\0\u5cb2\0\u5cf8\0\u5d3e\0\u1252\0\u5d84\0\u13b0\0\u5dca"+ + "\0\u5e10\0\u5e56\0\u5e9c\0\u5ee2\0\u5f28\0\u5f6e\0\u5fb4\0\u5ffa"+ + "\0\u6040\0\u6086\0\u60cc\0\u6112\0\u6158\0\u619e\0\u61e4\0\u622a"+ + "\0\u6270\0\u2c4c\0\u62b6\0\u62fc\0\u6342\0\u6388\0\u63ce\0\u6414"+ + "\0\u645a\0\u64a0\0\u64e6\0\u652c\0\u6572\0\u65b8\0\u65fe\0\u6644"+ + "\0\u668a\0\u66d0\0\u6716\0\u675c\0\u67a2\0\u67e8\0\u682e\0\u6874"+ + "\0\u68ba\0\u6900\0\u6946\0\u698c\0\u038e\0\u69d2\0\u6a18\0\u6a5e"+ + "\0\u6aa4\0\u6aea\0\u6b30\0\u6b76\0\u6bbc\0\u6c02\0\u6c48\0\u6c8e"+ + "\0\u6cd4\0\u6d1a\0\u6d60\0\u6da6\0\u6dec\0\u6e32\0\u6e78\0\u6ebe"+ + "\0\u6f04\0\u6f4a\0\u2a62\0\u6f90\0\u6fd6\0\u701c\0\u7062\0\u70a8"+ + "\0\u70ee\0\u7134\0\u717a\0\u71c0\0\u7206\0\u724c\0\u7292\0\u72d8"+ + "\0\u731e\0\u7364\0\u73aa\0\u73f0\0\u7436\0\u747c\0\u74c2\0\u7508"+ + "\0\u754e\0\u7594\0\u75da\0\u7620\0\u7666\0\u76ac\0\u038e\0\u038e"+ + "\0\u76f2\0\u7738\0\u777e\0\u77c4\0\u780a\0\u7850\0\u7896\0\u78dc"+ + "\0\u7922\0\u7968\0\u79ae\0\u79f4\0\u7a3a\0\u7a80\0\u7ac6\0\u7b0c"+ + "\0\u7b52\0\u7b98\0\u7bde\0\u31c4\0\u7c24\0\u7c6a\0\u038e\0\u038e"+ + "\0\u7cb0\0\u7cf6\0\u7d3c\0\u7d82\0\u7dc8\0\u7e0e\0\u7e54\0\u7e9a"+ + "\0\u2878\0\u7ee0\0\u7f26\0\u7f6c\0\u7fb2\0\u7ff8\0\u803e\0\u8084"+ + "\0\u80ca\0\u8110\0\u8156\0\u819c\0\u81e2\0\u8228\0\u826e\0\u82b4"+ + "\0\u82fa\0\u8340\0\u8386\0\u83cc\0\u8412\0\u8458\0\u849e\0\u84e4"+ + "\0\u852a\0\u8570\0\u85b6\0\u85fc\0\u8642\0\u8688\0\u86ce\0\u8714"+ + "\0\u875a\0\u87a0\0\u87e6\0\u882c\0\u8872\0\u88b8\0\u88fe\0\u8944"+ + "\0\u898a\0\u89d0\0\u8a16\0\u8a5c\0\u8aa2\0\u8ae8\0\u8b2e\0\u8b74"+ + "\0\u8bba\0\u8c00\0\u8c46\0\u8c8c\0\u8cd2\0\u8d18\0\u8d5e\0\u8da4"+ + "\0\u8dea\0\u8e30\0\u8e76\0\u8ebc\0\u038e\0\u038e\0\u8f02\0\u8f48"+ + "\0\u8f8e\0\u8fd4\0\u901a\0\u9060\0\u90a6\0\u90ec\0\u9132\0\u9178"+ + "\0\u91be\0\u9204\0\u924a\0\u9290\0\u92d6\0\u931c\0\u9362\0\u93a8"+ + "\0\u93ee\0\u9434\0\u947a\0\u94c0\0\u9506\0\u954c\0\u9592\0\u95d8"+ + "\0\u961e"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[601]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\12\1\13\1\14\1\15\1\13\1\14\1\16\1\17"+ + "\1\12\1\20\1\21\4\13\1\22\1\23\1\24\1\25"+ + "\1\26\1\27\1\30\1\31\2\24\1\32\1\33\1\34"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+ + "\1\45\1\46\1\47\1\50\1\51\1\50\1\45\1\52"+ + "\1\53\1\54\1\55\1\56\1\57\2\14\1\60\1\61"+ + "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71"+ + "\1\72\1\73\1\74\1\75\1\76\1\77\3\13\10\100"+ + "\1\101\1\102\11\100\2\103\1\104\1\105\53\100\1\106"+ + "\3\100\10\107\1\110\1\111\41\107\1\112\32\107\10\113"+ + "\1\101\1\114\11\113\2\115\1\116\1\117\2\113\1\120"+ + "\54\113\10\121\1\101\1\122\4\121\1\123\4\121\2\124"+ + "\1\125\1\126\57\121\10\127\1\101\1\130\4\127\1\131"+ + "\67\127\10\121\1\101\1\132\4\121\1\133\4\121\2\124"+ + "\1\125\1\126\57\121\10\127\1\101\1\134\4\127\1\135"+ + "\67\127\11\136\1\137\31\136\1\140\42\136\6\12\1\0"+ + "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ + "\5\12\13\0\26\12\1\0\4\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\26\13\1\0\3\13\2\141\2\14\1\141\1\14"+ + "\1\0\2\141\2\0\1\141\1\142\1\143\1\144\1\0"+ + "\1\145\2\0\1\141\2\0\1\141\5\0\3\141\1\142"+ + "\1\143\13\0\3\141\1\144\1\141\2\14\11\141\1\143"+ + "\5\141\1\0\1\141\1\143\3\141\1\146\1\147\1\141"+ + "\1\147\1\0\2\141\2\0\1\150\1\142\1\143\1\144"+ + "\1\0\1\145\2\0\1\141\2\0\1\141\5\0\2\141"+ + "\1\150\1\142\1\143\13\0\3\141\1\144\1\141\2\147"+ + "\11\141\1\143\5\141\1\0\1\141\1\143\1\141\106\0"+ + "\11\151\1\0\34\151\1\152\37\151\12\0\1\21\112\0"+ + "\1\50\23\0\1\50\1\0\1\50\42\0\2\145\1\0"+ + "\1\145\53\0\2\145\23\0\1\12\1\153\2\12\1\153"+ + "\1\12\1\0\2\12\2\0\4\153\4\0\1\12\2\0"+ + "\1\154\1\155\4\0\5\153\13\0\5\153\2\12\17\153"+ + "\1\0\3\153\1\0\1\156\2\0\1\156\6\0\4\156"+ + "\7\0\1\157\1\155\4\0\5\156\2\0\1\50\10\0"+ + "\5\156\2\0\17\156\1\0\3\156\1\0\1\156\2\0"+ + "\1\156\6\0\4\156\7\0\1\157\1\155\4\0\5\156"+ + "\13\0\5\156\2\0\17\156\1\0\3\156\1\12\1\153"+ + "\2\160\1\153\1\160\1\0\2\160\2\0\4\153\4\161"+ + "\1\160\2\161\1\162\1\163\1\0\3\161\5\153\13\161"+ + "\5\153\2\160\17\153\1\161\3\153\10\164\1\165\21\164"+ + "\2\0\7\164\1\166\42\164\43\0\1\50\7\0\1\50"+ + "\26\0\1\50\3\0\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\3\0\1\167\1\0"+ + "\1\13\1\170\1\13\1\171\1\13\5\0\1\172\3\0"+ + "\1\173\1\0\1\174\1\175\1\176\1\177\4\13\1\200"+ + "\1\201\1\202\6\13\1\203\1\204\1\13\1\205\1\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\206\1\13"+ + "\13\0\1\13\1\207\1\210\1\13\1\211\3\13\1\212"+ + "\2\13\1\213\12\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\214\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\215\1\216\3\13\13\0\1\13\1\217"+ + "\1\13\1\220\1\221\4\13\1\222\14\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\223\1\13"+ + "\1\224\5\13\1\225\2\13\1\226\4\13\1\227\4\13"+ + "\1\0\3\13\41\0\1\50\1\0\1\50\104\0\1\230"+ + "\1\50\105\0\1\50\5\0\1\50\2\0\1\231\1\232"+ + "\1\233\1\234\5\0\1\235\2\0\1\236\3\0\1\237"+ + "\54\0\1\50\105\0\1\50\1\0\1\240\103\0\1\50"+ + "\5\0\1\50\77\0\1\50\4\0\1\50\2\0\1\50"+ + "\26\0\1\50\3\0\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\13\1\241\2\13\1\242\3\13\1\243\1\244\7\13"+ + "\1\245\4\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\13"+ + "\1\246\3\13\13\0\1\247\7\13\1\250\10\13\1\251"+ + "\4\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\252\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\253\1\13\1\254\1\255\1\13\13\0\1\13\1\256"+ + "\2\13\1\257\2\13\1\260\7\13\1\261\2\13\1\223"+ + "\3\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\262"+ + "\1\13\1\263\1\13\13\0\12\13\1\264\1\13\1\265"+ + "\2\13\1\266\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\267\1\270\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\271\1\272"+ + "\4\13\1\273\1\13\1\274\12\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\275\15\13\1\276"+ + "\1\223\5\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\277\4\13\1\300\1\301\14\13\1\0"+ + "\3\13\1\12\5\13\1\0\1\12\1\302\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\3\0\1\303\1\0\1\304"+ + "\4\13\5\0\1\305\3\0\1\306\1\0\4\13\1\307"+ + "\10\13\1\274\6\13\1\310\1\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\3\13\1\311\1\13\13\0\11\13\1\312"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\313\5\13\1\314\14\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\3\13\1\315\1\13\13\0\1\13\1\316"+ + "\1\13\1\317\4\13\1\320\2\13\1\321\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\322"+ + "\1\13\1\323\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\324\1\13\1\325\1\13\13\0\1\13\1\326"+ + "\7\13\1\327\14\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\225\1\216\3\13\13\0\12\13\1\330\1\331\3\13"+ + "\1\332\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\10\13\1\333\10\13\1\334\4\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\2\13\1\335\1\13"+ + "\1\336\3\13\1\337\15\13\1\0\3\13\1\12\5\13"+ + "\1\0\1\12\1\340\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\3\0\1\341\1\0\5\13\5\0\1\342\3\0"+ + "\1\343\1\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\344\24\13\1\0\3\13\10\100"+ + "\2\0\11\100\2\0\1\100\1\0\53\100\1\0\3\100"+ + "\11\345\1\0\74\345\1\0\1\346\2\0\1\346\6\0"+ + "\4\346\7\0\1\347\1\350\4\0\5\346\13\0\5\346"+ + "\2\0\17\346\1\0\3\346\10\100\2\0\11\100\2\0"+ + "\1\100\1\347\53\100\1\0\3\100\1\0\1\346\2\351"+ + "\1\346\1\351\1\0\2\351\2\0\4\346\7\351\1\352"+ + "\1\353\1\0\3\351\5\346\13\351\5\346\2\351\17\346"+ + "\1\351\3\346\10\107\2\0\41\107\1\0\32\107\11\354"+ + "\1\0\74\354\10\113\2\0\11\113\2\0\1\113\1\0"+ + "\2\113\1\0\54\113\1\0\1\355\2\0\1\355\6\0"+ + "\4\355\7\0\1\356\1\357\4\0\5\355\13\0\5\355"+ + "\2\0\17\355\1\0\3\355\10\113\2\0\11\113\2\0"+ + "\1\113\1\356\2\113\1\0\54\113\1\0\1\355\2\360"+ + "\1\355\1\360\1\0\2\360\2\0\4\355\7\360\1\361"+ + "\1\362\1\0\3\360\5\355\13\360\5\355\2\360\17\355"+ + "\1\360\3\355\10\121\2\0\11\121\2\0\1\121\1\0"+ + "\67\121\2\0\11\121\2\0\1\121\1\0\54\121\1\363"+ + "\2\121\1\0\1\364\2\0\1\364\6\0\4\364\7\0"+ + "\1\365\1\366\4\0\5\364\13\0\5\364\2\0\17\364"+ + "\1\0\3\364\10\121\2\0\11\121\2\0\1\121\1\365"+ + "\57\121\1\0\1\364\2\367\1\364\1\367\1\0\2\367"+ + "\2\0\4\364\7\367\1\370\1\371\1\0\3\367\5\364"+ + "\13\367\5\364\2\367\17\364\1\367\3\364\10\127\2\0"+ + "\104\127\2\0\71\127\1\372\2\127\10\121\2\0\11\121"+ + "\2\0\1\121\1\0\54\121\1\373\2\121\10\127\2\0"+ + "\71\127\1\374\2\127\11\136\1\0\31\136\1\0\42\136"+ + "\35\0\1\375\16\0\1\376\1\377\1\u0100\1\u0101\5\0"+ + "\1\u0102\2\0\1\u0103\3\0\1\u0104\11\0\6\141\1\0"+ + "\2\141\2\0\4\141\4\0\1\141\2\0\1\141\5\0"+ + "\5\141\13\0\26\141\1\0\5\141\2\u0105\1\141\1\u0105"+ + "\1\0\2\141\2\0\4\141\1\u0106\3\0\1\141\2\0"+ + "\1\141\5\0\5\141\1\u0106\12\0\5\141\2\u0105\17\141"+ + "\1\0\5\141\2\145\1\141\1\145\1\0\2\141\2\0"+ + "\2\141\1\143\1\144\4\0\1\141\2\0\1\141\5\0"+ + "\4\141\1\143\13\0\3\141\1\144\1\141\2\145\11\141"+ + "\1\143\5\141\1\0\1\141\1\143\3\141\2\146\1\141"+ + "\1\146\1\0\2\141\2\0\2\141\1\143\1\144\1\0"+ + "\1\145\2\0\1\141\2\0\1\141\5\0\4\141\1\143"+ + "\13\0\3\141\1\144\1\141\2\146\11\141\1\143\5\141"+ + "\1\0\1\141\1\143\3\141\1\146\1\147\1\141\1\147"+ + "\1\0\2\141\2\0\1\141\1\u0107\1\143\1\144\1\0"+ + "\1\145\2\0\1\141\2\0\1\141\5\0\3\141\1\u0107"+ + "\1\143\13\0\3\141\1\144\1\141\2\147\11\141\1\143"+ + "\5\141\1\0\1\141\1\143\3\141\4\u0108\1\0\2\141"+ + "\2\0\2\141\2\u0108\4\0\1\141\2\0\1\141\5\0"+ + "\1\141\1\u0108\2\141\1\u0108\13\0\3\141\4\u0108\5\141"+ + "\1\u0108\3\141\1\u0108\5\141\1\0\1\141\1\u0108\1\141"+ + "\11\151\1\0\74\151\11\152\1\0\74\152\1\12\5\153"+ + "\1\0\2\12\2\0\4\153\4\0\1\12\2\0\1\12"+ + "\5\0\5\153\13\0\26\153\1\0\3\153\1\12\1\153"+ + "\2\12\1\153\1\12\1\0\2\12\2\0\4\153\4\0"+ + "\1\12\2\0\1\12\1\155\4\0\5\153\13\0\5\153"+ + "\2\12\17\153\1\0\3\153\1\0\1\u0109\2\0\1\u0109"+ + "\6\0\4\u0109\15\0\5\u0109\13\0\5\u0109\2\0\17\u0109"+ + "\1\0\3\u0109\1\0\5\156\5\0\4\156\15\0\5\156"+ + "\13\0\26\156\1\0\3\156\1\0\1\156\2\0\1\156"+ + "\6\0\4\156\10\0\1\155\4\0\5\156\13\0\5\156"+ + "\2\0\17\156\1\0\3\156\1\0\1\u0109\2\0\1\u0109"+ + "\2\0\2\161\2\0\4\u0109\10\161\1\0\4\161\5\u0109"+ + "\13\161\5\u0109\2\0\17\u0109\1\161\3\u0109\10\164\1\165"+ + "\21\164\1\u010a\64\164\1\0\74\164\32\167\1\u010b\53\167"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\4\13\1\u010c\21\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\320\22\13\1\0\3\13\46\172\1\u010d\37\172\52\173"+ + "\1\u010e\33\173\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\u010f\1\13"+ + "\13\0\10\13\1\u0110\15\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\13\1\u0111\3\13\13\0\10\13\1\246\15\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ + "\1\u0112\1\13\1\u0113\5\13\1\u0114\4\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\u0115\1\13\13\0\3\13"+ + "\1\u0116\6\13\1\u0117\1\u0118\3\13\1\u0119\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\272"+ + "\21\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\310\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\4\13\1\246\14\13\1\u011a\4\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\14\13\1\u011b"+ + "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\246\15\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u011c\4\13\13\0\13\13\1\u011d\12\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u011e\24\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\310\4\13\13\0"+ + "\17\13\1\u011f\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\4\13\1\u0120\13\0\1\13\1\u0121\6\13\1\u0122\2\13"+ + "\1\u0123\12\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ + "\1\u0124\1\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\24\13\1\u0125\1\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\223\25\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\223"+ + "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\12\13\1\u0126\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\20\13\1\u0127\5\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u0128\3\13\13\0\16\13\1\310"+ + "\7\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\u0129\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u012a\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u012b\4\13\13\0\17\13\1\u012c\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u012d\1\13\13\0"+ + "\20\13\1\u012e\5\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\310\22\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\13\13\1\u012f\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\13\13\1\307"+ + "\12\13\1\0\3\13\12\0\1\u0130\3\0\1\u0131\12\0"+ + "\1\u0132\11\0\1\50\7\0\1\u0133\26\0\1\u0134\60\0"+ + "\1\u0135\113\0\1\u0136\101\0\1\u0137\121\0\1\u0138\100\0"+ + "\1\u0139\76\0\1\u013a\1\u013b\102\0\1\u013c\73\0\1\50"+ + "\1\0\1\45\40\0\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\310\4\13"+ + "\13\0\1\310\25\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u013d\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u013e\7\13\1\u013f"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\225\25\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\u0140"+ + "\4\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\310\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\3\13\1\u0141\22\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\4\13\1\310\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\310\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\2\13"+ + "\1\310\2\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\u0142\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\310\2\13\1\267"+ + "\5\13\1\u0143\14\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u0144\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\20\13\1\310\5\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\1\13\1\u0140\3\13\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u0145\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\u0146\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u0147\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\4\13\1\u0148\21\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\u0149"+ + "\21\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\310\4\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\223\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\310\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\3\13\1\u014a\1\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\1\u014b\1\u014c\2\13\1\u014d"+ + "\13\0\4\13\1\u014e\2\13\1\u014f\2\13\1\u0150\4\13"+ + "\1\u0151\1\310\1\13\1\u0152\1\u0153\2\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\17\13\1\u0119\6\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u0154\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\u0120\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u0155\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\4\13\1\55\13\0\12\13\1\310\13\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\u0156\1\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\1\12"+ + "\1\340\2\0\4\13\4\0\1\12\2\0\1\12\3\0"+ + "\1\341\1\0\5\13\5\0\1\342\3\0\1\343\1\0"+ + "\21\13\1\u0157\4\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\u0158\7\13\1\u0159\12\13\1\0"+ + "\3\13\6\302\1\u015a\1\302\1\u015b\2\u015a\4\302\4\u015a"+ + "\1\302\2\u015a\1\302\5\u015a\5\302\13\u015a\26\302\1\u015a"+ + "\3\302\32\303\1\u015c\53\303\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\16\13\1\u015d\7\13\1\0\3\13\46\305\1\u015c"+ + "\37\305\52\306\1\u015c\33\306\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\310\25\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\u015e\22\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u015f\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\24\13\1\265"+ + "\1\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\3\13\1\u0145"+ + "\1\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u0160\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u0161\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\12\13\1\u0162"+ + "\13\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\307\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\330\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\223\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\2\13\1\u012a\2\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\u0155\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u0163\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\10\13\1\u0164\15\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u0165\1\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\11\13\1\u0166\14\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\4\13\1\u0167\21\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\u0168\2\13\1\u0169\1\u016a\13\0\1\u016b"+ + "\11\13\1\u016c\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\1\12\1\u016d\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\3\0\1\u016e\1\0\5\13\5\0\1\u016f\3\0\1\u0170"+ + "\1\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\13\1\u0171\24\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\11\13\1\u0172\14\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\201\1\u0173"+ + "\5\13\1\u0174\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\11\13\1\u0175\14\13\1\0\3\13\6\340"+ + "\1\u0176\1\340\1\u0177\2\u0176\4\340\4\u0176\1\340\2\u0176"+ + "\1\340\5\u0176\5\340\13\u0176\26\340\1\u0176\3\340\32\341"+ + "\1\u0178\53\341\46\342\1\u0179\37\342\52\343\1\u017a\33\343"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\201\14\13"+ + "\1\0\3\13\1\0\5\346\5\0\4\346\15\0\5\346"+ + "\13\0\26\346\1\0\3\346\1\0\1\346\2\0\1\346"+ + "\6\0\4\346\10\0\1\350\4\0\5\346\13\0\5\346"+ + "\2\0\17\346\1\0\3\346\1\0\1\u017b\2\0\1\u017b"+ + "\6\0\4\u017b\15\0\5\u017b\13\0\5\u017b\2\0\17\u017b"+ + "\1\0\3\u017b\1\0\1\u017b\2\0\1\u017b\2\0\2\351"+ + "\2\0\4\u017b\10\351\1\0\4\351\5\u017b\13\351\5\u017b"+ + "\2\0\17\u017b\1\351\3\u017b\1\0\5\355\5\0\4\355"+ + "\15\0\5\355\13\0\26\355\1\0\3\355\1\0\1\355"+ + "\2\0\1\355\6\0\4\355\10\0\1\357\4\0\5\355"+ + "\13\0\5\355\2\0\17\355\1\0\3\355\1\0\1\u017c"+ + "\2\0\1\u017c\6\0\4\u017c\15\0\5\u017c\13\0\5\u017c"+ + "\2\0\17\u017c\1\0\3\u017c\1\0\1\u017c\2\0\1\u017c"+ + "\2\0\2\360\2\0\4\u017c\10\360\1\0\4\360\5\u017c"+ + "\13\360\5\u017c\2\0\17\u017c\1\360\3\u017c\10\121\2\0"+ + "\11\121\2\0\1\121\1\0\55\121\1\u017d\1\121\1\0"+ + "\5\364\5\0\4\364\15\0\5\364\13\0\26\364\1\0"+ + "\3\364\1\0\1\364\2\0\1\364\6\0\4\364\10\0"+ + "\1\366\4\0\5\364\13\0\5\364\2\0\17\364\1\0"+ + "\3\364\1\0\1\u017e\2\0\1\u017e\6\0\4\u017e\15\0"+ + "\5\u017e\13\0\5\u017e\2\0\17\u017e\1\0\3\u017e\1\0"+ + "\1\u017e\2\0\1\u017e\2\0\2\367\2\0\4\u017e\10\367"+ + "\1\0\4\367\5\u017e\13\367\5\u017e\2\0\17\u017e\1\367"+ + "\3\u017e\10\127\2\0\72\127\1\u017f\1\127\10\121\2\0"+ + "\11\121\2\0\1\121\1\0\56\121\1\u017d\10\127\2\0"+ + "\73\127\1\u017f\75\0\1\u0180\65\0\1\u0181\113\0\1\u0182"+ + "\101\0\1\u0183\121\0\1\u0184\100\0\1\u0185\76\0\1\u0186"+ + "\1\u0187\102\0\1\u0188\30\0\2\141\2\u0105\1\141\1\u0105"+ + "\1\0\2\141\2\0\2\141\1\143\1\141\4\0\1\141"+ + "\2\0\1\141\5\0\4\141\1\143\13\0\5\141\2\u0105"+ + "\11\141\1\143\5\141\1\0\1\141\1\143\1\141\2\0"+ + "\2\u0105\1\0\1\u0105\53\0\2\u0105\23\0\2\141\4\u0108"+ + "\1\0\2\141\2\0\1\141\1\u0107\2\u0108\4\0\1\141"+ + "\2\0\1\141\5\0\1\141\1\u0108\1\141\1\u0107\1\u0108"+ + "\13\0\3\141\4\u0108\5\141\1\u0108\3\141\1\u0108\5\141"+ + "\1\0\1\141\1\u0108\1\141\1\0\5\u0109\5\0\4\u0109"+ + "\11\0\1\161\3\0\5\u0109\13\0\26\u0109\1\0\3\u0109"+ + "\34\0\5\u010a\13\0\2\u010a\2\0\1\u010a\4\0\1\u010a"+ + "\1\0\1\u010a\2\0\1\u010a\2\0\1\u010a\10\0\32\u010b"+ + "\1\u0189\53\u010b\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\u018a\1\13"+ + "\13\0\26\13\1\0\3\13\46\u010d\1\u0189\37\u010d\52\u010e"+ + "\1\u0189\33\u010e\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ + "\1\u018b\14\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u018c\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\15\13\1\u018d\10\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\20\13\1\246\5\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\13\1\u0155\3\13"+ + "\13\0\10\13\1\u018e\5\13\1\u014b\4\13\1\u018f\2\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\u0190\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0191\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\15\13\1\u0192\10\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\1\u0193\4\13\13\0\1\u0194\1\13"+ + "\1\u0195\13\13\1\u0196\1\u0197\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u0155\3\13\13\0\1\13\1\307"+ + "\14\13\1\u014b\7\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\4\13\1\u0198\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u0199\4\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\u019a\1\u019b\3\13\13\0\1\13\1\u019c"+ + "\6\13\1\u018e\1\13\1\u019d\10\13\1\u018f\2\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u019e\1\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\u019f\4\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\12\13\1\u01a0\4\13\1\u0115\6\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\251\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\1\310"+ + "\12\13\1\307\7\13\1\201\2\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u01a1\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u0119"+ + "\24\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\3\13\1\u01a2"+ + "\1\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\246\25\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\246\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01a3\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u01a4\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\16\13\1\u01a5\7\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\12\13\1\u01a6\13\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\15\13\1\310\10\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\u0175\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u01a7\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\13\1\u01a8\3\13\13\0\1\13\1\u019c\24\13"+ + "\1\0\3\13\12\0\1\u0130\16\0\1\u0132\21\0\1\u0133"+ + "\26\0\1\u0134\106\0\1\u01a9\20\0\1\u01aa\105\0\1\u01ab"+ + "\105\0\1\u01ac\127\0\1\u01ad\124\0\1\u013c\106\0\1\u01ae"+ + "\62\0\1\u01af\2\0\1\u01ad\124\0\1\u01b0\120\0\1\u01b1"+ + "\50\0\1\u01b2\134\0\1\u01ad\21\0\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\15\13\1\u01b3\10\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u01b4\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\17\13\1\u01b5"+ + "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\2\13\1\310\23\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\17\13\1\u0192\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\223\3\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\1\u01b6\4\13\13\0\12\13"+ + "\1\310\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\223\5\13\1\u01b7\14\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\310\1\13\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\u01b8\4\13\13\0"+ + "\1\u01b9\1\13\1\u0195\13\13\1\u0196\1\u0197\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u0125"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\u01ba\15\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\17\13\1\u01bb\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\21\13\1\u01bc\4\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\246"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\7\13\1\310\16\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\223\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\4\13\1\u01bd\13\0\26\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u01be\22\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\21\13"+ + "\1\u01bf\4\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0166\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\21\13\1\u01c0\4\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01c1\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\4\13\1\55\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\12\13\1\u0145\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\3\13\1\u0192\1\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u01c2\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01c3"+ + "\22\13\1\0\3\13\10\u015a\1\u015c\75\u015a\6\12\1\0"+ + "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ + "\5\u015b\13\0\2\u015b\2\12\1\u015b\4\12\1\u015b\1\12"+ + "\1\u015b\2\12\1\u015b\2\12\1\u015b\4\12\1\0\3\12"+ + "\34\0\5\u015c\13\0\2\u015c\2\0\1\u015c\4\0\1\u015c"+ + "\1\0\1\u015c\2\0\1\u015c\2\0\1\u015c\10\0\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\272\1\u0155\3\13\13\0\10\13\1\u01c4"+ + "\5\13\1\u014b\7\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\265\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\4\13\1\310\13\0\13\13\1\u01c5\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\14\13\1\310"+ + "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\13\1\310\24\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u01c6\1\310\1\13\1\u01c7\1\13\13\0\1\u01c8\1\13"+ + "\1\u01c9\13\13\1\u01ca\1\u01cb\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u012c\3\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01cc"+ + "\7\13\1\u01cd\1\13\1\310\10\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\3\13\1\u01ce\22\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\13\13\1\225"+ + "\12\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\u012c\4\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\2\13\1\u01cf\23\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u01d0\5\13\1\u01d1\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\256\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0163\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\11\13\1\u01d2\14\13\1\0\3\13"+ + "\6\u016d\1\u01d3\1\u016d\1\u01d4\2\u01d3\4\u016d\4\u01d3\1\u016d"+ + "\2\u01d3\1\u016d\3\u01d3\1\0\1\u01d3\5\u016d\13\u01d3\26\u016d"+ + "\1\u01d3\3\u016d\32\u016e\1\u01d5\53\u016e\32\u016f\1\0\13\u016f"+ + "\1\u01d6\37\u016f\32\u0170\1\0\17\u0170\1\u01d7\33\u0170\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u01d8\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u01d9\1\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\12\13\1\u01da\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\u01db\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\225\13\13\1\0"+ + "\3\13\10\u0176\1\u01dc\75\u0176\6\u0177\1\u01dc\1\u0177\1\u01dd"+ + "\2\u01dc\4\u0177\4\u01dc\1\u0177\2\u01dc\1\u0177\5\u01dc\5\u0177"+ + "\13\u01dc\26\u0177\1\u01dc\3\u0177\32\u0178\1\u01de\53\u0178\46\u0179"+ + "\1\u01de\37\u0179\52\u017a\1\u01de\33\u017a\1\0\5\u017b\5\0"+ + "\4\u017b\11\0\1\351\3\0\5\u017b\13\0\26\u017b\1\0"+ + "\3\u017b\1\0\5\u017c\5\0\4\u017c\11\0\1\360\3\0"+ + "\5\u017c\13\0\26\u017c\1\0\3\u017c\1\0\5\u017e\5\0"+ + "\4\u017e\11\0\1\367\3\0\5\u017e\13\0\26\u017e\1\0"+ + "\3\u017e\66\0\1\u01df\57\0\1\u01e0\124\0\1\u0188\106\0"+ + "\1\u01e1\62\0\1\u01e2\2\0\1\u01e0\124\0\1\u01e3\120\0"+ + "\1\u01e4\50\0\1\u01e5\134\0\1\u01e0\55\0\5\u0189\13\0"+ + "\2\u0189\1\0\2\u0189\3\0\2\u0189\1\0\1\u0189\2\0"+ + "\1\u0189\2\0\1\u0189\10\0\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\251\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\13\1\225\3\13\13\0\12\13\1\310\13\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u01e6\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u01e7\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u01e8\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\337\15\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\4\13\1\u01e9\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\246"+ + "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u01ea\1\13\1\u01eb\22\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u01ec"+ + "\5\13\1\u01ed\4\13\1\u01ee\2\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u01ef\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u01ee"+ + "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\u01f0\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\24\13\1\310\1\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\251\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01f1"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\4\13\1\314\21\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\u01a6\25\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u01ba\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01d1\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\u0192\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u01f2\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\246\24\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\251\22\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\u01f3\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ + "\1\u01f4\1\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\12\13\1\u0140\13\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\201\22\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u01f5\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ + "\1\u01f6\1\13\13\0\26\13\1\0\3\13\104\0\1\u01f7"+ + "\1\u01f8\103\0\1\u01f9\105\0\1\u01fa\105\0\1\u01fb\42\0"+ + "\1\u01fc\122\0\1\u01fd\117\0\1\u01ad\103\0\1\u01fe\111\0"+ + "\1\u01ad\14\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u01ff\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\13\1\u0200\24\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\12\13\1\u0201\13\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\12\13\1\265\13\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\20\13"+ + "\1\223\5\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u01eb\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\10\13\1\u0202\12\13\1\u01ee\2\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\13\13"+ + "\1\310\12\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\6\13\1\310\17\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\265\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\u0203\1\u0120\13\0\1\u0204"+ + "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\u0205\15\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\10\13\1\201\15\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\11\13\1\u0206\14\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\17\13\1\u0207"+ + "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\u0208"+ + "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u014c\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u0209\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u020a"+ + "\1\13\1\u020b\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u020c\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\u020d\2\13\1\u020e\4\13"+ + "\1\u020f\5\13\1\u01ed\4\13\1\u0210\2\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u0211\24\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\u0212\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0213\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\u0214\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\u0215\1\13\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u0161\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u0112\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u0216\4\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u012c\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\223\1\13\13\0"+ + "\3\13\1\310\22\13\1\0\3\13\10\u01d3\1\u0217\21\u01d3"+ + "\1\0\53\u01d3\6\u016d\1\u01d3\1\u016d\1\u01d4\2\u01d3\4\u016d"+ + "\4\u01d3\1\u016d\2\u01d3\1\u016d\3\u01d3\1\0\1\u01d3\1\u01d4"+ + "\1\u016d\3\u01d4\13\u01d3\2\u01d4\2\u016d\1\u01d4\4\u016d\1\u01d4"+ + "\1\u016d\1\u01d4\5\u016d\1\u01d4\4\u016d\1\u01d3\3\u016d\34\0"+ + "\1\u01d5\1\0\3\u01d5\13\0\2\u01d5\2\0\1\u01d5\4\0"+ + "\1\u01d5\1\0\1\u01d5\5\0\1\u01d5\10\0\32\u016f\1\0"+ + "\1\u016f\1\u01d6\1\u016f\3\u01d6\5\u016f\1\u01d6\5\u016f\2\u01d6"+ + "\2\u016f\1\u01d6\4\u016f\1\u01d6\1\u016f\1\u01d6\5\u016f\1\u01d6"+ + "\10\u016f\32\u0170\1\0\1\u0170\1\u01d7\1\u0170\3\u01d7\11\u0170"+ + "\1\u01d7\1\u0170\2\u01d7\2\u0170\1\u01d7\4\u0170\1\u01d7\1\u0170"+ + "\1\u01d7\5\u0170\1\u01d7\10\u0170\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0218\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\223\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\u020d\25\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\u0219"+ + "\21\13\1\0\3\13\10\u01dc\1\u01de\75\u01dc\6\12\1\0"+ + "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ + "\2\u01dd\2\12\1\u01dd\13\0\10\12\1\u01dd\15\12\1\0"+ + "\3\12\34\0\2\u01de\2\0\1\u01de\23\0\1\u01de\61\0"+ + "\1\u021a\122\0\1\u021b\117\0\1\u01e0\103\0\1\u021c\111\0"+ + "\1\u01e0\14\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\256\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\12\13\1\u021d\13\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\u0119\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u021e\24\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\13\1\u021f\3\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\10\13\1\u0220\15\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\u0221\7\13\1\u0222\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\307\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0223\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u01f0\4\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u01ee\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u012c"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\u0224\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\246\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u0119\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u0205\24\13"+ + "\1\0\3\13\104\0\1\u0225\1\u0226\104\0\1\u0227\1\u0228"+ + "\104\0\1\u0229\1\u022a\61\0\2\u01ad\63\0\1\u022b\140\0"+ + "\1\u01ad\12\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\16\13"+ + "\1\225\7\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\12\13\1\u022c\13\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\u0221\24\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u022d\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ + "\1\244\14\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\225"+ + "\4\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\10\13\1\225\15\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\4\13\1\274\13\0\26\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\4\13\1\u0175\21\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\4\13\1\225\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\u022e"+ + "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\10\13\1\u022f\15\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\16\13\1\344\7\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0119"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\u0230\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u0231\7\13\1\u0222\14\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223"+ + "\13\13\1\u0232\1\13\1\u020d\4\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\u0213\4\13\13\0\26\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\12\13"+ + "\1\u020d\1\u0232\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\u0233\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u0234\3\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0235"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\223\4\13"+ + "\13\0\26\13\1\0\3\13\10\u01d3\1\u0217\21\u01d3\1\0"+ + "\1\u01d3\1\u0217\1\u01d3\3\u0217\13\u01d3\2\u0217\2\u01d3\1\u0217"+ + "\4\u01d3\1\u0217\1\u01d3\1\u0217\5\u01d3\1\u0217\10\u01d3\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\13\13\1\u0236\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u0237"+ + "\15\13\1\0\3\13\61\0\2\u01e0\63\0\1\u0238\140\0"+ + "\1\u01e0\12\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\1\u0239"+ + "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\23\13\1\201\2\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\15\13\1\u023a\10\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\7\13\1\u01ee\16\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\12\13\1\u023b"+ + "\13\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\13\1\u023c\24\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\17\13\1\246\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\21\13\1\u01d9\4\13\1\0"+ + "\3\13\31\0\1\u01f7\105\0\1\u01f8\127\0\1\u023d\105\0"+ + "\1\u023e\134\0\1\u01f7\105\0\1\u01f8\70\0\1\u023f\20\0"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\24\13\1\244\1\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u0240\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\15\13\1\u0241\10\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\7\13\1\u0242\16\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\u0243\15\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\u0244\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u01ba\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u0223\10\13\1\u0245\11\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\2\13"+ + "\1\223\23\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\17\13\1\225\6\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u0246\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\u0247\15\13"+ + "\1\0\3\13\65\0\1\u0248\20\0\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\4\13\1\u0120\21\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u0125\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u01ee"+ + "\24\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\u0249\15\13\1\0\3\13\73\0\1\u024a\12\0"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\310\11\13"+ + "\1\310\10\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\13\1\u0125\15\13\1\u0151\6\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\10\13"+ + "\1\u024b\11\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\17\13\1\u0151\6\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\u024c\24\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\24\13\1\u024d\1\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\u024e\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0198\21\13\1\0\3\13\73\0\1\u024f"+ + "\12\0\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0250"+ + "\14\13\1\0\3\13\72\0\1\u01ad\13\0\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\24\13\1\u0251\1\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\10\13"+ + "\1\u0252\11\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0253\12\13\1\u0151\6\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\4\13\1\310\21\13"+ + "\1\0\3\13\72\0\1\u01e0\13\0\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\u0198\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\u0254\16\13\1\u0151\6\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\24\13"+ + "\1\u0255\1\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\u0256\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\204\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u0257\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\4\13\1\251\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u0166\14\13\1\u0258\4\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\13\13\1\u0259\12\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\14\13\1\u01a2\11\13"+ + "\1\0\3\13"; + + private static int [] zzUnpackTrans() { + int [] result = new int[38500]; + 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; + } + + + /* 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; + + /* 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 = + "\11\0\4\1\1\11\1\1\1\11\3\1\2\11\4\1"+ + "\1\11\15\1\1\11\1\1\1\11\24\1\1\11\2\1"+ + "\1\11\3\1\1\11\2\1\2\11\1\1\1\11\3\1"+ + "\1\11\1\1\1\11\5\1\1\11\1\1\1\11\1\1"+ + "\1\11\2\1\1\11\15\1\1\0\1\1\1\0\1\1"+ + "\1\11\1\1\3\0\1\1\1\0\2\1\2\0\34\1"+ + "\10\0\43\1\1\0\1\1\2\0\32\1\3\0\1\1"+ + "\1\11\2\1\1\0\1\11\1\1\1\0\1\11\2\1"+ + "\1\0\1\11\1\1\1\0\3\1\1\0\1\11\1\1"+ + "\1\0\3\1\10\0\1\1\1\0\2\1\1\0\1\1"+ + "\1\0\1\1\2\0\41\1\15\0\35\1\1\0\23\1"+ + "\3\0\5\1\1\0\1\1\5\0\1\1\1\0\1\1"+ + "\11\0\40\1\4\0\1\11\5\0\40\1\1\0\10\1"+ + "\1\0\2\1\2\11\5\0\21\1\2\11\6\0\33\1"+ + "\3\0\10\1\7\0\14\1\1\0\4\1\2\11\1\0"+ + "\10\1\1\0\1\1\1\0\4\1\1\0\12\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[601]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an single quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -3; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an single quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -4; + + /** + * Token type specific to PerlTokenMaker; this signals we are in a POD + * block. + */ + public static final int INTERNAL_POD = -5; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PerlTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return super.getMarkOccurrencesOfTokenType(type) || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + start = text.offset; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_UNQUOTED: + state = HEREDOC_EOF_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: + state = HEREDOC_EOF_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_UNQUOTED: + state = HEREDOC_EOT_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: + state = HEREDOC_EOT_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_POD: + state = POD; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + // We basically try to mimic Eclipse's JS editor's behavior here. + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' || + ch=='!' || + ch=='&' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PerlTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PerlTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 174) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: + { addToken(Token.IDENTIFIER); + } + case 46: break; + case 34: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 47: break; + case 40: + { if (start==zzStartRead) { addToken(Token.COMMENT_DOCUMENTATION); yybegin(YYINITIAL); } + } + case 48: break; + case 26: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 49: break; + case 11: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 50: break; + case 38: + { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } + } + case 51: break; + case 31: + { addToken(Token.FUNCTION); + } + case 52: break; + case 36: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 53: break; + case 30: + { addToken(Token.VARIABLE); + } + case 54: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 55: break; + case 24: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; + } + case 56: break; + case 4: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 57: break; + case 29: + { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; + } + case 58: break; + case 41: + { if (start==zzStartRead) { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + } + case 59: break; + case 44: + { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED); + } + case 60: break; + case 45: + { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED); + } + case 61: break; + case 42: + { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED); + } + case 62: break; + case 13: + { /* Skip escaped chars. */ + } + case 63: break; + case 37: + { addToken(Token.REGEX); + } + case 64: break; + case 18: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 65: break; + case 28: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 66: break; + case 21: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; + } + case 67: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 68: break; + case 10: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 69: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 70: break; + case 33: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 71: break; + case 20: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + } + case 72: break; + case 15: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 73: break; + case 16: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 74: break; + case 23: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; + } + case 75: break; + case 35: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.PREPROCESSOR); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 76: break; + case 39: + { addToken(Token.COMMENT_EOL); start = zzMarkedPos; yybegin(POD); + } + case 77: break; + case 32: + { addToken(Token.RESERVED_WORD); + } + case 78: break; + case 19: + { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 79: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 80: break; + case 5: + { addNullToken(); return firstToken; + } + case 81: break; + case 7: + { addToken(Token.OPERATOR); + } + case 82: break; + case 17: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 83: break; + case 25: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; + } + case 84: break; + case 27: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 85: break; + case 43: + { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED); + } + case 86: break; + case 9: + { start = zzMarkedPos-1; yybegin(BACKTICKS); + } + case 87: break; + case 12: + { + } + case 88: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 89: break; + case 22: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; + } + case 90: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case HEREDOC_EOF_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; + } + case 602: break; + case HEREDOC_EOT_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; + } + case 603: break; + case HEREDOC_EOT_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; + } + case 604: break; + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 605: break; + case BACKTICKS: { + addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 606: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 607: break; + case HEREDOC_EOF_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; + } + case 608: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 609: break; + case POD: { + addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; + } + case 610: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex new file mode 100644 index 0000000..26d269f --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex @@ -0,0 +1,227 @@ +/* + * 11/07/2008 + * + * PlainTextTokenMaker.flex - Scanner for plain text files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for plain text files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PlainTextTokenMaker.java file will contain + * two definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class PlainTextTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PlainTextTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns Token.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return Token.NULL. + */ + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return Token.NULL; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +LetterOrDigit = ([a-zA-Z0-9]) +Identifier = ({LetterOrDigit}+) +Separator = ([^a-zA-Z0-9 \t\n]) +WhiteSpace = ([ \t]+) +LineTerminator = ([\n]) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|[_\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%% + + { + {URL} { addToken(Token.IDENTIFIER, true); } + {Identifier} { addToken(Token.IDENTIFIER, false); } + {Separator} { addToken(Token.IDENTIFIER, false); } + {WhiteSpace} { addToken(Token.WHITESPACE, false); } + {LineTerminator} { addNullToken(); return firstToken; } + <> { addNullToken(); return firstToken; } + . { /* Never happens */ addToken(Token.IDENTIFIER, false); } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java new file mode 100644 index 0000000..710aa06 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java @@ -0,0 +1,648 @@ +/* The following code was generated by JFlex 1.4.1 on 12/9/11 6:40 PM */ + +/* + * 11/07/2008 + * + * PlainTextTokenMaker.flex - Scanner for plain text files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for plain text files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PlainTextTokenMaker.java file will contain + * two definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class PlainTextTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\1\6\1\4"+ + "\7\4\1\4\1\21\1\5\12\1\1\17\1\4\1\0\1\4\1\0"+ + "\2\4\32\1\1\4\1\0\1\4\1\0\1\4\1\0\4\1\1\16"+ + "\1\13\1\1\1\7\1\14\2\1\1\15\3\1\1\11\2\1\1\12"+ + "\1\10\2\1\1\20\3\1\3\0\1\4\uff81\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 = + "\1\0\2\1\1\2\1\3\14\1\1\0\1\4\2\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[21]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\22\0\44\0\22\0\66\0\110\0\132\0\154"+ + "\0\176\0\220\0\242\0\264\0\306\0\330\0\352\0\374"+ + "\0\u010e\0\u0120\0\u0132\0\u0144\0\u0132"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[21]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\4\1\5\3\2\1\6\3\3\1\7"+ + "\3\3\1\2\1\10\1\2\23\0\1\3\5\0\10\3"+ + "\1\0\1\3\4\0\1\5\17\0\1\3\5\0\1\3"+ + "\1\11\6\3\1\0\1\3\2\0\1\3\5\0\1\3"+ + "\1\12\3\3\1\13\2\3\1\0\1\3\2\0\1\3"+ + "\5\0\10\3\1\0\1\14\2\0\1\3\5\0\1\3"+ + "\1\15\6\3\1\0\1\3\2\0\1\3\5\0\2\3"+ + "\1\16\5\3\1\0\1\3\2\0\1\3\5\0\6\3"+ + "\1\17\1\3\1\0\1\3\2\0\1\3\5\0\10\3"+ + "\1\0\1\20\2\0\1\3\5\0\2\3\1\21\5\3"+ + "\1\0\1\3\2\0\1\3\5\0\10\3\1\22\1\3"+ + "\2\0\1\3\5\0\7\3\1\16\1\0\1\3\2\0"+ + "\1\3\5\0\10\3\1\0\1\3\1\23\1\0\1\3"+ + "\5\0\3\3\1\16\4\3\1\22\1\3\6\0\1\24"+ + "\15\0\1\23\2\0\1\25\12\23\1\25\1\23\1\25"+ + "\5\0\1\23\14\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[342]; + 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; + } + + + /* 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; + + /* 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 = + "\1\0\1\11\1\1\1\11\15\1\1\0\1\1\2\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[21]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PlainTextTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns Token.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return Token.NULL. + */ + @Override + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return Token.NULL; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PlainTextTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PlainTextTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 94) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { addToken(Token.WHITESPACE, false); + } + case 5: break; + case 2: + { addNullToken(); return firstToken; + } + case 6: break; + case 4: + { addToken(Token.IDENTIFIER, true); + } + case 7: break; + case 1: + { addToken(Token.IDENTIFIER, false); + } + case 8: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 22: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex new file mode 100644 index 0000000..3352606 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex @@ -0,0 +1,233 @@ +/* + * 03/21/2005 + * + * PropertiesFileTokenMaker.java - Scanner for properties files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a Java properties file.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PropertiesFileTokenMaker.java file will + * contain two definitions of both zzRefill and + * yyreset. You should hand-delete the second of each + * definition (the ones generated by the lexer), as these generated + * methods modify the input buffer, which we'll never have to do. + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway. + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance. + *
+ * + * @author Robert Futrell + * @version 0.4 + * + */ +%% + +%public +%class PropertiesFileTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PropertiesFileTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = VALUE; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Equals = ([=\:]) +Name = ([^=\: \t\n#!]*) +Whitespace = ([ \t]+) +Comment = ([#!].*) +SingleQuote = (') + +%state VALUE + +%% + + { + {Name} { addToken(Token.RESERVED_WORD); } + {Equals} { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {Comment} { addToken(Token.COMMENT_EOL); } + <> { addNullToken(); return firstToken; } +} + + { + {SingleQuote}[^']*{SingleQuote}? { addToken(start, zzMarkedPos-1, Token.LITERAL_STRING_DOUBLE_QUOTE); start = zzMarkedPos; } + [^'\{\\]+ {} + "{"[^\}]*"}"? { int temp=zzStartRead; addToken(start, zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp, zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + [\\]. {} + [\\] { addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java new file mode 100644 index 0000000..be1d931 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java @@ -0,0 +1,661 @@ +/* The following code was generated by JFlex 1.4.1 on 1/28/11 4:16 PM */ + +/* + * 03/21/2005 + * + * PropertiesFileTokenMaker.java - Scanner for properties files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a Java properties file.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated PropertiesFileTokenMaker.java file will + * contain two definitions of both zzRefill and + * yyreset. You should hand-delete the second of each + * definition (the ones generated by the lexer), as these generated + * methods modify the input buffer, which we'll never have to do. + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway. + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance. + *
+ * + * @author Robert Futrell + * @version 0.4 + * + */ + +public class PropertiesFileTokenMaker extends AbstractJFlexTokenMaker { + + /** 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; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int VALUE = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\3\0\1\5"+ + "\22\0\1\1\2\0\1\1\36\0\1\6\36\0\1\7\1\0\1\10"+ + "\uff82\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 = + "\1\1\1\0\1\1\1\2\1\3\1\4\1\5\1\6"+ + "\1\7\1\10\1\6\1\5\1\10"; + + private static int [] zzUnpackAction() { + int [] result = new int[13]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\11\0\22\0\33\0\44\0\55\0\66\0\77"+ + "\0\110\0\121\0\33\0\33\0\33"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[13]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\0\1\5\1\6\4\3\5\7\1\10"+ + "\1\11\1\12\1\7\1\3\4\0\4\3\14\0\1\5"+ + "\5\0\2\6\1\0\6\6\5\7\3\0\1\7\5\10"+ + "\1\13\3\10\2\14\1\0\6\14\10\12\1\15"; + + private static int [] zzUnpackTrans() { + int [] result = new int[90]; + 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; + } + + + /* 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; + + /* 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 = + "\1\1\1\0\1\1\1\11\6\1\3\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[13]; + 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 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PropertiesFileTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = VALUE; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PropertiesFileTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PropertiesFileTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 42) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 7: + { addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 9: break; + case 2: + { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); + } + case 10: break; + case 8: + { int temp=zzStartRead; addToken(start, zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp, zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 11: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 12: break; + case 6: + { addToken(start, zzMarkedPos-1, Token.LITERAL_STRING_DOUBLE_QUOTE); start = zzMarkedPos; + } + case 13: break; + case 1: + { addToken(Token.RESERVED_WORD); + } + case 14: break; + case 5: + { + } + case 15: break; + case 4: + { addToken(Token.COMMENT_EOL); + } + case 16: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 14: break; + case VALUE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addNullToken(); return firstToken; + } + case 15: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex new file mode 100644 index 0000000..0c1b41b --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex @@ -0,0 +1,438 @@ +/* + * 12/06/2005 + * + * PythonTokenMaker.java - Token maker for the Python programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenMaker; + + +/** + * Scanner for the Python programming language. + * + * @author Robert Futrell + * @version 0.3 + */ +%% + +%public +%class PythonTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PythonTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = LONG_STRING_2; + break; + case Token.LITERAL_CHAR: + state = LONG_STRING_1; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + +%} + +/* This part is taken from http://www.python.org/doc/2.2.3/ref/grammar.txt */ +identifier = (({letter}|"_")({letter}|{digit}|"_")*) +letter = ({lowercase}|{uppercase}) +lowercase = ([a-z]) +uppercase = ([A-Z]) +digit = ([0-9]) +stringliteral = ({stringprefix}?{shortstring}) +stringprefix = ("r"|"u"[rR]?|"R"|"U"[rR]?) +shortstring1 = ([\']{shortstring1item}*[\']?) +shortstring2 = ([\"]{shortstring2item}*[\"]?) +shortstring = ({shortstring1}|{shortstring2}) +shortstring1item = ({shortstring1char}|{escapeseq}) +shortstring2item = ({shortstring2char}|{escapeseq}) +shortstring1char = ([^\\\n\']) +shortstring2char = ([^\\\n\"]) +escapeseq = ([\\].) +longinteger = ({integer}[lL]) +integer = ({decimalinteger}|{octinteger}|{hexinteger}) +decimalinteger = ({nonzerodigit}{digit}*|"0") +octinteger = ("0"{octdigit}+) +hexinteger = ("0"[xX]{hexdigit}+) +nonzerodigit = ([1-9]) +octdigit = ([0-7]) +hexdigit = ({digit}|[a-f]|[A-F]) +floatnumber = ({pointfloat}|{exponentfloat}) +pointfloat = ({intpart}?{fraction}|{intpart}".") +exponentfloat = (({intpart}|{pointfloat}){exponent}) +intpart = ({digit}+) +fraction = ("."{digit}+) +exponent = ([eE][\+\-]?{digit}+) +imagnumber = (({floatnumber}|{intpart})[jJ]) + +ErrorNumberFormat = ({digit}{NonSeparator}+) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") + +LongStringStart1 = ({stringprefix}?\'\'\') +LongStringStart2 = ({stringprefix}?\"\"\") + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +LineComment = ("#".*) + + +%state LONG_STRING_1 +%state LONG_STRING_2 + + +%% + +/* Keywords */ + "and" { addToken(Token.RESERVED_WORD); } + "as" { addToken(Token.RESERVED_WORD); } + "assert" { addToken(Token.RESERVED_WORD); } + "break" { addToken(Token.RESERVED_WORD); } + "class" { addToken(Token.RESERVED_WORD); } + "continue" { addToken(Token.RESERVED_WORD); } + "def" { addToken(Token.RESERVED_WORD); } + "del" { addToken(Token.RESERVED_WORD); } + "elif" { addToken(Token.RESERVED_WORD); } + "else" { addToken(Token.RESERVED_WORD); } + "except" { addToken(Token.RESERVED_WORD); } + "exec" { addToken(Token.RESERVED_WORD); } + "finally" { addToken(Token.RESERVED_WORD); } + "for" { addToken(Token.RESERVED_WORD); } + "from" { addToken(Token.RESERVED_WORD); } + "global" { addToken(Token.RESERVED_WORD); } + "if" { addToken(Token.RESERVED_WORD); } + "import" { addToken(Token.RESERVED_WORD); } + "in" { addToken(Token.RESERVED_WORD); } + "is" { addToken(Token.RESERVED_WORD); } + "lambda" { addToken(Token.RESERVED_WORD); } + "not" { addToken(Token.RESERVED_WORD); } + "or" { addToken(Token.RESERVED_WORD); } + "pass" { addToken(Token.RESERVED_WORD); } + "print" { addToken(Token.RESERVED_WORD); } + "raise" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD); } + "try" { addToken(Token.RESERVED_WORD); } + "while" { addToken(Token.RESERVED_WORD); } + "yield" { addToken(Token.RESERVED_WORD); } + +/* Data types. */ + "char" { addToken(Token.DATA_TYPE); } + "double" { addToken(Token.DATA_TYPE); } + "float" { addToken(Token.DATA_TYPE); } + "int" { addToken(Token.DATA_TYPE); } + "long" { addToken(Token.DATA_TYPE); } + "short" { addToken(Token.DATA_TYPE); } + "signed" { addToken(Token.DATA_TYPE); } + "unsigned" { addToken(Token.DATA_TYPE); } + "void" { addToken(Token.DATA_TYPE); } + +/* Standard functions */ + "abs" { addToken(Token.FUNCTION); } + "apply" { addToken(Token.FUNCTION); } + "bool" { addToken(Token.FUNCTION); } + "buffer" { addToken(Token.FUNCTION); } + "callable" { addToken(Token.FUNCTION); } + "chr" { addToken(Token.FUNCTION); } + "classmethod" { addToken(Token.FUNCTION); } + "cmp" { addToken(Token.FUNCTION); } + "coerce" { addToken(Token.FUNCTION); } + "compile" { addToken(Token.FUNCTION); } + "complex" { addToken(Token.FUNCTION); } + "delattr" { addToken(Token.FUNCTION); } + "dict" { addToken(Token.FUNCTION); } + "dir" { addToken(Token.FUNCTION); } + "divmod" { addToken(Token.FUNCTION); } + "enumerate" { addToken(Token.FUNCTION); } + "eval" { addToken(Token.FUNCTION); } + "execfile" { addToken(Token.FUNCTION); } + "file" { addToken(Token.FUNCTION); } + "filter" { addToken(Token.FUNCTION); } + "float" { addToken(Token.FUNCTION); } + "getattr" { addToken(Token.FUNCTION); } + "globals" { addToken(Token.FUNCTION); } + "hasattr" { addToken(Token.FUNCTION); } + "hash" { addToken(Token.FUNCTION); } + "hex" { addToken(Token.FUNCTION); } + "id" { addToken(Token.FUNCTION); } + "input" { addToken(Token.FUNCTION); } + "int" { addToken(Token.FUNCTION); } + "intern" { addToken(Token.FUNCTION); } + "isinstance" { addToken(Token.FUNCTION); } + "issubclass" { addToken(Token.FUNCTION); } + "iter" { addToken(Token.FUNCTION); } + "len" { addToken(Token.FUNCTION); } + "list" { addToken(Token.FUNCTION); } + "locals" { addToken(Token.FUNCTION); } + "long" { addToken(Token.FUNCTION); } + "map" { addToken(Token.FUNCTION); } + "max" { addToken(Token.FUNCTION); } + "min" { addToken(Token.FUNCTION); } + "object" { addToken(Token.FUNCTION); } + "oct" { addToken(Token.FUNCTION); } + "open" { addToken(Token.FUNCTION); } + "ord" { addToken(Token.FUNCTION); } + "pow" { addToken(Token.FUNCTION); } + "property" { addToken(Token.FUNCTION); } + "range" { addToken(Token.FUNCTION); } + "raw_input" { addToken(Token.FUNCTION); } + "reduce" { addToken(Token.FUNCTION); } + "reload" { addToken(Token.FUNCTION); } + "repr" { addToken(Token.FUNCTION); } + "round" { addToken(Token.FUNCTION); } + "setattr" { addToken(Token.FUNCTION); } + "slice" { addToken(Token.FUNCTION); } + "staticmethod" { addToken(Token.FUNCTION); } + "str" { addToken(Token.FUNCTION); } + "sum" { addToken(Token.FUNCTION); } + "super" { addToken(Token.FUNCTION); } + "tuple" { addToken(Token.FUNCTION); } + "type" { addToken(Token.FUNCTION); } + "unichr" { addToken(Token.FUNCTION); } + "unicode" { addToken(Token.FUNCTION); } + "vars" { addToken(Token.FUNCTION); } + "xrange" { addToken(Token.FUNCTION); } + "zip" { addToken(Token.FUNCTION); } + + + { + + {LineTerminator} { addNullToken(); return firstToken; } + + {identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character Literals. */ + {stringliteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {LongStringStart1} { yybegin(LONG_STRING_1); addToken(Token.LITERAL_CHAR); } + {LongStringStart2} { yybegin(LONG_STRING_2); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + + /* Comment Literals. */ + {LineComment} { addToken(Token.COMMENT_EOL); } + + /* Separators. */ + "(" { addToken(Token.SEPARATOR); } + ")" { addToken(Token.SEPARATOR); } + "[" { addToken(Token.SEPARATOR); } + "]" { addToken(Token.SEPARATOR); } + "{" { addToken(Token.SEPARATOR); } + "}" { addToken(Token.SEPARATOR); } + + /* Operators. */ + "=" { addToken(Token.OPERATOR); } + "+" { addToken(Token.OPERATOR); } + "-" { addToken(Token.OPERATOR); } + "*" { addToken(Token.OPERATOR); } + "/" { addToken(Token.OPERATOR); } + "%" { addToken(Token.OPERATOR); } + "**" { addToken(Token.OPERATOR); } + "~" { addToken(Token.OPERATOR); } + "<" { addToken(Token.OPERATOR); } + ">" { addToken(Token.OPERATOR); } + "<<" { addToken(Token.OPERATOR); } + ">>" { addToken(Token.OPERATOR); } + "==" { addToken(Token.OPERATOR); } + "+=" { addToken(Token.OPERATOR); } + "-=" { addToken(Token.OPERATOR); } + "*=" { addToken(Token.OPERATOR); } + "/=" { addToken(Token.OPERATOR); } + "%=" { addToken(Token.OPERATOR); } + ">>=" { addToken(Token.OPERATOR); } + "<<=" { addToken(Token.OPERATOR); } + "^" { addToken(Token.OPERATOR); } + "&" { addToken(Token.OPERATOR); } + "&&" { addToken(Token.OPERATOR); } + "|" { addToken(Token.OPERATOR); } + "||" { addToken(Token.OPERATOR); } + "?" { addToken(Token.OPERATOR); } + ":" { addToken(Token.OPERATOR); } + "," { addToken(Token.OPERATOR); } + "!" { addToken(Token.OPERATOR); } + "++" { addToken(Token.OPERATOR); } + "--" { addToken(Token.OPERATOR); } + "." { addToken(Token.OPERATOR); } + "," { addToken(Token.OPERATOR); } + + /* Numbers */ + {longinteger}|{integer} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {floatnumber}|{imagnumber} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + /* Other punctuation, we'll highlight it as "identifiers." */ + "@" { addToken(Token.IDENTIFIER); } + ";" { addToken(Token.IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\']+ { addToken(Token.LITERAL_CHAR); } + "'''" { yybegin(YYINITIAL); addToken(Token.LITERAL_CHAR); } + "'" { addToken(Token.LITERAL_CHAR); } + <> { + if (firstToken==null) { + addToken(Token.LITERAL_CHAR); + } + return firstToken; + } +} + + { + [^\"]+ { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + \"\"\" { yybegin(YYINITIAL); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + \" { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; + } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java new file mode 100644 index 0000000..aed17b2 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java @@ -0,0 +1,1088 @@ +/* The following code was generated by JFlex 1.4.1 on 10/16/06 10:31 AM */ + +/* + * 12/06/2005 + * + * PythonTokenMaker.java - Token maker for the Python programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for the Python programming language. + * + * @author Robert Futrell + * @version 0.3 + */ + +public class PythonTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int LONG_STRING_2 = 2; + public static final int LONG_STRING_1 = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\34\1\12\1\0\1\34\1\32\22\0\1\34\1\64\1\11"+ + "\1\33\1\0\1\63\1\67\1\10\1\57\1\57\1\62\1\61\1\64"+ + "\1\27\1\24\1\63\1\16\7\21\2\3\1\64\1\72\1\65\1\60"+ + "\1\66\1\64\1\71\4\23\1\26\1\23\3\2\1\31\1\2\1\15"+ + "\5\2\1\6\2\2\1\7\2\2\1\20\2\2\1\57\1\13\1\57"+ + "\1\64\1\1\1\0\1\35\1\42\1\44\1\37\1\25\1\22\1\52"+ + "\1\54\1\46\1\30\1\43\1\14\1\51\1\36\1\45\1\47\1\2"+ + "\1\4\1\40\1\41\1\5\1\55\1\53\1\17\1\50\1\56\1\57"+ + "\1\70\1\57\1\64\uff81\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 = + "\3\0\1\1\1\2\1\3\4\2\2\4\1\5\1\2"+ + "\1\3\2\2\1\6\1\2\1\6\1\7\1\10\21\2"+ + "\1\11\10\6\1\2\2\12\2\4\1\13\1\3\1\14"+ + "\1\13\1\14\4\2\2\4\1\0\2\4\1\0\4\2"+ + "\1\13\1\3\1\13\12\2\1\15\27\2\1\15\3\2"+ + "\2\15\1\16\1\15\15\2\3\0\2\14\1\0\12\2"+ + "\1\4\1\17\1\20\3\2\1\3\15\2\1\15\22\2"+ + "\1\21\14\2\1\22\1\23\1\14\6\2\1\21\3\2"+ + "\1\15\36\2\1\15\17\2\1\15\6\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[265]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\73\0\166\0\261\0\354\0\u0127\0\u0162\0\u019d"+ + "\0\u01d8\0\u0213\0\u024e\0\u0289\0\261\0\u02c4\0\u02ff\0\u033a"+ + "\0\u0375\0\u03b0\0\u03eb\0\u0426\0\u0461\0\u049c\0\u04d7\0\u0512"+ + "\0\u054d\0\u0588\0\u05c3\0\u05fe\0\u0639\0\u0674\0\u06af\0\u06ea"+ + "\0\u0725\0\u0760\0\u079b\0\u07d6\0\u0811\0\u084c\0\u0887\0\261"+ + "\0\u08c2\0\u08fd\0\u0938\0\261\0\u0973\0\u09ae\0\u09e9\0\u0a24"+ + "\0\261\0\u0a5f\0\u0a9a\0\u0ad5\0\u0b10\0\u0b4b\0\u0b4b\0\u0b86"+ + "\0\u0bc1\0\u0b4b\0\u0bfc\0\u0c37\0\u0c72\0\u0cad\0\u0ce8\0\u0d23"+ + "\0\u0d5e\0\u0d99\0\u0dd4\0\u0e0f\0\u0e4a\0\u0e85\0\u0ec0\0\u0efb"+ + "\0\u0f36\0\u0f71\0\u0fac\0\u0fe7\0\u1022\0\u105d\0\u1098\0\u10d3"+ + "\0\u110e\0\u1149\0\u1184\0\u11bf\0\u11fa\0\u1235\0\u1270\0\u12ab"+ + "\0\u12e6\0\u1321\0\u135c\0\u1397\0\u13d2\0\u140d\0\u1448\0\u1483"+ + "\0\u14be\0\u14f9\0\u1534\0\u156f\0\u15aa\0\u15e5\0\u1620\0\u165b"+ + "\0\u1696\0\u16d1\0\u170c\0\u1747\0\u1782\0\u17bd\0\u17f8\0\u1833"+ + "\0\u186e\0\354\0\u18a9\0\354\0\u18e4\0\u191f\0\u195a\0\u1995"+ + "\0\u19d0\0\u1a0b\0\u1a46\0\u1a81\0\u1abc\0\u1af7\0\u1b32\0\u1b6d"+ + "\0\u1ba8\0\u1be3\0\u1c1e\0\u1c59\0\u1c94\0\261\0\u1ccf\0\u1d0a"+ + "\0\u1d45\0\u1d80\0\u1dbb\0\u1df6\0\u1e31\0\u1e6c\0\u1ea7\0\u1ee2"+ + "\0\u1f1d\0\u1f58\0\261\0\261\0\261\0\u1f93\0\u1fce\0\u2009"+ + "\0\u2044\0\u207f\0\u20ba\0\u20f5\0\u2130\0\u216b\0\u21a6\0\u21e1"+ + "\0\u221c\0\u2257\0\u2292\0\u22cd\0\u2308\0\u2343\0\u237e\0\u23b9"+ + "\0\u23f4\0\u242f\0\u237e\0\u246a\0\u24a5\0\u24e0\0\u251b\0\u2556"+ + "\0\u2591\0\u25cc\0\u2607\0\u2642\0\u267d\0\u26b8\0\u26f3\0\u272e"+ + "\0\u2769\0\u27a4\0\u27df\0\u281a\0\u2855\0\u2890\0\u28cb\0\u2906"+ + "\0\u2941\0\u297c\0\u29b7\0\u29f2\0\u2a2d\0\u2a68\0\261\0\261"+ + "\0\u2aa3\0\u2ade\0\u2b19\0\u2b54\0\u17bd\0\u2b8f\0\u2bca\0\354"+ + "\0\u2c05\0\u2c40\0\u2c7b\0\u2cb6\0\u2cf1\0\u2d2c\0\u2d67\0\u2da2"+ + "\0\u2ddd\0\u2e18\0\u2e53\0\u2e8e\0\u2ec9\0\u2f04\0\u2f3f\0\u2f7a"+ + "\0\u2fb5\0\u2ff0\0\u302b\0\u3066\0\u30a1\0\u30dc\0\u3117\0\u3152"+ + "\0\u318d\0\u31c8\0\u3203\0\u323e\0\u3279\0\u32b4\0\u32ef\0\u332a"+ + "\0\u3365\0\u33a0\0\u33db\0\u3416\0\u3451\0\u348c\0\u34c7\0\u3502"+ + "\0\u353d\0\u3578\0\u35b3\0\u35ee\0\u33db\0\u3629\0\u3664\0\u369f"+ + "\0\u36da\0\u3715\0\u1270\0\u3750\0\u378b\0\u37c6\0\u3801\0\u383c"+ + "\0\u3877"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[265]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\2\5\1\6\1\7\1\10\1\11\1\12\1\13"+ + "\1\14\1\15\1\4\1\16\1\5\1\17\1\20\1\5"+ + "\1\6\1\21\1\5\1\22\1\23\1\5\1\24\2\5"+ + "\1\4\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\5\1\35\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ + "\1\53\1\51\1\54\1\55\1\56\1\57\1\60\2\61"+ + "\10\62\1\63\62\62\11\64\1\65\61\64\74\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\14\0\3\66\1\6\4\66\3\0\1\66\2\67\1\6"+ + "\2\66\1\6\2\66\1\70\2\71\1\0\2\72\1\0"+ + "\1\66\1\0\22\66\12\0\1\66\2\0\7\5\1\13"+ + "\1\14\2\0\10\5\1\0\1\73\1\5\1\0\2\5"+ + "\3\0\1\74\7\5\1\75\11\5\15\0\3\5\1\11"+ + "\1\5\1\11\1\5\1\13\1\14\2\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\5\1\76\20\5\15\0"+ + "\7\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\3\5\1\11\1\5\1\11"+ + "\1\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\14\0\10\77\1\100\1\77\1\0"+ + "\1\101\57\77\11\102\1\103\1\0\1\104\57\102\1\0"+ + "\7\5\4\0\10\5\1\0\1\105\1\5\1\0\2\5"+ + "\3\0\1\106\7\5\1\107\1\110\10\5\14\0\3\66"+ + "\1\111\4\66\3\0\1\66\2\67\1\112\2\113\1\112"+ + "\2\66\1\70\2\71\1\0\2\72\1\0\1\66\1\0"+ + "\22\66\12\0\1\66\2\0\3\5\1\114\3\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\3\5\1\115\3\5\4\0\1\116\7\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\117\1\120\10\5\17\0"+ + "\1\70\12\0\1\70\2\0\1\70\52\0\7\5\4\0"+ + "\1\121\2\5\1\122\4\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\5\1\123\16\5\1\124\1\5\43\0\1\54"+ + "\30\0\1\54\12\0\12\25\1\0\60\25\34\0\1\26"+ + "\37\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\5\1\125\1\5\1\126\1\5\1\127\4\5"+ + "\1\130\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\131\11\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\132\1\5\1\0\2\5\3\0"+ + "\10\5\1\133\1\134\10\5\15\0\4\5\1\135\2\5"+ + "\4\0\1\136\7\5\1\0\1\137\1\5\1\0\2\5"+ + "\3\0\4\5\1\140\4\5\1\141\5\5\1\142\2\5"+ + "\15\0\3\5\1\143\1\144\2\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\13\5\1\145\6\5\15\0"+ + "\3\5\1\146\1\147\2\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\150\11\5\15\0\7\5"+ + "\4\0\1\151\7\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\152\7\5\1\153\3\5\1\154\2\5\1\155\2\5"+ + "\15\0\3\5\1\156\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\5\5\1\157\1\5\1\160\2\5"+ + "\1\161\7\5\15\0\7\5\4\0\6\5\1\162\1\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\5\1\163\1\164"+ + "\1\165\1\166\7\5\1\167\5\5\15\0\3\5\1\170"+ + "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\171\7\5\1\172\11\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\11\5\1\173\10\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\174\10\5\1\105\10\5\15\0\7\5\4\0"+ + "\1\175\7\5\1\0\1\137\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\17\5\1\176\2\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\177\1\5\1\0\2\5\3\0\1\200"+ + "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\201\7\5\1\202\11\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\11\5"+ + "\1\154\10\5\74\0\1\54\72\0\2\54\71\0\1\54"+ + "\1\0\1\54\75\0\1\51\73\0\1\51\73\0\1\54"+ + "\73\0\1\54\2\0\10\62\1\0\62\62\10\0\1\203"+ + "\62\0\11\64\1\0\61\64\11\0\1\204\61\0\10\66"+ + "\3\0\11\66\1\0\2\66\1\0\2\66\1\0\1\66"+ + "\1\0\22\66\12\0\1\66\4\0\1\70\12\0\1\70"+ + "\2\0\1\70\3\0\2\205\1\0\2\206\41\0\3\66"+ + "\1\207\4\66\3\0\3\66\1\207\2\66\1\207\2\66"+ + "\1\0\2\66\1\210\2\66\1\0\1\66\1\0\22\66"+ + "\2\0\1\210\7\0\1\66\2\0\7\5\4\0\1\211"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\2\5\1\212"+ + "\1\5\1\213\5\5\1\214\7\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\1\5\1\215"+ + "\7\5\1\216\4\5\1\217\3\5\15\0\4\5\1\220"+ + "\2\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\221\5\5\1\222\10\5\14\0"+ + "\10\77\1\223\1\77\1\0\1\101\57\77\10\0\1\224"+ + "\62\0\12\77\1\0\60\77\11\102\1\223\1\0\1\104"+ + "\57\102\11\0\1\225\61\0\12\102\1\0\60\102\1\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\5\1\164\20\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\14\5\1\226\5\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\5\1\227\5\5\1\230\12\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\160"+ + "\16\5\14\0\3\66\1\111\4\66\3\0\3\66\1\111"+ + "\2\66\1\111\2\66\1\70\2\71\1\0\2\72\1\0"+ + "\1\66\1\0\22\66\12\0\1\66\1\0\3\66\1\111"+ + "\4\66\3\0\1\66\2\67\1\112\2\66\1\112\2\66"+ + "\1\70\2\71\1\0\2\72\1\0\1\66\1\0\22\66"+ + "\12\0\1\66\1\0\3\66\1\231\4\66\3\0\3\66"+ + "\1\231\2\66\3\231\1\0\2\231\1\0\2\66\1\0"+ + "\1\66\1\0\1\231\1\66\1\231\2\66\1\231\1\66"+ + "\1\231\12\66\12\0\1\66\2\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\232\21\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\10\5\1\233\11\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\10\5\1\234\11\5\15\0"+ + "\3\5\1\162\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\1\235\7\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\5\1\236\20\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\3\5\1\237\5\5\1\240\10\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\241\1\5\1\0\2\5\3\0"+ + "\7\5\1\242\12\5\15\0\4\5\1\243\2\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\244\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\2\5\1\162\17\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5"+ + "\1\245\16\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\3\5\1\164\16\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\246\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\4\5\1\162\15\5\15\0\7\5"+ + "\4\0\1\247\5\5\1\162\1\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\4\5\1\250\2\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\3\5\1\164\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\7\5\1\160\10\5\1\251\1\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\12\5\1\166\1\5\1\164\5\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\252"+ + "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\4\5\1\253\15\5\15\0\3\5\1\164"+ + "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\254\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\15\5\1\255\4\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\256\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\13\5\1\162\6\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\257\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\12\5\1\260\7\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\261\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\6\5\1\262\1\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\10\5\1\244"+ + "\11\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\263\21\5\15\0\7\5\4\0\1\264"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\1\265\1\5\1\0\2\5"+ + "\3\0\1\5\1\266\12\5\1\267\5\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\164\7\5\15\0\3\5\1\164\3\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\270\21\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\2\5\1\164\17\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\1\271\1\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5"+ + "\1\164\15\5\15\0\7\5\4\0\10\5\1\0\1\105"+ + "\1\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\272"+ + "\5\5\1\273\7\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\3\5\1\274\5\5\1\275"+ + "\10\5\15\0\7\5\4\0\10\5\1\0\1\214\1\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\12\5\1\276\7\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\10\5\1\277\1\300\10\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\301"+ + "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\16\5\1\164\3\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\302\1\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\3\5\1\164\4\5\1\0\2\5"+ + "\1\0\2\5\3\0\12\5\1\164\7\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\303\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\11\5\1\304\10\5\15\0\7\5"+ + "\4\0\3\5\1\164\4\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\3\5\1\305\16\5\15\0\3\5"+ + "\1\127\3\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\11\5\1\306\10\5\24\0\1\307"+ + "\73\0\1\310\64\0\1\311\12\0\1\311\2\0\1\311"+ + "\5\0\1\210\31\0\1\210\11\0\3\66\1\207\4\66"+ + "\3\0\3\66\1\207\2\66\1\207\2\66\1\0\2\66"+ + "\1\0\2\72\1\0\1\66\1\0\22\66\12\0\1\66"+ + "\4\0\1\311\12\0\1\311\2\0\1\311\52\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\312\11\5\15\0\4\5\1\252\2\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\4\5"+ + "\1\313\2\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\3\5\1\164\3\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\15\5"+ + "\1\260\4\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\3\5\1\237\16\5\15\0\1\314"+ + "\6\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\5\1\315\20\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\141"+ + "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\7\5\1\316\12\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\317"+ + "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\15\5\1\320\4\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\1\321\21\5"+ + "\14\0\3\66\1\231\4\66\3\0\1\66\2\67\1\231"+ + "\2\66\3\231\1\0\2\231\1\0\2\66\1\0\1\66"+ + "\1\0\1\231\1\66\1\231\2\66\1\231\1\66\1\231"+ + "\12\66\12\0\1\66\2\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\5\1\215\20\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\14\5\1\162\5\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\322\21\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\164\1\5\1\0\2\5\3\0"+ + "\4\5\1\166\15\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\323\21\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\162\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\6\5\1\162\1\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\324"+ + "\12\5\15\0\7\5\4\0\10\5\1\0\1\325\1\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\14\5\1\326\5\5"+ + "\15\0\7\5\4\0\1\164\7\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ + "\1\327\1\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\1\330\7\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\331\21\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\5\5\1\332\14\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\14\5\1\333\5\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\7\5\1\260\12\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\4\5\1\334\15\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\5\1\335\20\5"+ + "\15\0\3\5\1\322\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\260"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\1\164\1\5\1\0\2\5"+ + "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\1\336\21\5\15\0\7\5\4\0"+ + "\6\5\1\166\1\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\337\16\5\15\0\7\5\4\0"+ + "\1\340\7\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\15\0\3\5\1\252\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\4\5\1\341\15\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\12\5\1\342\7\5\15\0\3\5\1\320\3\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\10\5\1\0\1\343\1\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ + "\1\344\1\5\1\0\2\5\3\0\22\5\15\0\4\5"+ + "\1\160\2\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\4\5\1\345\2\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\5"+ + "\1\346\20\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\327\11\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\347\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\1\5\1\131\20\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5"+ + "\1\162\16\5\15\0\7\5\4\0\1\125\7\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\350"+ + "\14\5\15\0\7\5\4\0\1\237\7\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\331\16\5\1\164"+ + "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\2\5\1\320\17\5\17\0\1\311\12\0"+ + "\1\311\2\0\1\311\6\0\2\206\42\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\1\315\21\5"+ + "\15\0\3\5\1\351\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\11\5\1\352\10\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\10\5\1\353\6\5\1\214\2\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\2\5"+ + "\1\354\17\5\15\0\7\5\4\0\1\127\7\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\320"+ + "\15\5\15\0\7\5\4\0\1\355\7\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\6\5"+ + "\1\356\1\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\12\5\1\131\7\5\15\0\7\5\4\0\10\5"+ + "\1\0\1\357\1\5\1\0\2\5\3\0\22\5\15\0"+ + "\3\5\1\131\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\13\5\1\164\6\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\4\5\1\360\15\5\15\0\7\5\4\0\1\361\7\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\315\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\11\5\1\362\10\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\306\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\6\5\1\162\13\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\363"+ + "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\364\21\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\11\5\1\365\10\5"+ + "\15\0\7\5\4\0\1\366\7\5\1\0\2\5\1\0"+ + "\2\5\3\0\11\5\1\257\10\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\160"+ + "\12\5\15\0\3\5\1\105\3\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\367"+ + "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\370\16\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\371\1\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\372\21\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\5\1\162\20\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\5\1\373\20\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\2\5\1\260\17\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\162\21\5\15\0\7\5\4\0\1\143\7\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\257"+ + "\10\5\15\0\3\5\1\374\3\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\214"+ + "\15\5\15\0\7\5\4\0\10\5\1\0\1\320\1\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\7\5\1\375\12\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\14\5\1\376\5\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\5\5\1\257\14\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\5\1\377\20\5\15\0\7\5\4\0\10\5"+ + "\1\0\1\177\1\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\7\5\1\u0100\12\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\4\5\1\u0101\15\5\15\0"+ + "\3\5\1\u0102\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\1\u0103\7\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\273\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\1\u0104\21\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\u0105\1\5\1\0\2\5\3\0\22\5"+ + "\15\0\4\5\1\237\2\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\u0106"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\u0107\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\4\5\1\330\15\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5"+ + "\1\260\15\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\4\5\1\u0108\15\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\u0109"+ + "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\5\1\252\20\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\17\5\1\333"+ + "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\127\16\5\14\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[14514]; + 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; + } + + + /* 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; + + /* 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 = + "\3\0\1\11\10\1\1\11\32\1\1\11\3\1\1\11"+ + "\4\1\1\11\17\1\1\0\2\1\1\0\76\1\3\0"+ + "\1\11\1\1\1\0\12\1\3\11\61\1\2\11\101\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[265]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PythonTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = LONG_STRING_2; + break; + case Token.LITERAL_CHAR: + state = LONG_STRING_1; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PythonTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PythonTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 168) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 5: + { addNullToken(); return firstToken; + } + case 20: break; + case 10: + { addToken(Token.LITERAL_CHAR); + } + case 21: break; + case 8: + { addToken(Token.WHITESPACE); + } + case 22: break; + case 12: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 23: break; + case 13: + { addToken(Token.RESERVED_WORD); + } + case 24: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 25: break; + case 15: + { yybegin(LONG_STRING_1); addToken(Token.LITERAL_CHAR); + } + case 26: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 27: break; + case 14: + { addToken(Token.FUNCTION); + } + case 28: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 29: break; + case 17: + { addToken(Token.DATA_TYPE); + } + case 30: break; + case 4: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 31: break; + case 7: + { addToken(Token.COMMENT_EOL); + } + case 32: break; + case 11: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 33: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 34: break; + case 6: + { addToken(Token.OPERATOR); + } + case 35: break; + case 19: + { yybegin(YYINITIAL); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 36: break; + case 16: + { yybegin(LONG_STRING_2); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 37: break; + case 18: + { yybegin(YYINITIAL); addToken(Token.LITERAL_CHAR); + } + case 38: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 266: break; + case LONG_STRING_2: { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; + } + case 267: break; + case LONG_STRING_1: { + if (firstToken==null) { + addToken(Token.LITERAL_CHAR); + } + return firstToken; + } + case 268: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex new file mode 100644 index 0000000..c9a9a8c --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex @@ -0,0 +1,760 @@ +/* + * 09/11/2008 + * + * RubyTokenMaker.java - Scanner for Ruby + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Ruby.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated RubyTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class RubyTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an single quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an double quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an single quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an double quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q!...! style double quoted string. + */ + public static final int INTERNAL_STRING_Q_BANG = -7; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q{...} style double quoted string. + */ + public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q<...> style double quoted string. + */ + public static final int INTERNAL_STRING_Q_LT = -9; + + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q(...) style double quoted string. + */ + public static final int INTERNAL_STRING_Q_PAREN = -10; + + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q/.../ style double quoted string. + */ + public static final int INTERNAL_STRING_Q_SLASH = -11; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q[...] style double quoted string. + */ + public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public RubyTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + start = text.offset; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_UNQUOTED: + state = HEREDOC_EOF_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: + state = HEREDOC_EOF_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED: + state = HEREDOC_EOF_DOUBLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_UNQUOTED: + state = HEREDOC_EOT_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: + state = HEREDOC_EOT_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED: + state = HEREDOC_EOT_DOUBLE_QUOTED; + start = text.offset; + break; + case INTERNAL_STRING_Q_BANG: + state = STRING_Q_BANG; + start = text.offset; + break; + case INTERNAL_STRING_Q_CURLY_BRACE: + state = STRING_Q_CURLY_BRACE; + start = text.offset; + break; + case INTERNAL_STRING_Q_LT: + state = STRING_Q_LT; + start = text.offset; + break; + case INTERNAL_STRING_Q_PAREN: + state = STRING_Q_PAREN; + start = text.offset; + break; + case INTERNAL_STRING_Q_SLASH: + state = STRING_Q_SLASH; + start = text.offset; + break; + case INTERNAL_STRING_Q_SQUARE_BRACKET: + state = STRING_Q_SQUARE_BRACKET; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +BinaryDigit = ([01]) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") + +IdentifierStart = ({Letter}|"_") +IdentifierPart = ({IdentifierStart}|{Digit}) +BooleanLiteral = ("true"|"false") + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +LineCommentBegin = "#" +DocCommentBegin = "=begin" +DocCommentEnd = "=end" + +DigitOrUnderscore = ({Digit}|[_]) +BinaryIntLiteral = ("0b"{BinaryDigit}([01_]*{BinaryDigit})?) +OctalLiteral = ("0"([0-7_]*{OctalDigit})?) +DecimalLiteral1 = ("0d"{Digit}({DigitOrUnderscore}*{Digit})?) +DecimalLiteral2 = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?) +DecimalLiteral = ({BinaryIntLiteral}|{OctalLiteral}|{DecimalLiteral1}|{DecimalLiteral2}) +HexLiteral = ("0x"{HexDigit}([0-9a-zA-Z_]*{HexDigit})?) +FloatLiteral = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?[Ee][+-]?({Digit}({DigitOrUnderscore}*{Digit})?)?) + +Separator = ([\(\)\{\}]) +Operator1 = ("::"|"."|"["|"]"|"-"|"+"|"!"|"~"|"*"|"/"|"%"|"<<"|">>"|"&"|"|"|"^") +Operator2 = (">"|">="|"<"|"<="|"<=>"|"=="|"==="|"!="|"=~"|"!~"|"&&"|"||") +Operator3 = (".."|"..."|"="|"+="|"-="|"*="|"/="|"%=") +Operator = ({Operator1}|{Operator2}|{Operator3}) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +Symbol = ([:]{Identifier}) +ErrorIdentifier = ({NonSeparator}+) + +PreDefinedVariable = ("$"([!@&`\'+0-9~=/\,;.<>_*$?:\"]|"DEBUG"|"FILENAME"|"LOAD_PATH"|"stderr"|"stdin"|"stdout"|"VERBOSE"|([\-][0adFiIlpwv]))) +Variable = ({PreDefinedVariable}|([@][@]?|[$]){Identifier}) + +%state STRING +%state STRING_Q_BANG +%state STRING_Q_CURLY_BRACE +%state STRING_Q_PAREN +%state STRING_Q_SLASH +%state STRING_Q_SQUARE_BRACKET +%state STRING_Q_LT +%state CHAR_LITERAL +%state BACKTICKS +%state HEREDOC_EOF_UNQUOTED +%state HEREDOC_EOF_SINGLE_QUOTED +%state HEREDOC_EOF_DOUBLE_QUOTED +%state HEREDOC_EOT_UNQUOTED +%state HEREDOC_EOT_SINGLE_QUOTED +%state HEREDOC_EOT_DOUBLE_QUOTED +%state DOCCOMMENT + +%% + + { + + /* Keywords */ + "alias" | + "BEGIN" | + "begin" | + "break" | + "case" | + "class" | + "def" | + "defined" | + "do" | + "else" | + "elsif" | + "END" | + "end" | + "ensure" | + "for" | + "if" | + "in" | + "module" | + "next" | + "nil" | + "redo" | + "rescue" | + "retry" | + "return" | + "self" | + "super" | + "then" | + "undef" | + "unless" | + "until" | + "when" | + "while" | + "yield" { addToken(Token.RESERVED_WORD); } + + "Array" | + "Float" | + "Integer" | + "String" | + "at_exit" | + "autoload" | + "binding" | + "caller" | + "catch" | + "chop" | + "chop!" | + "chomp" | + "chomp!" | + "eval" | + "exec" | + "exit" | + "exit!" | + "fail" | + "fork" | + "format" | + "gets" | + "global_variables" | + "gsub" | + "gsub!" | + "iterator?" | + "lambda" | + "load" | + "local_variables" | + "loop" | + "open" | + "p" | + "print" | + "printf" | + "proc" | + "putc" | + "puts" | + "raise" | + "rand" | + "readline" | + "readlines" | + "require" | + "select" | + "sleep" | + "split" | + "sprintf" | + "srand" | + "sub" | + "sub!" | + "syscall" | + "system" | + "test" | + "trace_var" | + "trap" | + "untrace_var" { addToken(Token.FUNCTION); } + + "and" | + "or" | + "not" { addToken(Token.OPERATOR); } + + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + + {Variable} { addToken(Token.VARIABLE); } + {Symbol} { addToken(Token.PREPROCESSOR); } + + {LineTerminator} { addNullToken(); return firstToken; } + {Identifier} { addToken(Token.IDENTIFIER); } + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + \" { start = zzMarkedPos-1; yybegin(STRING); } + \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } + [\%][QqWwx]?[\(] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_PAREN); } + [\%][QqWwx]?[\{] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_CURLY_BRACE); } + [\%][QqWwx]?[\[] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SQUARE_BRACKET); } + [\%][QqWwx]?[\<] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_LT); } + [\%][QqWwx]?[\!] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_BANG); } + [\%][QqWwx]?[\/] { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SLASH); } + \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } + + /* Comment literals. */ + {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + {DocCommentBegin} { start = zzMarkedPos-6; yybegin(DOCCOMMENT); } + + /* "Here-document" syntax. This is only implemented for the common */ + /* cases. */ + "<> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + . { addToken(Token.IDENTIFIER); } + +} + + + { + [^\n\\\"]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + + { + [^\n\\\!]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \! { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } +} + + + { + [^\n\\\}]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } +} + + + { + [^\n\\\>]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \> { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } +} + + + { + [^\n\\\)]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \) { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } +} + + + { + [^\n\\\/]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \/ { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } +} + + + { + [^\n\\\]]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \] { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } +} + + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped single quotes only, but this should still work. */ } + \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} + + + { + [^\n\\\`]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } + \\.? { /* Skip escaped chars. */ } + \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } +} + + + { + /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOF" will match any line containing */ + /* EOF and any other chars. */ + /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOF" will match any line containing */ + /* EOF and any other chars. */ + "EOF" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } + [^\n\\]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } + \\.? { /* Skip escaped chars. */ } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOF" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOF"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOF" will match any line containing */ + /* EOF and any other chars. */ + "EOF" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } + [^\n\\]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } + \\.? { /* Skip escaped chars. */ } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOT" will match any line containing */ + /* EOF and any other chars. */ + /* NOTE2: This case is used for unquoted <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOT" will match any line containing */ + /* EOT and any other chars. */ + "EOT" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } + [^\n\\]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } + \\.? { /* Skip escaped chars. */ } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } +} + + + { + /* NOTE: The closing "EOT" is supposed to be on a line by itself - */ + /* no surrounding whitespace or other chars. However, the way */ + /* we're hacking the JFLex scanning, something like ^"EOT"$ doesn't */ + /* work. Fortunately we don't need the start- and end-line anchors */ + /* since the production after "EOT" will match any line containing */ + /* EOT and any other chars. */ + "EOT" { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } } + [^\n\\]+ {} + \n { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } + \\.? { /* Skip escaped chars. */ } + <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } +} + + + { + + [^\n\=]+ {} + {DocCommentEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_DOCUMENTATION); } + = {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java new file mode 100644 index 0000000..0eba805 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java @@ -0,0 +1,1682 @@ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 11:19 AM */ + +/* + * 09/11/2008 + * + * RubyTokenMaker.java - Scanner for Ruby + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Ruby.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated RubyTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class RubyTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int HEREDOC_EOF_SINGLE_QUOTED = 11; + public static final int DOCCOMMENT = 14; + public static final int HEREDOC_EOT_SINGLE_QUOTED = 13; + public static final int HEREDOC_EOT_UNQUOTED = 12; + public static final int STRING_Q_SLASH = 5; + public static final int STRING_Q_BANG = 2; + public static final int STRING_Q_LT = 7; + public static final int STRING = 1; + public static final int BACKTICKS = 9; + public static final int YYINITIAL = 0; + public static final int HEREDOC_EOF_UNQUOTED = 10; + public static final int STRING_Q_CURLY_BRACE = 3; + public static final int STRING_Q_PAREN = 4; + public static final int HEREDOC_EOF_DOUBLE_QUOTED = 11; + public static final int CHAR_LITERAL = 8; + public static final int HEREDOC_EOT_DOUBLE_QUOTED = 13; + public static final int STRING_Q_SQUARE_BRACKET = 6; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\24\1\23\1\0\1\24\1\7\22\0\1\24\1\44\1\106"+ + "\1\10\1\56\1\50\1\53\1\107\1\111\1\36\1\46\1\35\1\60"+ + "\1\43\1\40\1\47\1\3\1\4\6\6\2\2\1\37\1\60\1\51"+ + "\1\25\1\52\1\104\1\57\1\67\1\62\1\5\1\61\1\34\1\64"+ + "\1\63\1\1\1\65\2\1\1\1\1\1\1\66\1\70\1\1\1\110"+ + "\1\1\1\73\1\71\1\1\1\1\1\110\3\1\1\41\1\11\1\42"+ + "\1\55\1\12\1\113\1\20\1\26\1\76\1\32\1\16\1\17\1\27"+ + "\1\102\1\30\1\1\1\75\1\21\1\77\1\31\1\72\1\101\1\105"+ + "\1\14\1\22\1\13\1\15\1\74\1\103\1\33\1\100\1\1\1\112"+ + "\1\54\1\114\1\45\uff81\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 = + "\17\0\1\1\1\2\2\3\1\2\1\4\10\2\1\5"+ + "\1\6\1\7\6\2\1\7\1\10\1\2\10\7\2\1"+ + "\11\2\1\11\1\2\1\12\1\13\1\14\1\15\1\16"+ + "\1\17\1\20\1\15\1\21\1\15\1\22\1\15\1\23"+ + "\1\15\1\24\1\15\1\25\1\15\1\26\1\15\1\27"+ + "\1\30\1\31\1\15\1\32\1\33\1\15\1\34\1\15"+ + "\1\35\1\36\1\15\1\37\1\15\1\40\1\15\1\1"+ + "\1\41\1\3\4\1\30\2\1\0\7\2\1\42\5\2"+ + "\1\43\1\7\1\0\1\44\1\45\1\46\1\47\1\50"+ + "\1\51\2\7\3\52\1\0\1\1\4\2\1\7\12\2"+ + "\1\16\1\27\2\15\1\0\2\41\2\3\1\53\24\2"+ + "\1\42\7\2\1\11\6\2\1\0\10\2\1\42\5\0"+ + "\20\2\1\54\1\0\1\1\1\41\3\1\1\55\1\2"+ + "\1\11\16\2\1\11\5\2\1\0\3\2\4\0\11\2"+ + "\1\56\1\0\12\2\1\0\2\2\1\57\1\60\3\0"+ + "\2\2\1\11\5\2\1\61\1\2\6\0\4\2\1\62"+ + "\1\63\1\11\7\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[347]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + 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\u03e9\0\u0436\0\u0483"+ + "\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e\0\u06eb"+ + "\0\u0738\0\u0785\0\u07d2\0\u081f\0\u086c\0\u05b7\0\u08b9\0\u0906"+ + "\0\u0953\0\u09a0\0\u09ed\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u05b7"+ + "\0\u0b6e\0\u0bbb\0\u05b7\0\u0c08\0\u0c55\0\u0ca2\0\u0cef\0\u0d3c"+ + "\0\u0d89\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd\0\u0f0a\0\u0f57\0\u0fa4"+ + "\0\u0ff1\0\u103e\0\u108b\0\u10d8\0\u1125\0\u1172\0\u05b7\0\u05b7"+ + "\0\u05b7\0\u11bf\0\u120c\0\u05b7\0\u05b7\0\u1259\0\u05b7\0\u12a6"+ + "\0\u05b7\0\u12f3\0\u05b7\0\u1340\0\u05b7\0\u138d\0\u05b7\0\u13da"+ + "\0\u05b7\0\u1427\0\u1474\0\u05b7\0\u05b7\0\u14c1\0\u05b7\0\u05b7"+ + "\0\u150e\0\u05b7\0\u155b\0\u05b7\0\u05b7\0\u15a8\0\u05b7\0\u15f5"+ + "\0\u05b7\0\u1642\0\u168f\0\u16dc\0\u1729\0\u1729\0\u1776\0\u17c3"+ + "\0\u1810\0\u185d\0\u18aa\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b"+ + "\0\u1a78\0\u1ac5\0\u1b12\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u1c93"+ + "\0\u1ce0\0\u1d2d\0\u1d7a\0\u1dc7\0\u1e14\0\u1e61\0\u1eae\0\u1efb"+ + "\0\u1f48\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9\0\u2116\0\u2163"+ + "\0\u21b0\0\u04d0\0\u21fd\0\u224a\0\u2297\0\u22e4\0\u2331\0\u237e"+ + "\0\u23cb\0\u2418\0\u05b7\0\u05b7\0\u05b7\0\u05b7\0\u05b7\0\u05b7"+ + "\0\u2465\0\u24b2\0\u24ff\0\u0483\0\u05b7\0\u254c\0\u2599\0\u25e6"+ + "\0\u2633\0\u2680\0\u26cd\0\u04d0\0\u271a\0\u2767\0\u27b4\0\u2801"+ + "\0\u284e\0\u289b\0\u28e8\0\u2935\0\u2982\0\u29cf\0\u05b7\0\u05b7"+ + "\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea\0\u2c37"+ + "\0\u2c84\0\u2cd1\0\u2d1e\0\u2d6b\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\u3154\0\u31a1\0\u31ee\0\u323b\0\u3288\0\u32d5\0\u3322\0\u336f"+ + "\0\u33bc\0\u3409\0\u3456\0\u34a3\0\u34f0\0\u353d\0\u358a\0\u35d7"+ + "\0\u3624\0\u3671\0\u36be\0\u370b\0\u3758\0\u37a5\0\u37f2\0\u383f"+ + "\0\u388c\0\u38d9\0\u3926\0\u3973\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7"+ + "\0\u3af4\0\u3b41\0\u3b8e\0\u3bdb\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f"+ + "\0\u3d5c\0\u3da9\0\u3df6\0\u3e43\0\u3e90\0\u3edd\0\u3f2a\0\u3f77"+ + "\0\u3fc4\0\u4011\0\u150e\0\u405e\0\u2b03\0\u40ab\0\u2b9d\0\u2bea"+ + "\0\u2c37\0\u04d0\0\u40f8\0\u04d0\0\u4145\0\u4192\0\u41df\0\u422c"+ + "\0\u4279\0\u42c6\0\u4313\0\u4360\0\u43ad\0\u43fa\0\u4447\0\u4494"+ + "\0\u44e1\0\u452e\0\u05b7\0\u457b\0\u45c8\0\u4615\0\u4662\0\u46af"+ + "\0\u46fc\0\u4749\0\u4796\0\u47e3\0\u4830\0\u487d\0\u48ca\0\u4917"+ + "\0\u4964\0\u49b1\0\u49fe\0\u4a4b\0\u4a98\0\u4ae5\0\u4b32\0\u4b7f"+ + "\0\u4bcc\0\u05b7\0\u40ab\0\u4c19\0\u4c66\0\u4cb3\0\u4d00\0\u4d4d"+ + "\0\u4d9a\0\u4de7\0\u4e34\0\u4e81\0\u4ece\0\u4f1b\0\u4f68\0\u4fb5"+ + "\0\u05b7\0\u05b7\0\u5002\0\u504f\0\u509c\0\u50e9\0\u5136\0\u5183"+ + "\0\u51d0\0\u521d\0\u526a\0\u52b7\0\u5183\0\u05b7\0\u5304\0\u5351"+ + "\0\u539e\0\u53eb\0\u5438\0\u5485\0\u54d2\0\u551f\0\u556c\0\u55b9"+ + "\0\u5606\0\u05b7\0\u05b7\0\u383f\0\u5653\0\u56a0\0\u56ed\0\u573a"+ + "\0\u5787\0\u57d4\0\u5821"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[347]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\20\1\21\1\22\1\23\1\22\1\21\1\22\1\24"+ + "\1\25\1\20\1\21\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"+ + "\1\43\1\44\1\45\1\21\1\46\1\47\1\50\1\51"+ + "\1\52\2\53\1\47\1\54\1\53\2\47\1\55\1\56"+ + "\1\57\1\60\1\61\1\53\1\62\1\63\1\24\1\21"+ + "\1\64\1\21\1\65\1\66\1\21\1\67\2\21\1\70"+ + "\1\71\2\21\1\72\1\73\1\74\1\75\1\21\1\76"+ + "\1\24\1\21\1\77\1\100\1\21\2\50\1\101\1\50"+ + "\11\102\1\103\11\102\1\104\62\102\1\105\6\102\11\106"+ + "\1\103\11\106\1\107\20\106\1\105\50\106\11\110\1\103"+ + "\11\110\1\111\70\110\1\105\11\112\1\103\11\112\1\113"+ + "\12\112\1\105\56\112\11\114\1\103\11\114\1\115\23\114"+ + "\1\105\45\114\11\116\1\103\11\116\1\117\16\116\1\105"+ + "\52\116\11\120\1\103\11\120\1\121\26\120\1\105\42\120"+ + "\11\122\1\123\11\122\1\124\63\122\1\125\5\122\11\126"+ + "\1\103\11\126\1\127\67\126\1\130\1\126\11\131\1\103"+ + "\11\131\1\132\10\131\1\133\71\131\1\103\11\131\1\134"+ + "\10\131\1\133\71\131\1\103\11\131\1\135\10\131\1\136"+ + "\71\131\1\103\11\131\1\137\10\131\1\136\60\131\23\140"+ + "\1\141\1\140\1\142\67\140\7\20\1\0\13\20\3\0"+ + "\7\20\21\0\2\20\1\0\23\20\1\0\1\20\2\0"+ + "\1\20\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\2\20\3\22\1\20\1\22\1\0\2\20"+ + "\1\143\3\20\1\144\4\20\3\0\6\20\1\144\21\0"+ + "\2\20\1\0\23\20\1\0\1\20\2\0\1\20\4\0"+ + "\3\20\2\145\1\20\1\145\1\0\2\20\1\146\10\20"+ + "\3\0\1\147\3\20\1\150\1\151\1\20\21\0\2\20"+ + "\1\0\23\20\1\0\1\20\2\0\1\20\121\0\23\25"+ + "\1\0\71\25\1\20\6\21\1\0\2\20\2\21\1\152"+ + "\1\21\1\153\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\21\21\1\154\1\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\155\1\21\1\156"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\3\21\1\157\3\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\7\21\1\160\1\21\3\0\3\21\1\161"+ + "\1\21\1\162\1\21\21\0\2\20\1\0\13\21\1\163"+ + "\7\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\6\21\1\164\2\21\3\0\7\21\21\0"+ + "\2\20\1\0\11\21\1\165\11\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\166"+ + "\1\21\1\167\3\21\1\170\1\21\3\0\3\21\1\171"+ + "\3\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\172"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\11\21\1\173"+ + "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\2\21\1\174\1\175\1\176\2\21\1\177"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\17\21\1\200"+ + "\1\201\2\21\1\0\1\21\2\0\1\21\30\0\1\37"+ + "\115\0\1\47\1\202\16\0\1\53\47\0\1\20\6\21"+ + "\1\0\2\20\2\21\1\203\1\21\1\204\4\21\3\0"+ + "\2\21\1\205\4\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\206\2\21\1\207\1\210\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\1\21\1\211\3\21\1\212"+ + "\3\21\3\0\3\21\1\212\3\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\4\21\1\213\4\21\3\0\2\21\1\214"+ + "\4\21\21\0\2\20\1\0\11\21\1\215\11\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\216\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\212\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\21\0"+ + "\2\20\1\0\5\21\1\217\15\21\1\0\1\21\2\0"+ + "\1\21\31\0\1\53\70\0\1\220\3\0\1\220\4\0"+ + "\11\220\3\0\7\220\2\0\1\53\21\0\23\220\1\0"+ + "\1\220\2\0\1\220\44\0\1\221\101\0\1\53\17\0"+ + "\1\53\74\0\1\53\5\0\1\222\5\0\1\223\2\0"+ + "\1\224\2\0\1\225\1\0\1\226\31\0\1\222\1\0"+ + "\1\222\2\0\1\222\1\227\1\230\27\0\1\231\23\0"+ + "\1\232\70\0\1\53\24\0\1\53\115\0\1\53\115\0"+ + "\1\53\40\0\1\20\1\233\3\234\1\233\1\234\1\0"+ + "\2\20\11\233\2\0\1\235\7\233\1\235\1\0\2\235"+ + "\2\0\1\236\4\235\1\0\3\235\2\0\2\234\1\235"+ + "\23\233\1\235\1\233\2\235\1\233\2\0\1\235\1\0"+ + "\1\20\1\233\3\20\1\233\1\20\1\0\2\20\11\233"+ + "\3\0\7\233\21\0\1\20\1\237\1\0\23\233\1\0"+ + "\1\233\2\0\1\233\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\6\21\1\240\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\7\21\1\241\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\3\21\1\242\3\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\2\21\1\243\6\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ + "\1\244\6\21\3\0\7\21\21\0\2\20\1\0\20\21"+ + "\1\245\2\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\246\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\6\21\1\247\1\250"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\21\21\1\251"+ + "\1\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\252\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\253"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\254"+ + "\1\255\5\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\21\21"+ + "\1\256\1\21\1\0\1\21\2\0\1\21\4\0\11\102"+ + "\1\0\11\102\1\0\62\102\1\0\6\102\23\257\1\0"+ + "\71\257\11\106\1\0\11\106\1\0\20\106\1\0\50\106"+ + "\11\110\1\0\11\110\1\0\70\110\1\0\11\112\1\0"+ + "\11\112\1\0\12\112\1\0\56\112\11\114\1\0\11\114"+ + "\1\0\23\114\1\0\45\114\11\116\1\0\11\116\1\0"+ + "\16\116\1\0\52\116\11\120\1\0\11\120\1\0\26\120"+ + "\1\0\42\120\11\122\1\0\11\122\1\0\63\122\1\0"+ + "\5\122\23\260\1\0\71\260\11\126\1\0\11\126\1\0"+ + "\67\126\1\0\1\126\11\131\1\0\11\131\1\0\102\131"+ + "\1\0\11\131\1\0\44\131\1\261\35\131\1\0\11\131"+ + "\1\0\44\131\1\262\24\131\23\140\1\0\1\140\1\0"+ + "\67\140\16\0\1\263\76\0\2\20\3\22\1\20\1\22"+ + "\1\0\2\20\1\143\10\20\3\0\7\20\21\0\2\20"+ + "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\2\20"+ + "\3\264\1\20\1\264\1\0\13\20\3\0\7\20\1\265"+ + "\5\0\1\265\12\0\2\20\1\0\23\20\1\0\1\20"+ + "\2\0\1\20\4\0\3\20\2\145\1\20\1\145\1\0"+ + "\2\20\1\146\10\20\3\0\7\20\21\0\2\20\1\0"+ + "\23\20\1\0\1\20\2\0\1\20\4\0\3\20\2\266"+ + "\2\20\1\0\13\20\3\0\7\20\21\0\2\20\1\0"+ + "\23\20\1\0\1\20\2\0\1\20\4\0\2\20\3\267"+ + "\1\20\1\267\1\0\13\20\3\0\7\20\21\0\2\20"+ + "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\2\20"+ + "\5\270\1\0\6\20\3\270\2\20\3\0\1\270\3\20"+ + "\1\270\1\20\1\270\21\0\2\20\1\0\2\270\1\20"+ + "\1\270\2\20\1\270\6\20\1\270\5\20\1\0\1\20"+ + "\2\0\1\20\4\0\1\20\6\21\1\0\2\20\3\21"+ + "\1\271\2\21\1\272\2\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\10\21\1\273\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\274\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\275"+ + "\4\21\1\276\1\21\1\277\3\0\4\21\1\300\2\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\301\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ + "\1\302\1\303\3\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\1\21\1\304\5\21\1\305\1\21\3\0\4\21\1\306"+ + "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\307"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\10\21"+ + "\1\310\3\0\4\21\1\212\2\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\4\21\1\311\4\21\3\0\2\21\1\312"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\313"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\7\21\1\314\1\21\3\0\2\21\1\313\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\2\21\1\315\6\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\316\10\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\317\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\2\21\1\320\4\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\4\21\1\244\2\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\16\21\1\321\4\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ + "\1\303\2\21\3\0\7\21\21\0\2\20\1\0\11\21"+ + "\1\322\3\21\1\323\5\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\6\21\1\324\2\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\325\6\21\21\0\2\20\1\0\20\21\1\326"+ + "\2\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\7\21\1\327\1\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\330\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\331"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ + "\1\332\4\21\1\333\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\22\0\1\334"+ + "\76\0\1\20\6\21\1\0\2\20\4\21\1\335\4\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\21\1\336\5\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\3\21\1\337\3\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\340\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\341\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\3\21"+ + "\1\342\5\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\343\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\5\21\1\344\1\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\7\21\1\212\1\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\244\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\5\21\1\345\3\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ + "\1\0\1\212\22\21\1\0\1\21\2\0\1\21\5\0"+ + "\6\220\3\0\11\220\3\0\7\220\24\0\23\220\1\0"+ + "\1\220\2\0\1\220\44\0\1\53\115\0\1\223\2\0"+ + "\1\224\2\0\1\225\1\0\1\226\37\0\1\227\1\230"+ + "\54\0\1\53\66\0\1\346\7\0\1\347\51\0\1\350"+ + "\1\351\3\0\1\352\1\0\1\20\6\233\1\0\2\20"+ + "\11\233\3\0\7\233\21\0\2\20\1\0\23\233\1\0"+ + "\1\233\2\0\1\233\7\0\1\235\14\0\2\235\6\0"+ + "\1\235\1\0\1\235\31\0\2\235\6\0\1\235\4\0"+ + "\1\235\1\0\1\235\11\0\1\20\1\233\3\20\1\233"+ + "\1\20\1\0\2\20\11\233\3\0\7\233\21\0\2\20"+ + "\1\0\23\233\1\0\1\233\2\0\1\233\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ + "\1\0\2\21\1\353\20\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\354\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\355\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\356\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\4\21\1\357\4\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\2\21\1\360\6\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\361\5\21\1\362\1\363\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\364\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\365\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\4\21\1\366\2\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\367\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\2\21\1\370\4\21"+ + "\21\0\2\20\1\0\11\21\1\311\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\371\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\274\4\21\3\0\2\21\1\372\4\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\11\131\1\0\11\131\1\0\40\131\1\373\41\131"+ + "\1\0\11\131\1\0\45\131\1\373\23\131\31\0\1\374"+ + "\63\0\2\20\3\264\1\20\1\264\1\0\2\20\1\375"+ + "\10\20\3\0\7\20\21\0\2\20\1\0\23\20\1\0"+ + "\1\20\2\0\1\20\6\0\3\376\1\0\1\376\106\0"+ + "\3\20\2\266\2\20\1\0\2\20\1\377\10\20\3\0"+ + "\7\20\21\0\2\20\1\0\23\20\1\0\1\20\2\0"+ + "\1\20\4\0\2\20\3\267\1\20\1\267\1\0\2\20"+ + "\1\u0100\10\20\3\0\7\20\21\0\2\20\1\0\23\20"+ + "\1\0\1\20\2\0\1\20\4\0\1\20\1\u0101\5\270"+ + "\1\0\2\20\4\u0101\3\270\2\u0101\3\0\1\270\3\u0101"+ + "\1\270\1\u0101\1\270\21\0\2\20\1\0\2\270\1\u0101"+ + "\1\270\2\u0101\1\270\6\u0101\1\270\5\u0101\1\0\1\u0101"+ + "\2\0\1\u0101\4\0\1\20\6\21\1\0\2\20\4\21"+ + "\1\u0102\4\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\15\21"+ + "\1\u0103\2\21\1\u0104\2\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\1\21\1\u0104\7\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\3\21\1\212\3\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u0105\1\u0106\5\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\u0107"+ + "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\7\21\21\0\2\20\1\0\15\21\1\u0108\5\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\7\21\21\0\2\20\1\0\11\21\1\212"+ + "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\3\21\1\u0109\5\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\10\21\1\u010a\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\4\21"+ + "\1\u0104\2\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ + "\1\u010b\6\21\3\0\2\21\1\214\4\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\4\21\1\364\4\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\4\21\1\u010c\4\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+ + "\1\212\4\21\3\0\2\21\1\u010c\4\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\3\21\1\u010d\5\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\15\21\1\u0104\5\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\325\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\7\21\1\u0104\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\10\21\1\271\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\21\0"+ + "\2\20\1\0\14\21\1\u0104\1\21\1\354\4\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\u010e\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\u010f\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\6\21\1\u0110\2\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\1\u0111\6\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\7\21\21\0\2\20\1\0\20\21\1\u0104\2\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\6\21\1\u0112\2\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\3\21\1\303\3\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\7\0\1\u0113\11\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+ + "\1\u0114\4\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\u0115\1\212\3\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\322\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\u0116"+ + "\7\21\3\0\7\21\21\0\2\20\1\0\15\21\1\u0117"+ + "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\2\21\1\u0118\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\273"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\33\0\1\u0119\65\0\1\20\6\21\1\0\2\20"+ + "\6\21\1\u011a\2\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\2\21\1\274\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\360"+ + "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\u0104"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\323\6\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\1\325\6\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u011b\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\212\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ + "\1\u011c\4\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\30\0\1\346\61\0\1\350\1\351\3\0"+ + "\1\352\71\0\1\u011d\60\0\1\u011e\114\0\1\u011f\114\0"+ + "\1\u0120\60\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\7\21\21\0\2\20\1\0\4\21\1\u0121\16\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\6\21\1\273\2\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\4\21\1\u0122\4\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\6\21\1\u0123\2\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\3\21\1\u0104\3\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\2\21\1\u0124\4\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\15\21\1\u0125\5\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\7\21\1\u0126\1\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\212"+ + "\4\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\10\21\1\u0110\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\16\21"+ + "\1\u0127\1\21\1\325\2\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\3\21\1\372\5\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21"+ + "\1\u0128\1\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\3\21\1\u0129\3\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\10\21\1\u0104\3\0\7\21\21\0"+ + "\2\20\1\0\15\21\1\u0104\5\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\363"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\36\0\1\u012a\64\0\3\376\1\0"+ + "\1\376\3\0\1\u012b\102\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\u012c\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\17\21\1\212\3\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\2\21\1\274\6\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u012d"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\3\21\1\363\5\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\2\21\1\u012e\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\u0104\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\u012f"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\5\21\1\212\3\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\2\21\1\363\6\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\5\21\1\333"+ + "\1\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u0130"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\10\21\1\212\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\4\21\1\u0131\2\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\7\21\1\u0132\1\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\2\21\1\212\6\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\7\21\21\0\2\20\1\0\15\21\1\273\5\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\u0133\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\u0134\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+ + "\1\u0135\3\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\34\0\1\u0136\64\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\14\21"+ + "\1\212\6\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\u0137\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+ + "\1\u0138\3\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\70\0\1\u0139\4\0\1\u013a\113\0\1\u013b"+ + "\114\0\1\u013c\114\0\1\u013d\24\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\5\21"+ + "\1\212\15\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\1\21\1\u0126\5\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\17\21\1\u0104\3\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\3\21\1\u013e\3\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\21\21"+ + "\1\u0104\1\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\4\21\1\u013f\4\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\20\21\1\325\2\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\4\21\1\212\2\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\1\21\1\u0140\7\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\u0141\10\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\u0142"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\u010a"+ + "\6\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\7\21\21\0\2\20\1\0\15\21\1\u0103"+ + "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\u0143\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\6\21\1\u0104\2\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\u0144\10\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\7\21\21\0\2\20\1\0\16\21\1\u0104\4\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\7\21\1\313\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\u0145\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\35\0\1\u0146\63\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\u0147\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\u0128\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\70\0\1\u0148"+ + "\4\0\1\u0149\107\0\1\u014a\4\0\1\u014b\107\0\1\u014c"+ + "\4\0\1\u014d\23\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\21\1\u0104\5\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u0104\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\5\21\1\u0104\3\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\13\21\1\u014e\7\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\3\21\1\u014f\3\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\6\21\1\303\2\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ + "\1\0\13\21\1\u0150\7\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\u0151\11\21\1\0\1\21"+ + "\2\0\1\21\112\0\1\u0139\114\0\1\u013a\115\0\1\u0152"+ + "\114\0\1\u0153\120\0\1\u0139\114\0\1\u013a\1\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\u013f\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\4\21\1\u0154\4\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ + "\1\u0155\2\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u0156\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\2\21\1\u0157\6\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\u0113\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ + "\1\u0158\4\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ + "\1\u0159\2\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\1\u015a\6\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\7\21\1\u015b\1\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\340\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[22638]; + 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; + } + + + /* 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; + + /* 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 = + "\17\0\4\1\1\11\11\1\1\11\11\1\1\11\2\1"+ + "\1\11\23\1\3\11\2\1\2\11\1\1\1\11\1\1"+ + "\1\11\1\1\1\11\1\1\1\11\1\1\1\11\1\1"+ + "\1\11\2\1\2\11\1\1\2\11\1\1\1\11\1\1"+ + "\2\11\1\1\1\11\1\1\1\11\40\1\1\0\17\1"+ + "\1\0\6\11\4\1\1\11\1\0\20\1\2\11\2\1"+ + "\1\0\50\1\1\0\11\1\5\0\21\1\1\0\26\1"+ + "\1\11\5\1\1\0\3\1\4\0\11\1\1\11\1\0"+ + "\12\1\1\0\2\1\2\11\3\0\10\1\1\11\1\1"+ + "\6\0\4\1\2\11\10\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[347]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an single quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an double quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an single quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an double quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q!...! style double quoted string. + */ + public static final int INTERNAL_STRING_Q_BANG = -7; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q{...} style double quoted string. + */ + public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q<...> style double quoted string. + */ + public static final int INTERNAL_STRING_Q_LT = -9; + + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q(...) style double quoted string. + */ + public static final int INTERNAL_STRING_Q_PAREN = -10; + + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q/.../ style double quoted string. + */ + public static final int INTERNAL_STRING_Q_SLASH = -11; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q[...] style double quoted string. + */ + public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public RubyTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + start = text.offset; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_UNQUOTED: + state = HEREDOC_EOF_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: + state = HEREDOC_EOF_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED: + state = HEREDOC_EOF_DOUBLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_UNQUOTED: + state = HEREDOC_EOT_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: + state = HEREDOC_EOT_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED: + state = HEREDOC_EOT_DOUBLE_QUOTED; + start = text.offset; + break; + case INTERNAL_STRING_Q_BANG: + state = STRING_Q_BANG; + start = text.offset; + break; + case INTERNAL_STRING_Q_CURLY_BRACE: + state = STRING_Q_CURLY_BRACE; + start = text.offset; + break; + case INTERNAL_STRING_Q_LT: + state = STRING_Q_LT; + start = text.offset; + break; + case INTERNAL_STRING_Q_PAREN: + state = STRING_Q_PAREN; + start = text.offset; + break; + case INTERNAL_STRING_Q_SLASH: + state = STRING_Q_SLASH; + start = text.offset; + break; + case INTERNAL_STRING_Q_SQUARE_BRACKET: + state = STRING_Q_SQUARE_BRACKET; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public RubyTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public RubyTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 188) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 39: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_LT); + } + case 52: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 53: break; + case 45: + { addToken(Token.LITERAL_BOOLEAN); + } + case 54: break; + case 32: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 55: break; + case 19: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; + } + case 56: break; + case 18: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; + } + case 57: break; + case 20: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; + } + case 58: break; + case 46: + { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_DOCUMENTATION); + } + case 59: break; + case 10: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 60: break; + case 44: + { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } + } + case 61: break; + case 9: + { addToken(Token.FUNCTION); + } + case 62: break; + case 22: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; + } + case 63: break; + case 42: + { addToken(Token.VARIABLE); + } + case 64: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 65: break; + case 31: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; + } + case 66: break; + case 4: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 67: break; + case 41: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_CURLY_BRACE); + } + case 68: break; + case 50: + { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED); + } + case 69: break; + case 51: + { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED); + } + case 70: break; + case 47: + { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED); + } + case 71: break; + case 14: + { /* Skip escaped chars. */ + } + case 72: break; + case 25: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 73: break; + case 43: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 74: break; + case 28: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; + } + case 75: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 76: break; + case 17: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; + } + case 77: break; + case 35: + { addToken(Token.PREPROCESSOR); + } + case 78: break; + case 11: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 79: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 80: break; + case 38: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SLASH); + } + case 81: break; + case 27: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + } + case 82: break; + case 16: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 83: break; + case 37: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_BANG); + } + case 84: break; + case 23: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 85: break; + case 30: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; + } + case 86: break; + case 49: + { start = zzMarkedPos-6; yybegin(DOCCOMMENT); + } + case 87: break; + case 34: + { addToken(Token.RESERVED_WORD); + } + case 88: break; + case 26: + { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 89: break; + case 36: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SQUARE_BRACKET); + } + case 90: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 91: break; + case 5: + { addNullToken(); return firstToken; + } + case 92: break; + case 21: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; + } + case 93: break; + case 40: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_PAREN); + } + case 94: break; + case 7: + { addToken(Token.OPERATOR); + } + case 95: break; + case 24: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 96: break; + case 33: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 97: break; + case 48: + { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED); + } + case 98: break; + case 12: + { start = zzMarkedPos-1; yybegin(BACKTICKS); + } + case 99: break; + case 13: + { + } + case 100: break; + case 15: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 101: break; + case 29: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; + } + case 102: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case HEREDOC_EOF_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; + } + case 348: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 349: break; + case HEREDOC_EOT_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; + } + case 350: break; + case HEREDOC_EOT_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; + } + case 351: break; + case STRING_Q_SLASH: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; + } + case 352: break; + case STRING_Q_BANG: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; + } + case 353: break; + case STRING_Q_LT: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; + } + case 354: break; + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 355: break; + case BACKTICKS: { + addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 356: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 357: break; + case HEREDOC_EOF_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; + } + case 358: break; + case STRING_Q_CURLY_BRACE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; + } + case 359: break; + case STRING_Q_PAREN: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; + } + case 360: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 361: break; + case STRING_Q_SQUARE_BRACKET: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; + } + case 362: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex new file mode 100644 index 0000000..6e8bafb --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex @@ -0,0 +1,672 @@ +/* + * 02/25/2005 + * + * SASTokenMaker.java - Scanner for SAS files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class generates tokens representing a text stream as SAS.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated SASTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class SASTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public SASTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "*", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +LineTerminator = ([\n]) +Letter = ([A-Za-z_]) +Digit = ([0-9]) +Whitespace = ([ \t]+) +Semicolon = ([;]) + +Identifier = (({Letter}|{Digit})+) +MacroVariable = (&{Identifier}) + +Operators1 = ("+"|"-"|"*"|"/"|"^"|"|") +Operators2 = (([\^\~]?=)|(">"[=]?)|("<"[=]?)) +Operators3 = ("eq"|"ne"|"gt"|"lt"|"ge"|"le"|"in") +Operator = ({Operators1}|{Operators2}|{Operators3}) +Separator = ([\(\)]) + +StringBoundary = (\") +CharBoundary = (\') + +LineCommentBegin = ("*") +MLCBegin = ("/*") +MLCEnd = ("*/") + +%state STRING +%state CHAR +%state MLC + +%% + + { + + /* Keywords */ + "_all_" | + "_character_" | + "_data_" | + "_infile_" | + "_last_" | + "_null_" | + "_numeric_" | + "_page_" | + "_temporary_" | + "abend" | + "abort" | + "all" | + "alter" | + "and" | + "array" | + "as" | + "ascending" | + "attrib" | + "axis" | + "bell" | + "blank" | + "border" | + "bounds" | + "by" | + "call" | + "cancel" | + "cards" | + "cards4" | + "choro" | + "class" | + "classes" | + "clear" | + "close" | + "compute" | + "contrast" | + "coord" | + "coordinates" | + "cov" | + "create" | + "data" | + "datalines" | + "datalines4" | + "delete" | + "descending" | + "describe" | + "discrete" | + "disk" | + "display" | + "dm" | + "do" | + "drop" | + "dummy" | + "else" | + "end" | + "endrsubmit" | + "endsas" | + "error" | + "except" | + "expandtabs" | + "factors" | + "file" | + "filename" | + "flowover" | + "footnote" | + "frame" | + "freq" | + "from" | + "go" | + "goption" | + "goptions" | + "goto" | + "grid" | + "group" | + "groupby" | + "groupformat" | + "having" | + "haxis" | + "hbar" | + "heading" | + "high" | + "html" | + "id" | + "if" | + "infile" | + "informat" | + "inner" | + "input" | + "insert" | + "intersect" | + "keep" | + "keylabel" | + "label" | + "lable" | + "legend" | + "length" | + "libname" | + "lineqs" | + "link" | + "list" | + "listing" | + "log" | + "lostcard" | + "low" | + "mark" | + "matings" | + "mean" | + "merge" | + "missing" | + "missover" | + "mod" | + "model" | + "modify" | + "n" | + "nocell" | + "nocharacters" | + "nodupkey" | + "noexpandtabs" | + "noframe" | + "noheading" | + "noinput" | + "nolegend" | + "nopad" | + "noprint" | + "nosharebuffers" | + "not" | + "note" | + "notitle" | + "notitles" | + "notsorted" | + "ods" | + "old" | + "option" | + "or" | + "order" | + "orderby" | + "other" | + "otherwise" | + "outer" | + "output" | + "over" | + "overlay" | + "overprint" | + "pad" | + "pageby" | + "pagesize" | + "parmcards" | + "parmcards4" | + "parms" | + "pattern" | + "pct" | + "pctn" | + "pctsum" | + "picture" | + "pie" | + "pie3d" | + "plotter" | + "predict" | + "prefix" | + "printer" | + "proc" | + "ps" | + "put" | + "quit" | + "random" | + "range" | + "remove" | + "rename" | + "response" | + "replace" | + "reset" | + "retain" | + "return" | + "rsubmit" | + "run" | + "s2" | + "select" | + "set" | + "sharebuffers" | + "signoff" | + "signon" | + "sim" | + "skip" | + "source2" | + "startsas" | + "std" | + "stop" | + "stopover" | + "strata" | + "sum" | + "sumby" | + "supvar" | + "symbol" | + "table" | + "tables" | + "tape" | + "terminal" | + "test" | + "then" | + "time" | + "title" | + "to" | + "transform" | + "treatments" | + "truncover" | + "unbuf" | + "unbuffered" | + "union" | + "until" | + "update" | + "validate" | + "value" | + "var" | + "variables" | + "vaxis" | + "vbar" | + "weight" | + "when" | + "where" | + "while" | + "with" | + "window" | + "x" { addToken(Token.RESERVED_WORD); } + + /* Base SAS procs. */ + "append" | + "calendar" | + "catalog" | + "chart" | + "cimport" | + "compare" | + "contents" | + "copy" | + "cpm" | + "cport" | + "datasets" | + "display" | + "explode" | + "export" | + "fontreg" | + "format" | + "forms" | + "fslist" | + "import" | + "means" | + "migrate" | + "options" | + "optload" | + "optsave" | + "plot" | + "pmenu" | + "print" | + "printto" | + "proto" | + "prtdef" | + "prtexp" | + "pwencode" | + "rank" | + "registry" | + "report" | + "sort" | + "sql" | + "standard" | + "summary" | + "tabulate" | + "template" | + "timeplot" | + "transpose" { addToken(Token.DATA_TYPE); } + + /* SAS/STAT procs. */ + "corr" | + "freq" | + "univariate" { addToken(Token.DATA_TYPE); } + + /* Macros. */ + "%abort" | + "%bquote" | + "%by" | + "%cms" | + "%copy" | + "%display" | + "%do" | + "%else" | + "%end" | + "%eval" | + "%global" | + "%go" | + "%goto" | + "%if" | + "%inc" | + "%include" | + "%index" | + "%input" | + "%keydef" | + "%length" | + "%let" | + "%local" | + "%macro" | + "%mend" | + "%nrbquote" | + "%nrquote" | + "%nrstr" | + "%put" | + "%qscan" | + "%qsubstr" | + "%qsysfunc" | + "%quote" | + "%qupcase" | + "%scan" | + "%str" | + "%substr" | + "%superq" | + "%syscall" | + "%sysevalf" | + "%sysexec" | + "%sysfunc" | + "%sysget" | + "%sysprod" | + "%sysrput" | + "%then" | + "%to" | + "%tso" | + "%unquote" | + "%until" | + "%upcase" | + "%while" | + "%window" { addToken(Token.FUNCTION); } + +} + + { + + {LineTerminator} { addNullToken(); return firstToken; } + + /* Comments. */ + /* Do comments before operators as "*" can signify a line comment as */ + /* well as an operator. */ + ^[ \t]*{LineCommentBegin} { + // We must do this because of how we + // abuse JFlex; since we return an entire + // list of tokens at once instead of a + // single token at a time, the "^" regex + // character doesn't really work, so we must + // check that we're at the beginning of a + // line ourselves. + start = zzStartRead; + // Might not be any whitespace. + if (yylength()>1) { + addToken(zzStartRead,zzMarkedPos-2, Token.WHITESPACE); + zzStartRead = zzMarkedPos-1; + } + // Remember: zzStartRead may now be updated, + // so we must check against 'start'. + if (start==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + else { + addToken(zzStartRead,zzStartRead, Token.OPERATOR); + } + } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + + /* Do operators before identifiers since some of them are words. */ + {Operator} { addToken(Token.OPERATOR); } + {Separator} { addToken(Token.SEPARATOR); } + + {Identifier} { addToken(Token.IDENTIFIER); } + {MacroVariable} { addToken(Token.VARIABLE); } + {Semicolon} { addToken(Token.IDENTIFIER); } + + {Whitespace} { addToken(Token.WHITESPACE); } + + {StringBoundary} { start = zzMarkedPos-1; yybegin(STRING); } + {CharBoundary} { start = zzMarkedPos-1; yybegin(CHAR); } + + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as OK; */ + /* This will include "." from statements like "from lib.dataset". */ + . { addToken(Token.IDENTIFIER); } + +} + + { + + [^\n\"]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +/* {StringBoundary}{StringBoundary} {} */ + {StringBoundary} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + +} + + { + + [^\n\']+ {} + {LineTerminator} { yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +/* {CharBoundary}{CharBoundary} {} */ + {CharBoundary} { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + +} + + { + + [^\n\*]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java new file mode 100644 index 0000000..31725e4 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java @@ -0,0 +1,1488 @@ +/* The following code was generated by JFlex 1.4.1 on 1/20/09 10:04 AM */ + +/* + * 02/25/2005 + * + * SASTokenMaker.java - Scanner for SAS files. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class generates tokens representing a text stream as SAS.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated SASTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class SASTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 6; + public static final int CHAR = 4; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 1, 2, 2, 3, 3, 4, 4 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\1\25\0\1\3\1\0\1\23\2\0\1\53\1\4"+ + "\1\24\2\22\1\6\1\5\1\0\1\5\1\0\1\7\2\2\1\52"+ + "\1\51\1\45\5\2\1\0\1\0\1\10\1\12\1\10\2\0\1\26"+ + "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44"+ + "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35"+ + "\1\46\1\47\1\43\1\41\1\50\3\0\1\10\1\25\1\0\1\26"+ + "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44"+ + "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35"+ + "\1\46\1\47\1\43\1\41\1\50\1\0\1\5\1\0\1\11\uff81\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 = + "\5\0\1\1\1\2\1\1\1\3\1\1\3\4\3\1"+ + "\1\5\4\1\1\6\1\7\1\10\15\1\1\5\4\1"+ + "\1\3\1\11\1\12\1\13\1\14\1\12\1\15\1\16"+ + "\1\12\1\17\1\12\1\20\1\21\1\4\7\1\1\5"+ + "\5\1\1\4\3\1\1\4\15\1\1\5\66\1\1\5"+ + "\14\1\21\0\1\22\1\5\5\1\1\5\66\1\1\23"+ + "\50\1\1\5\15\1\1\5\1\1\1\5\4\1\1\5"+ + "\20\1\1\5\3\1\7\0\1\24\2\0\1\24\24\0"+ + "\21\1\1\5\6\1\1\5\44\1\1\5\1\1\1\5"+ + "\11\1\1\5\7\1\1\5\4\1\1\23\22\1\1\5"+ + "\5\1\12\0\1\24\16\0\10\1\1\5\3\1\1\5"+ + "\13\1\1\5\2\1\1\5\3\1\1\5\23\1\1\5"+ + "\10\1\1\23\2\5\6\1\16\0\42\1\13\0\17\1"+ + "\2\0\12\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[639]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\54\0\130\0\204\0\260\0\334\0\334\0\u0108"+ + "\0\u0134\0\u0160\0\334\0\u018c\0\u01b8\0\u01b8\0\u01e4\0\u0210"+ + "\0\u023c\0\u0268\0\u0294\0\u02c0\0\u02ec\0\334\0\334\0\334"+ + "\0\u0318\0\u0344\0\u0370\0\u039c\0\u03c8\0\u03f4\0\u0420\0\u044c"+ + "\0\u0478\0\u04a4\0\u04d0\0\u04fc\0\u0528\0\u0108\0\u0554\0\u0580"+ + "\0\u05ac\0\u05d8\0\u0604\0\334\0\u0630\0\334\0\334\0\u065c"+ + "\0\334\0\334\0\u0688\0\334\0\u06b4\0\u0160\0\334\0\u0108"+ + "\0\u06e0\0\u070c\0\u0738\0\u0764\0\u0790\0\u07bc\0\u07e8\0\u0814"+ + "\0\u0840\0\u086c\0\u0898\0\u08c4\0\u08f0\0\u091c\0\u0948\0\u0974"+ + "\0\u09a0\0\u09cc\0\u09f8\0\u0a24\0\u0a50\0\u0a7c\0\u0aa8\0\u0ad4"+ + "\0\u0b00\0\u0b2c\0\u0b58\0\u0b84\0\u0bb0\0\u0bdc\0\u0c08\0\u0c34"+ + "\0\u0c60\0\u0c8c\0\u0cb8\0\u0ce4\0\u0d10\0\u0d3c\0\u0d68\0\u0d94"+ + "\0\u0dc0\0\u0dec\0\u0e18\0\u0e44\0\u0e70\0\u0e9c\0\u0ec8\0\u0ef4"+ + "\0\u0f20\0\u0f4c\0\u0f78\0\u0fa4\0\u0fd0\0\u0ffc\0\u1028\0\u1054"+ + "\0\u1080\0\u10ac\0\u10d8\0\u1104\0\u1130\0\u115c\0\u1188\0\u11b4"+ + "\0\u11e0\0\u120c\0\u1238\0\u1264\0\u1290\0\u12bc\0\u12e8\0\u1314"+ + "\0\u1340\0\u136c\0\u1398\0\u13c4\0\u13f0\0\u141c\0\u1448\0\u1474"+ + "\0\u14a0\0\u14cc\0\u14f8\0\u1524\0\u1550\0\u157c\0\u15a8\0\u15d4"+ + "\0\u1600\0\u162c\0\u1658\0\u1684\0\u16b0\0\u16dc\0\u1708\0\u1734"+ + "\0\u1760\0\u178c\0\u17b8\0\u17e4\0\u1810\0\u183c\0\u1868\0\u1894"+ + "\0\u18c0\0\u18ec\0\u1918\0\u1944\0\u1970\0\u199c\0\u19c8\0\u19f4"+ + "\0\u1a20\0\u1a4c\0\u1a78\0\u1aa4\0\334\0\u1ad0\0\u1afc\0\u1b28"+ + "\0\u1b54\0\u1b80\0\u1bac\0\u1bd8\0\u1c04\0\u1c30\0\u1c5c\0\u1c88"+ + "\0\u1cb4\0\u1ce0\0\u1d0c\0\u1d38\0\u1d64\0\u1d90\0\u1dbc\0\u1de8"+ + "\0\u1e14\0\u1e40\0\u1e6c\0\u1e98\0\u1ec4\0\u1ef0\0\u1f1c\0\u1f48"+ + "\0\u1f74\0\u1fa0\0\u1fcc\0\u1ff8\0\u2024\0\u2050\0\u207c\0\u20a8"+ + "\0\u20d4\0\u2100\0\u212c\0\u2158\0\u2184\0\u21b0\0\u21dc\0\u2208"+ + "\0\u2234\0\u2260\0\u228c\0\u22b8\0\u22e4\0\u2310\0\u233c\0\u2368"+ + "\0\u2394\0\u23c0\0\u23ec\0\u2418\0\u2444\0\u2470\0\u249c\0\u24c8"+ + "\0\u24f4\0\u2520\0\u0108\0\u254c\0\u2578\0\u25a4\0\u25d0\0\u25fc"+ + "\0\u2628\0\u2654\0\u2680\0\u26ac\0\u26d8\0\u2704\0\u2730\0\u275c"+ + "\0\u2788\0\u27b4\0\u27e0\0\u280c\0\u2838\0\u2864\0\u2890\0\u28bc"+ + "\0\u28e8\0\u2914\0\u2940\0\u296c\0\u2998\0\u29c4\0\u29f0\0\u2a1c"+ + "\0\u2a48\0\u2a74\0\u2aa0\0\u2acc\0\u2af8\0\u2b24\0\u2b50\0\u2b7c"+ + "\0\u2ba8\0\u2bd4\0\u2c00\0\u2c2c\0\u2c58\0\u2c84\0\u2cb0\0\u2cdc"+ + "\0\u2d08\0\u2d34\0\u2d60\0\u2d8c\0\u2db8\0\u2de4\0\u2e10\0\u2e3c"+ + "\0\u2e68\0\u2e94\0\u2ec0\0\u2eec\0\u2f18\0\u2f44\0\u2f70\0\u2f9c"+ + "\0\u2fc8\0\u2ff4\0\u3020\0\u304c\0\u3078\0\u30a4\0\u30d0\0\u30fc"+ + "\0\u3128\0\u3154\0\u3180\0\u31ac\0\u31d8\0\u3204\0\u3230\0\u325c"+ + "\0\u3288\0\u32b4\0\u32e0\0\u330c\0\u3338\0\u3364\0\u3390\0\u33bc"+ + "\0\u33e8\0\u3414\0\u3440\0\u346c\0\u3498\0\u34c4\0\u34f0\0\334"+ + "\0\u351c\0\u3548\0\u3574\0\u35a0\0\u35cc\0\u35f8\0\u3624\0\u3650"+ + "\0\u367c\0\u36a8\0\u36d4\0\u3700\0\u372c\0\u3758\0\u3784\0\u37b0"+ + "\0\u37dc\0\u3808\0\u3834\0\u3860\0\u388c\0\u38b8\0\u38e4\0\u3910"+ + "\0\u393c\0\u3968\0\u3994\0\u39c0\0\u39ec\0\u3a18\0\u3a44\0\u3a70"+ + "\0\u3a9c\0\u3ac8\0\u3af4\0\u3b20\0\u3b4c\0\u3b78\0\u3ba4\0\u3bd0"+ + "\0\u3bfc\0\u3c28\0\u3c54\0\u3c80\0\u26ac\0\u3cac\0\u3cd8\0\u3d04"+ + "\0\u3d30\0\u3d5c\0\u3d88\0\u3db4\0\u3de0\0\u3e0c\0\u3e38\0\u3e64"+ + "\0\u3e90\0\u3ebc\0\u3ee8\0\u3f14\0\u3f40\0\u3f6c\0\u3f98\0\u3fc4"+ + "\0\u3ff0\0\u401c\0\u4048\0\u4074\0\u40a0\0\u40cc\0\u40f8\0\u4124"+ + "\0\u4150\0\u417c\0\u41a8\0\u41d4\0\u4200\0\u422c\0\u4258\0\u4284"+ + "\0\u42b0\0\u42dc\0\u4308\0\u1ff8\0\u4334\0\u4360\0\u438c\0\u43b8"+ + "\0\u43e4\0\u4410\0\u443c\0\u4468\0\u4494\0\u4308\0\u44c0\0\u44ec"+ + "\0\u4518\0\u4544\0\u4570\0\u459c\0\u45c8\0\u45f4\0\u4620\0\u464c"+ + "\0\u4678\0\u46a4\0\u46d0\0\u46fc\0\u4728\0\u4754\0\u4780\0\u47ac"+ + "\0\u47d8\0\u4804\0\u4830\0\u485c\0\u4888\0\u48b4\0\u48e0\0\u490c"+ + "\0\u4938\0\u4964\0\u4990\0\u49bc\0\u49e8\0\u4a14\0\u4a40\0\u4a6c"+ + "\0\u4a98\0\u4ac4\0\u4af0\0\u4b1c\0\u4b48\0\u4b74\0\u4ba0\0\u4bcc"+ + "\0\u4bf8\0\u4c24\0\u4c50\0\u4c7c\0\u4ca8\0\u4cd4\0\u4d00\0\u4d2c"+ + "\0\u4d58\0\u4d84\0\u4db0\0\u4ddc\0\u4e08\0\u4e34\0\u4e60\0\u4e8c"+ + "\0\u4eb8\0\u4ee4\0\u4f10\0\u4f3c\0\u4f68\0\u4f94\0\u4fc0\0\u4fec"+ + "\0\u5018\0\u5044\0\u5070\0\u509c\0\u50c8\0\u50f4\0\u5120\0\u514c"+ + "\0\u15d4\0\u5178\0\u51a4\0\u51d0\0\u51fc\0\u5228\0\u5254\0\u5280"+ + "\0\u52ac\0\u52d8\0\u5304\0\u5330\0\u535c\0\u5388\0\u53b4\0\u53e0"+ + "\0\u540c\0\u5438\0\u5464\0\u5490\0\u54bc\0\u54e8\0\u5514\0\u5540"+ + "\0\u556c\0\u5598\0\u55c4\0\u55f0\0\u561c\0\u5648\0\u5674\0\u56a0"+ + "\0\u56cc\0\u56f8\0\u5724\0\u5750\0\u577c\0\u57a8\0\u57d4\0\u5800"+ + "\0\u582c\0\u5858\0\u5884\0\u58b0\0\u58dc\0\u5908\0\u5934\0\u5960"+ + "\0\u598c\0\u59b8\0\u59e4\0\u5a10\0\u5a3c\0\u5a68\0\u5a94\0\u5ac0"+ + "\0\u5aec\0\u5b18\0\u5b44\0\u5b70\0\u5b9c\0\u5bc8\0\u5bf4\0\u5c20"+ + "\0\u5c4c\0\u5c78\0\u5ca4\0\u5cd0\0\u5cfc\0\u5d28\0\u5d54\0\u5d80"+ + "\0\u5dac\0\u5dd8\0\u5e04\0\u5e30\0\u5e5c\0\u5e88\0\u5eb4\0\u5ee0"+ + "\0\u5f0c\0\u5f38\0\u5f64\0\u5f90\0\u5fbc\0\u5fe8\0\u6014\0\u6040"+ + "\0\u606c\0\u6098\0\u60c4\0\u60f0\0\u611c\0\u6148\0\u6174\0\u61a0"+ + "\0\u61cc\0\u61f8\0\u6224\0\u6250\0\u627c\0\u62a8\0\u62d4\0\u6300"+ + "\0\u632c\0\u6358\0\u6384\0\u63b0\0\u63dc\0\u6408\0\u6434\0\u6460"+ + "\0\u648c\0\u64b8\0\u64e4\0\u6510\0\u653c\0\u6568\0\u6594\0\u65c0"+ + "\0\u65ec\0\u6618\0\u6644\0\u6670\0\u669c\0\u45f4\0\u66c8\0\u66f4"+ + "\0\u6720\0\u674c\0\u535c\0\u6778\0\u67a4\0\u67d0\0\u67fc\0\u6828"+ + "\0\u6854\0\u6880\0\u68ac\0\u68d8\0\u6904\0\u6930\0\u695c"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[639]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\1\10\1\11\1\12\2\13\1\14\1\15"+ + "\1\16\1\13\1\17\1\20\1\21\1\22\1\23\1\24"+ + "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+ + "\1\10\1\45\1\46\1\47\1\10\1\50\1\51\3\10"+ + "\1\52\1\6\1\7\1\10\1\53\1\12\1\13\1\54"+ + "\1\14\1\15\1\16\1\13\1\17\1\20\1\21\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\10\1\45\1\46\1\47\1\10\1\50"+ + "\1\51\3\10\1\52\1\55\1\56\21\55\1\57\30\55"+ + "\1\60\1\61\22\60\1\62\27\60\1\63\1\64\4\63"+ + "\1\65\45\63\56\0\1\10\10\0\7\10\3\0\26\10"+ + "\4\0\1\11\52\0\1\66\10\0\7\66\3\0\26\66"+ + "\7\0\1\67\57\0\1\13\43\0\1\10\10\0\1\10"+ + "\1\70\1\71\2\10\1\72\1\10\3\0\4\10\1\73"+ + "\11\10\1\74\7\10\3\0\1\10\10\0\7\10\3\0"+ + "\10\10\1\75\15\10\3\0\1\10\10\0\1\70\6\10"+ + "\3\0\13\10\1\76\12\10\3\0\1\10\10\0\1\70"+ + "\3\10\1\70\2\10\3\0\4\10\1\77\6\10\1\100"+ + "\12\10\3\0\1\10\10\0\1\101\5\10\1\102\3\0"+ + "\1\10\1\103\1\10\1\104\1\105\6\10\1\46\12\10"+ + "\3\0\1\10\10\0\1\106\3\10\1\70\1\10\1\107"+ + "\3\0\1\10\1\110\11\10\1\111\12\10\3\0\1\10"+ + "\10\0\2\10\1\112\4\10\3\0\5\10\2\46\2\10"+ + "\1\113\14\10\3\0\1\10\10\0\2\10\1\114\1\10"+ + "\1\115\1\116\1\117\3\0\1\10\1\120\1\121\2\10"+ + "\1\122\4\10\1\123\13\10\3\0\1\10\10\0\2\10"+ + "\1\124\1\10\1\125\1\126\1\10\3\0\4\10\1\127"+ + "\2\10\1\130\2\10\1\131\2\10\1\132\1\133\7\10"+ + "\3\0\1\10\10\0\5\10\1\134\1\135\3\0\1\10"+ + "\1\136\1\10\1\137\1\140\5\10\1\141\1\142\12\10"+ + "\3\0\1\10\10\0\1\143\3\10\1\144\1\10\1\145"+ + "\3\0\1\10\1\146\13\10\1\147\10\10\3\0\1\10"+ + "\10\0\1\150\6\10\3\0\1\10\1\151\5\10\1\152"+ + "\1\153\15\10\3\0\1\10\10\0\1\154\5\10\1\155"+ + "\3\0\1\10\1\156\2\10\1\157\3\10\1\160\1\46"+ + "\1\10\1\46\12\10\3\0\1\10\10\0\5\10\1\161"+ + "\1\162\3\0\1\10\1\163\2\10\1\164\2\10\1\165"+ + "\3\10\1\166\12\10\3\0\1\10\10\0\1\167\1\170"+ + "\2\10\1\171\1\10\1\172\3\0\3\10\1\173\4\10"+ + "\1\174\2\10\1\175\1\176\2\10\1\177\5\10\1\46"+ + "\3\0\1\10\10\0\2\10\1\200\4\10\3\0\12\10"+ + "\1\201\13\10\3\0\1\10\10\0\1\202\5\10\1\203"+ + "\3\0\1\10\1\204\11\10\1\205\12\10\3\0\1\10"+ + "\10\0\5\10\1\206\1\207\3\0\1\10\1\210\1\211"+ + "\1\10\1\212\2\10\1\46\1\213\1\214\10\10\1\215"+ + "\3\10\3\0\1\10\10\0\4\10\1\216\1\124\1\10"+ + "\3\0\4\10\1\217\1\220\2\10\1\221\1\10\1\222"+ + "\6\10\1\223\4\10\3\0\1\10\10\0\1\224\4\10"+ + "\1\225\1\10\3\0\13\10\1\226\1\46\11\10\3\0"+ + "\1\10\10\0\1\227\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\230\13\10\1\147\10\10"+ + "\3\0\1\10\10\0\1\231\5\10\1\232\3\0\3\10"+ + "\1\233\22\10\14\0\1\234\1\235\1\236\1\237\1\240"+ + "\1\241\1\242\4\0\1\243\1\244\2\0\1\245\1\0"+ + "\1\246\1\247\1\250\1\251\2\0\1\252\1\0\1\253"+ + "\2\0\1\254\7\0\1\53\2\0\1\54\45\0\1\55"+ + "\1\0\21\55\1\0\30\55\1\60\1\0\22\60\1\0"+ + "\27\60\1\63\1\0\4\63\1\0\45\63\7\0\1\255"+ + "\46\0\1\10\10\0\7\10\3\0\5\10\1\256\20\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\257\16\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\260\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\261\7\10"+ + "\1\262\13\10\3\0\1\10\10\0\6\10\1\213\3\0"+ + "\26\10\3\0\1\10\10\0\1\263\3\10\1\264\1\265"+ + "\1\266\3\0\2\10\1\267\1\270\1\10\1\271\1\272"+ + "\1\273\2\10\1\274\13\10\3\0\1\10\10\0\6\10"+ + "\1\124\3\0\13\10\1\275\12\10\3\0\1\10\10\0"+ + "\4\10\1\276\2\10\3\0\12\10\1\277\13\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\300\2\10\1\213"+ + "\1\10\1\301\14\10\3\0\1\10\10\0\4\10\1\302"+ + "\2\10\3\0\11\10\1\303\14\10\3\0\1\10\10\0"+ + "\7\10\3\0\12\10\1\257\2\10\1\304\10\10\3\0"+ + "\1\10\10\0\1\153\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\1\305\6\10\3\0\1\10\1\306\6\10\1\307"+ + "\15\10\3\0\1\10\10\0\2\10\1\310\1\311\3\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\312\4\10"+ + "\3\0\7\10\1\313\5\10\1\314\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\315\10\10\3\0\1\10"+ + "\10\0\3\10\1\46\3\10\3\0\7\10\1\316\12\10"+ + "\1\46\3\10\3\0\1\10\10\0\2\10\1\317\1\10"+ + "\1\320\2\10\3\0\6\10\1\321\1\322\2\10\1\323"+ + "\13\10\3\0\1\10\10\0\7\10\3\0\12\10\1\324"+ + "\13\10\3\0\1\10\10\0\7\10\3\0\10\10\1\325"+ + "\15\10\3\0\1\10\10\0\1\326\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\327\24\10"+ + "\3\0\1\10\10\0\2\10\1\330\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\5\10\1\331\1\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\3\10\1\332\22\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\333\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\334\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\5\10\1\46\20\10"+ + "\3\0\1\10\10\0\4\10\1\335\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\317\1\46\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\336"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\2\10\1\337"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\12\10\1\340"+ + "\13\10\3\0\1\10\10\0\1\341\6\10\3\0\13\10"+ + "\1\342\12\10\3\0\1\10\10\0\6\10\1\220\3\0"+ + "\26\10\3\0\1\10\10\0\1\147\6\10\3\0\1\10"+ + "\1\343\11\10\1\72\12\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\113\14\10\3\0\1\10\10\0\2\10"+ + "\1\344\1\10\1\345\1\346\1\10\3\0\4\10\1\347"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\350"+ + "\11\10\1\351\12\10\3\0\1\10\10\0\1\352\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10"+ + "\1\353\1\10\1\350\12\10\3\0\1\10\10\0\2\10"+ + "\1\354\4\10\3\0\4\10\1\355\4\10\1\356\1\357"+ + "\1\360\5\10\1\46\4\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\361\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\362\14\10\3\0\1\10\10\0\3\10"+ + "\1\363\3\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\16\10\1\133\2\10\1\364\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\365\24\10\3\0\1\10"+ + "\10\0\2\10\1\366\1\367\1\370\2\10\3\0\7\10"+ + "\1\371\1\10\1\372\1\373\13\10\3\0\1\10\10\0"+ + "\2\10\1\374\4\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\10\10\1\375\15\10\3\0\1\10\10\0"+ + "\2\10\1\46\4\10\3\0\26\10\3\0\1\10\10\0"+ + "\5\10\1\376\1\10\3\0\7\10\1\377\16\10\3\0"+ + "\1\10\10\0\7\10\3\0\7\10\1\u0100\16\10\3\0"+ + "\1\10\10\0\4\10\1\u0101\2\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u0102\12\10\3\0"+ + "\1\10\10\0\7\10\3\0\11\10\1\u0103\14\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u0104\12\10\3\0"+ + "\1\10\10\0\5\10\1\u0105\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\2\10\1\u0106\23\10\3\0"+ + "\1\10\10\0\1\u0107\6\10\3\0\1\10\1\u0108\11\10"+ + "\1\u0109\12\10\3\0\1\10\10\0\5\10\1\u010a\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u010b\4\10"+ + "\3\0\4\10\1\u010c\6\10\1\u010d\12\10\3\0\1\10"+ + "\10\0\4\10\1\46\1\u010e\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\5\10\1\353\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u010f\2\10\1\u0110"+ + "\1\46\5\10\1\u0111\12\10\3\0\1\10\10\0\3\10"+ + "\1\u0112\3\10\3\0\11\10\1\46\14\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\u0113\24\10\3\0\1\10"+ + "\10\0\7\10\3\0\11\10\1\u0114\1\u0115\13\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u0116\3\10\1\u0117"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0118"+ + "\14\10\3\0\1\10\10\0\6\10\1\u0102\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u0119\1\10\1\u011a\3\0"+ + "\15\10\1\u011b\10\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\352\20\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u011c\2\10\1\u011d\21\10\3\0\1\10\10\0"+ + "\3\10\1\u011e\3\10\3\0\7\10\1\u011f\16\10\3\0"+ + "\1\10\10\0\4\10\1\u0120\2\10\3\0\4\10\1\u0121"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0122"+ + "\20\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0123"+ + "\12\10\3\0\1\10\10\0\1\u0124\6\10\3\0\2\10"+ + "\1\u0125\23\10\3\0\1\10\10\0\3\10\1\u0126\1\u0127"+ + "\2\10\3\0\4\10\1\u0128\1\46\20\10\3\0\1\10"+ + "\10\0\4\10\1\u0129\2\10\3\0\26\10\3\0\1\10"+ + "\10\0\1\u012a\3\10\1\u012b\1\10\1\u012c\3\0\13\10"+ + "\1\u012d\12\10\3\0\1\10\10\0\4\10\1\46\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u012e\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u012f\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\3\10\1\u0130\22\10"+ + "\3\0\1\10\10\0\7\10\3\0\5\10\1\u0131\20\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\46\16\10"+ + "\3\0\1\10\10\0\4\10\1\u0132\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u0133\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\1\u0134\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\5\10\1\362\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u0135\24\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u0136\3\10\1\u0137"+ + "\15\10\3\0\1\10\10\0\1\u0102\6\10\3\0\14\10"+ + "\1\u0138\11\10\3\0\1\10\10\0\5\10\1\u0139\1\10"+ + "\3\0\4\10\1\u013a\11\10\1\133\7\10\3\0\1\10"+ + "\10\0\6\10\1\u013b\3\0\26\10\3\0\1\10\10\0"+ + "\2\10\1\u013c\1\10\1\363\2\10\3\0\26\10\3\0"+ + "\1\10\10\0\1\u013d\5\10\1\302\3\0\26\10\16\0"+ + "\1\u013e\2\0\1\u013f\25\0\1\u0140\41\0\1\u0141\1\u0142"+ + "\47\0\1\u0143\42\0\1\u0144\17\0\1\u0145\43\0\1\u0146"+ + "\3\0\1\u0147\3\0\1\u0148\26\0\1\u0149\24\0\1\u014a"+ + "\30\0\1\u014b\15\0\1\u0148\62\0\1\u014c\47\0\1\u014d"+ + "\1\0\1\u014e\34\0\1\u014f\16\0\1\u0148\32\0\1\u0150"+ + "\7\0\1\u0151\5\0\1\u0152\3\0\1\u0153\27\0\1\u0154"+ + "\21\0\1\u0155\27\0\1\u0156\12\0\1\u0157\62\0\1\u0158"+ + "\32\0\1\u0159\24\0\1\u0148\25\0\1\u015a\61\0\1\u015b"+ + "\6\0\1\u015c\25\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u015d\2\10\1\u015e\16\10\3\0\1\10\10\0\1\46"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\365\12\10\3\0\1\10\10\0\1\u015f\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\5\10\1\u0160\1\10"+ + "\3\0\1\10\1\u0161\11\10\1\350\12\10\3\0\1\10"+ + "\10\0\7\10\3\0\16\10\1\u0162\7\10\3\0\1\10"+ + "\10\0\1\46\5\10\1\u0163\3\0\7\10\1\u0164\16\10"+ + "\3\0\1\10\10\0\1\u0165\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\2\10\1\u0166\4\10\3\0\26\10\3\0"+ + "\1\10\10\0\1\224\6\10\3\0\3\10\1\u0167\22\10"+ + "\3\0\1\10\10\0\1\143\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\10\10\1\u0168\15\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\366\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\3\10\1\173\22\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\124\2\10\1\u0169"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u016a"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\46"+ + "\12\10\3\0\1\10\10\0\4\10\1\u016b\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u016c"+ + "\14\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u016d"+ + "\13\10\3\0\1\10\10\0\5\10\1\257\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u016e\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\5\10\1\u016f\1\10\3\0\10\10"+ + "\1\u016d\15\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u0170\24\10\3\0\1\10\10\0\2\10\1\u0171\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u0172\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\3\10\1\u0173\3\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\341\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u0174\6\10\3\0\17\10"+ + "\1\46\6\10\3\0\1\10\10\0\4\10\1\u0175\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\366\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\362\4\10\1\257"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0176"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\1\365\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u0177\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\6\10\1\302\3\0\13\10"+ + "\1\u0178\12\10\3\0\1\10\10\0\1\342\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\213"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\350"+ + "\12\10\3\0\1\10\10\0\5\10\1\331\1\10\3\0"+ + "\11\10\1\u0179\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\u017a\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\7\10\1\u017b\16\10\3\0\1\10\10\0\7\10\3\0"+ + "\6\10\1\u017c\17\10\3\0\1\10\10\0\5\10\1\u017d"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u017e\24\10\3\0\1\10\10\0\4\10\1\u017f"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\3\10\1\u0180"+ + "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u0181\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0182\24\10\3\0\1\10\10\0\1\u0183\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u0184\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\2\10\1\124\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\213"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0185"+ + "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0186"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0187"+ + "\24\10\3\0\1\10\10\0\1\u0188\4\10\1\46\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\5\10"+ + "\1\u0189\20\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u0116\21\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\276\21\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u018a\24\10\3\0\1\10\10\0\4\10\1\u018b\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\353\21\10\3\0\1\10\10\0\7\10\3\0\12\10"+ + "\1\u018c\13\10\3\0\1\10\10\0\7\10\3\0\14\10"+ + "\1\353\11\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u018d\21\10\3\0\1\10\10\0\7\10\3\0\5\10"+ + "\1\364\20\10\3\0\1\10\10\0\5\10\1\46\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\3\10"+ + "\1\46\22\10\3\0\1\10\10\0\6\10\1\u018e\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\46"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0108"+ + "\24\10\3\0\1\10\10\0\6\10\1\u018f\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0190\6\10"+ + "\1\u0191\15\10\3\0\1\10\10\0\1\213\6\10\3\0"+ + "\12\10\1\u0192\13\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\u0193\12\10\3\0\1\10\10\0\5\10\1\u0194"+ + "\1\10\3\0\13\10\1\350\12\10\3\0\1\10\10\0"+ + "\3\10\1\257\3\10\3\0\5\10\1\u0195\11\10\1\353"+ + "\6\10\3\0\1\10\10\0\7\10\3\0\15\10\1\u0196"+ + "\10\10\3\0\1\10\10\0\1\u018a\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0197\23\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0198\7\10"+ + "\1\u0199\4\10\1\46\6\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\u019a\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\46\13\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\u0182\14\10\3\0\1\10\10\0\7\10"+ + "\3\0\22\10\1\u019b\3\10\3\0\1\10\10\0\1\u019c"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u019d"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\1\10\1\46"+ + "\5\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\257\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\46\14\10\3\0\1\10\10\0\6\10\1\u019e"+ + "\3\0\26\10\3\0\1\10\10\0\4\10\1\u019f\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10"+ + "\1\u01a0\14\10\3\0\1\10\10\0\4\10\1\u01a1\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u01a2\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\2\10\1\u01a3\4\10\3\0"+ + "\4\10\1\u01a4\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u01a5\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\12\10\1\u01a6\13\10\3\0\1\10\10\0\2\10\1\u01a7"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u01a8\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\u01a9\3\10\1\u0182\10\10\3\0\1\10\10\0"+ + "\7\10\3\0\21\10\1\147\4\10\3\0\1\10\10\0"+ + "\4\10\1\353\2\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\u01aa\21\10\3\0\1\10\10\0"+ + "\7\10\3\0\15\10\1\u01ab\10\10\3\0\1\10\10\0"+ + "\6\10\1\362\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\153\5\10\1\u01ac\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\10\10\1\u01ad\15\10\3\0\1\10"+ + "\10\0\2\10\1\u01ae\4\10\3\0\26\10\3\0\1\10"+ + "\10\0\3\10\1\257\3\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\u01af\21\10\3\0\1\10"+ + "\10\0\7\10\3\0\7\10\1\u01b0\16\10\3\0\1\10"+ + "\10\0\6\10\1\u01b1\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\17\10\1\46\6\10\3\0\1\10\10\0"+ + "\1\362\5\10\1\u01b2\3\0\26\10\3\0\1\10\10\0"+ + "\4\10\1\u01b3\2\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\24\10\1\124\1\10\3\0\1\10\10\0"+ + "\4\10\1\u01b4\2\10\3\0\26\10\3\0\1\10\10\0"+ + "\1\u01b5\6\10\3\0\26\10\3\0\1\10\10\0\4\10"+ + "\1\u01b6\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\u01b7\14\10\3\0\1\10\10\0\2\10"+ + "\1\46\4\10\3\0\7\10\1\u01b8\16\10\3\0\1\10"+ + "\10\0\7\10\3\0\5\10\1\u01b9\1\u01ba\17\10\3\0"+ + "\1\10\10\0\1\u01bb\6\10\3\0\5\10\1\u01bc\20\10"+ + "\3\0\1\10\10\0\2\10\1\u01bd\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u01be\2\10\3\0\2\10"+ + "\1\46\23\10\3\0\1\10\10\0\2\10\1\u01bf\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01c0\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u01c1\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u01c2\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\1\365\6\10\3\0\12\10\1\323"+ + "\13\10\3\0\1\10\10\0\5\10\1\u01c3\1\u01c4\3\0"+ + "\7\10\1\u01c5\16\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u01c6\21\10\3\0\1\10\10\0\2\10\1\u0121"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\317\20\10\3\0\1\10\10\0\2\10\1\u01c7"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\5\10\1\u01c8"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\6\10\1\201"+ + "\3\0\10\10\1\257\15\10\3\0\1\10\10\0\6\10"+ + "\1\u01c9\3\0\26\10\3\0\1\10\10\0\3\10\1\u01ca"+ + "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\u01cb\20\10\3\0\1\10\10\0\2\10\1\46"+ + "\4\10\3\0\4\10\1\257\21\10\33\0\1\u0148\55\0"+ + "\1\u01cc\45\0\1\u01cd\54\0\1\u0151\5\0\1\u01ce\3\0"+ + "\1\u01cf\51\0\1\u0155\1\u01d0\27\0\1\u0159\17\0\1\u01d1"+ + "\5\0\1\u01d2\51\0\1\u01d3\32\0\1\u0147\47\0\1\u01d4"+ + "\100\0\1\u0148\30\0\1\u01d5\1\0\1\u0148\63\0\1\u0140"+ + "\53\0\1\u01d6\2\0\1\u01d7\4\0\1\251\54\0\1\u01d8"+ + "\47\0\1\u0148\56\0\1\u01d9\50\0\1\u01da\50\0\1\u0148"+ + "\50\0\1\u01d4\64\0\1\u01db\2\0\1\u01dc\45\0\1\u01dd"+ + "\33\0\1\u0159\2\0\1\u01de\63\0\1\u01df\41\0\1\u013e"+ + "\65\0\1\u01e0\43\0\1\u0148\71\0\1\u01e1\57\0\1\u01e2"+ + "\27\0\1\u01e3\57\0\1\u01e4\34\0\1\10\10\0\7\10"+ + "\3\0\7\10\1\152\16\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\220\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\213\13\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u01e5\12\10\3\0\1\10\10\0\2\10"+ + "\1\u01e6\4\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\u01e7\13\10\3\0\1\10\10\0\4\10"+ + "\1\u01e8\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u01e9\12\10\3\0\1\10\10\0\3\10"+ + "\1\311\3\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\323\13\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\u01ea\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\u01eb\13\10\3\0\1\10\10\0\6\10"+ + "\1\u01ec\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\12\10\1\u01ed\13\10\3\0\1\10\10\0\6\10\1\u01ee"+ + "\3\0\26\10\3\0\1\10\10\0\6\10\1\u01ef\3\0"+ + "\26\10\3\0\1\10\10\0\5\10\1\u01af\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u01f0"+ + "\13\10\3\0\1\10\10\0\1\u01f1\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u01f2\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\u01f3\16\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u019b\23\10"+ + "\3\0\1\10\10\0\4\10\1\363\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\1\10\1\220\5\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u01f4\23\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f5\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f6\21\10"+ + "\3\0\1\10\10\0\1\u01f7\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\12\10\1\u01f8\13\10\3\0"+ + "\1\10\10\0\4\10\1\u017d\2\10\3\0\26\10\3\0"+ + "\1\10\10\0\6\10\1\u01f9\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\46\25\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\u01fa\21\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\u017d\24\10\3\0\1\10\10\0"+ + "\1\u017d\6\10\3\0\26\10\3\0\1\10\10\0\6\10"+ + "\1\u01fb\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\14\10\1\46\11\10\3\0\1\10\10\0\2\10\1\361"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\2\10\1\u01fc"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\7\10\1\u01fd\16\10\3\0\1\10\10\0\1\362\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\5\10\1\u01fe\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01ff\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\7\10"+ + "\1\u0200\16\10\3\0\1\10\10\0\4\10\1\257\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u0201\6\10\3\0"+ + "\4\10\1\u0202\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0203\6\10\1\u018a\15\10\3\0\1\10\10\0"+ + "\7\10\3\0\5\10\1\u0204\20\10\3\0\1\10\10\0"+ + "\2\10\1\u0205\4\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\7\10\1\u0206\16\10\3\0\1\10\10\0"+ + "\6\10\1\153\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\4\10\1\153\21\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u0207\12\10\3\0\1\10\10\0\7\10"+ + "\3\0\21\10\1\257\4\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\u0208\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u0109\12\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\75\14\10\3\0\1\10\10\0\1\u0183"+ + "\6\10\3\0\4\10\1\u0209\21\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\376\21\10\3\0\1\10\10\0"+ + "\5\10\1\336\1\10\3\0\26\10\3\0\1\10\10\0"+ + "\5\10\1\u020a\1\10\3\0\7\10\1\u020b\16\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u020c\12\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u020d\12\10\3\0"+ + "\1\10\10\0\7\10\3\0\7\10\1\u0116\16\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u020e\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u0116\5\10\1\353"+ + "\16\10\3\0\1\10\10\0\2\10\1\u020f\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\213"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0210"+ + "\20\10\3\0\1\10\10\0\4\10\1\u0211\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\4\10\1\u0212\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0213"+ + "\12\10\3\0\1\10\10\0\1\u0214\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0215\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0216\23\10"+ + "\3\0\1\10\10\0\7\10\3\0\13\10\1\362\12\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0217\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\6\10\1\u0218\17\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\353\16\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0219\24\10"+ + "\3\0\1\10\10\0\6\10\1\u018e\3\0\13\10\1\u020c"+ + "\12\10\3\0\1\10\10\0\2\10\1\u021a\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0182"+ + "\17\10\3\0\1\10\10\0\4\10\1\317\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u021b"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u021c"+ + "\5\10\1\u0182\10\10\3\0\1\10\10\0\1\u0191\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\2\10"+ + "\1\u021d\4\10\1\46\16\10\3\0\1\10\10\0\7\10"+ + "\3\0\10\10\1\u0109\15\10\3\0\1\10\10\0\6\10"+ + "\1\u01a2\3\0\26\10\3\0\1\10\10\0\6\10\1\u021e"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\16\10"+ + "\1\u021f\7\10\3\0\1\10\10\0\1\u0220\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\4\10\1\u0221\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\353"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\10\10\1\353"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0160"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0222"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0223"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0224"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u011c"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0225"+ + "\24\10\3\0\1\10\10\0\5\10\1\336\1\10\3\0"+ + "\12\10\1\u0226\13\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\220\20\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0227\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0228\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\3\10\1\213\22\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\u0229\12\10\14\0\1\u0148\60\0\1\u0148\75\0"+ + "\1\u01dc\45\0\1\u022a\36\0\1\u01cc\53\0\1\u0150\50\0"+ + "\1\u0159\101\0\1\u0140\26\0\1\u0148\54\0\1\u022b\55\0"+ + "\1\u022c\46\0\1\u022d\71\0\1\u0158\63\0\1\u0148\51\0"+ + "\1\u022e\27\0\1\u022f\74\0\1\u01d1\32\0\1\u0230\2\0"+ + "\1\u0231\10\0\1\u0232\1\0\1\u0233\1\0\1\u0234\3\0"+ + "\1\u0235\35\0\1\u01cd\60\0\1\u013f\56\0\1\u0147\62\0"+ + "\1\u01d0\45\0\1\u0236\53\0\1\u0237\41\0\1\u01cc\35\0"+ + "\1\10\10\0\7\10\3\0\5\10\1\u0238\20\10\3\0"+ + "\1\10\10\0\7\10\3\0\5\10\1\u0239\20\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u0161\24\10\3\0"+ + "\1\10\10\0\5\10\1\u016f\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u023a\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u023b\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\17\10\1\u023c\6\10\3\0"+ + "\1\10\10\0\2\10\1\213\4\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\6\10\1\u023d\6\10\1\u0182"+ + "\10\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u023e"+ + "\12\10\3\0\1\10\10\0\2\10\1\u023f\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\5\10\1\u0240\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0241"+ + "\14\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0242"+ + "\3\10\1\u0243\13\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0244\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\7\10\1\u010e\16\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\u0245\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u0246\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\u0247\12\10\3\0\1\10\10\0\5\10\1\u0180"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0248\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\15\10\1\46\10\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\353\20\10\3\0\1\10\10\0\1\220\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10"+ + "\1\u0249\12\10\3\0\1\10\10\0\7\10\3\0\5\10"+ + "\1\u024a\20\10\3\0\1\10\10\0\7\10\3\0\20\10"+ + "\1\46\5\10\3\0\1\10\10\0\2\10\1\u024b\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u024c\24\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u0238\21\10\3\0\1\10\10\0\6\10\1\u024d\3\0"+ + "\26\10\3\0\1\10\10\0\3\10\1\46\3\10\3\0"+ + "\26\10\3\0\1\10\10\0\4\10\1\u0215\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\2\10\1\72\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\257"+ + "\23\10\3\0\1\10\10\0\6\10\1\u024e\3\0\26\10"+ + "\3\0\1\10\10\0\6\10\1\u024f\3\0\26\10\3\0"+ + "\1\10\10\0\1\u024b\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\21\10\1\317\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\220\21\10\3\0\1\10"+ + "\10\0\1\u0249\6\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\13\10\1\u018a\12\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\u0250\24\10\3\0\1\10\10\0"+ + "\7\10\3\0\7\10\1\u015e\16\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\46\24\10\3\0\1\10\10\0"+ + "\2\10\1\46\4\10\3\0\6\10\1\u0251\17\10\3\0"+ + "\1\10\10\0\7\10\3\0\15\10\1\u0252\10\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\357\21\10\3\0"+ + "\1\10\10\0\1\u0253\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\u0254\21\10\3\0\1\10"+ + "\10\0\7\10\3\0\6\10\1\u0255\17\10\3\0\1\10"+ + "\10\0\4\10\1\u0238\2\10\3\0\26\10\3\0\1\10"+ + "\10\0\3\10\1\220\3\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\257\21\10\3\0\1\10"+ + "\10\0\6\10\1\u0256\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\u0257\24\10\3\0\1\10\10\0"+ + "\7\10\3\0\16\10\1\46\7\10\3\0\1\10\10\0"+ + "\7\10\3\0\12\10\1\353\13\10\3\0\1\10\10\0"+ + "\7\10\3\0\6\10\1\353\17\10\3\0\1\10\10\0"+ + "\1\365\3\10\1\u01be\2\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\22\10\1\u0258\3\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\u0182\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\u01fc\24\10\3\0\1\10"+ + "\10\0\7\10\3\0\21\10\1\u0238\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\u0169\21\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\u0186\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\u0259\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\22\10\1\46\3\10\34\0\1\u0234"+ + "\37\0\1\u025a\71\0\1\u025b\61\0\1\u0148\30\0\1\u025c"+ + "\64\0\1\u025d\65\0\1\u025e\2\0\1\u025f\20\0\1\u0158"+ + "\66\0\1\u0260\64\0\1\251\51\0\1\u0261\47\0\1\u0262"+ + "\35\0\1\u0263\100\0\1\u0264\15\0\1\10\10\0\1\353"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0265"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0266"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0267\24\10\3\0\1\10\10\0\1\u0182\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10"+ + "\1\u0178\12\10\3\0\1\10\10\0\2\10\1\u01f1\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\362\24\10\3\0\1\10\10\0\7\10\3\0\13\10"+ + "\1\u0116\12\10\3\0\1\10\10\0\1\u0268\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0269"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u026a"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\4\10\1\124"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\213"+ + "\24\10\3\0\1\10\10\0\6\10\1\u026b\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u026c\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u026d\23\10"+ + "\3\0\1\10\10\0\3\10\1\353\3\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\355\24\10"+ + "\3\0\1\10\10\0\4\10\1\u026e\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\213\16\10"+ + "\3\0\1\10\10\0\2\10\1\u026f\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\15\10\1\257\10\10"+ + "\3\0\1\10\10\0\2\10\1\u0270\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01fc\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\6\10\1\46\17\10"+ + "\3\0\1\10\10\0\7\10\3\0\10\10\1\u0271\15\10"+ + "\3\0\1\10\10\0\7\10\3\0\25\10\1\46\3\0"+ + "\1\10\10\0\6\10\1\u01af\3\0\26\10\3\0\1\10"+ + "\10\0\1\u0272\6\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\23\10\1\257\2\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\347\21\10\3\0\1\10\10\0"+ + "\6\10\1\72\3\0\26\10\3\0\1\10\10\0\5\10"+ + "\1\u0273\1\10\3\0\26\10\31\0\1\u0148\55\0\1\u01cc"+ + "\47\0\1\u01d9\41\0\1\u0148\52\0\1\u0274\66\0\1\u0275"+ + "\45\0\1\u01cd\50\0\1\u0274\76\0\1\u013e\46\0\1\u0148"+ + "\67\0\1\u0148\6\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u0276\24\10\3\0\1\10\10\0\1\124\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0277"+ + "\23\10\3\0\1\10\10\0\2\10\1\u0278\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0109"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0238"+ + "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u017d"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0279"+ + "\24\10\3\0\1\10\10\0\4\10\1\u027a\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u027b"+ + "\24\10\3\0\1\10\10\0\1\u0189\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\6\10\1\u027c\17\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u0266\21\10"+ + "\30\0\1\u0148\44\0\1\u0263\35\0\1\10\10\0\7\10"+ + "\3\0\15\10\1\220\10\10\3\0\1\10\10\0\4\10"+ + "\1\u027d\2\10\3\0\26\10\3\0\1\10\10\0\4\10"+ + "\1\220\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\4\10\1\u027e\21\10\3\0\1\10\10\0\1\u027f"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0273"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\6\10\1\u027d\17\10\3\0\1\10\10\0\1\u020d\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\14\10"+ + "\1\u017d\11\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u017d\21\10\1\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[27016]; + 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; + } + + + /* 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; + + /* 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 = + "\5\0\2\11\3\1\1\11\12\1\3\11\23\1\1\11"+ + "\1\1\2\11\1\1\2\11\1\1\1\11\2\1\1\11"+ + "\144\1\21\0\1\11\220\1\7\0\1\1\2\0\1\11"+ + "\24\0\157\1\12\0\1\1\16\0\105\1\16\0\42\1"+ + "\13\0\17\1\2\0\12\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[639]; + 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 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[]; + + /** 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; + + /** + * 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; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public SASTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "*", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public SASTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public SASTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 180) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + if (zzMarkedPosL > zzStartRead) { + switch (zzBufferL[zzMarkedPosL-1]) { + case '\n': + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + zzAtBOL = true; + break; + case '\r': + if (zzMarkedPosL < zzEndReadL) + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + else if (zzAtEOF) + zzAtBOL = false; + else { + boolean eof = zzRefill(); + zzMarkedPosL = zzMarkedPos; + zzEndReadL = zzEndRead; + zzBufferL = zzBuffer; + if (eof) + zzAtBOL = false; + else + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + } + break; + default: + zzAtBOL = false; + } + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + if (zzAtBOL) + zzState = ZZ_LEXSTATE[zzLexicalState+1]; + else + zzState = ZZ_LEXSTATE[zzLexicalState]; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 21: break; + case 2: + { addNullToken(); return firstToken; + } + case 22: break; + case 18: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 23: break; + case 17: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 24: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 25: break; + case 8: + { start = zzMarkedPos-1; yybegin(CHAR); + } + case 26: break; + case 5: + { addToken(Token.RESERVED_WORD); + } + case 27: break; + case 6: + { addToken(Token.SEPARATOR); + } + case 28: break; + case 16: + { addToken(Token.VARIABLE); + } + case 29: break; + case 14: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 30: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 31: break; + case 20: + { addToken(Token.FUNCTION); + } + case 32: break; + case 19: + { addToken(Token.DATA_TYPE); + } + case 33: break; + case 11: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 34: break; + case 9: + { // We must do this because of how we + // abuse JFlex; since we return an entire + // list of tokens at once instead of a + // single token at a time, the "^" regex + // character doesn't really work, so we must + // check that we're at the beginning of a + // line ourselves. + start = zzStartRead; + // Might not be any whitespace. + if (yylength()>1) { + addToken(zzStartRead,zzMarkedPos-2, Token.WHITESPACE); + zzStartRead = zzMarkedPos-1; + } + // Remember: zzStartRead may now be updated, + // so we must check against 'start'. + if (start==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + else { + addToken(zzStartRead,zzStartRead, Token.OPERATOR); + } + } + case 35: break; + case 7: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 36: break; + case 4: + { addToken(Token.OPERATOR); + } + case 37: break; + case 12: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 38: break; + case 10: + { + } + case 39: break; + case 15: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 40: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 640: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 641: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 642: break; + case CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 643: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex new file mode 100644 index 0000000..414ca88 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex @@ -0,0 +1,473 @@ +/* + * 02/15/2005 + * + * SQLTokenMaker.java - Scanner for SQL. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class generates tokens representing a text stream as SQL.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated SQLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class SQLTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public SQLTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Overridden to return true so paren matching occurs for + * SQL. + * + * @return true always. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return true; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "--", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +LineTerminator = ([\n]) +Letter = ([A-Za-z]) +Digit = ([0-9]) +Whitespace = ([ \t]+) + +IdentifierStart = ({Letter}) +IdentifierPart = ({IdentifierStart}|{Digit}|[_]) +Identifier = ({IdentifierStart}{IdentifierPart}*) + +Operator = (">="|"<="|"<>"|">"|"<"|"="|"+"|"-"|"*"|"/") +Separator = ([\(\)]) + +Parameter = ([:]{Identifier}) + +Integer = ({Digit}+) +Float = (({Digit}+[.]{Digit}*)|([.]{Digit}*)) +ApproxNum = (({Digit}+[eE][+-]?{Digit}+)|({Digit}+[.]{Digit}*[eE][+-]?[0-9]+)|([.][0-9]*[eE][+-]?[0-9]+)) + +CommentBegin = ("--") +Comment = ({CommentBegin}.*) +MLCBegin = "/*" +MLCEnd = "*/" + +%state STRING +%state CHAR +%state MLC + +%% + + { + + /* Keywords */ + "ADD" | + "ALL" | + "ALTER" | + "AND" | + "ANY" | + "AS" | + "ASC" | + "AUTOINCREMENT" | + "AVA" | + "BETWEEN" | + "BINARY" | + "BIT" | + "BOOLEAN" | + "BY" | + "BYTE" | + "CHAR" | + "CHARACTER" | + "COLUMN" | + "CONSTRAINT" | + "COUNT" | + "COUNTER" | + "CREATE" | + "CURRENCY" | + "DATABASE" | + "DATE" | + "DATETIME" | + "DELETE" | + "DESC" | + "DISALLOW" | + "DISTINCT" | + "DISTINCTROW" | + "DOUBLE" | + "DROP" | + "EXISTS" | + "FLOAT" | + "FLOAT4" | + "FLOAT8" | + "FOREIGN" | + "FROM" | + "GENERAL" | + "GROUP" | + "GUID" | + "HAVING" | + "INNER" | + "INSERT" | + "IGNORE" | + "IMP" | + "IN" | + "INDEX" | + "INT" | + "INTEGER" | + "INTEGER1" | + "INTEGER2" | + "INTEGER4" | + "INTO" | + "IS" | + "JOIN" | + "KEY" | + "LEFT" | + "LEVEL" | + "LIKE" | + "LOGICAL" | + "LONG" | + "LONGBINARY" | + "LONGTEXT" | + "MAX" | + "MEMO" | + "MIN" | + "MOD" | + "MONEY" | + "NOT" | + "NULL" | + "NUMBER" | + "NUMERIC" | + "OLEOBJECT" | + "ON" | + "OPTION" | + "OR" | + "ORDER" | + "OUTER" | + "OWNERACCESS" | + "PARAMETERS" | + "PASSWORD" | + "PERCENT" | + "PIVOT" | + "PRIMARY" | + "REAL" | + "REFERENCES" | + "RIGHT" | + "SELECT" | + "SET" | + "SHORT" | + "SINGLE" | + "SMALLINT" | + "SOME" | + "STDEV" | + "STDEVP" | + "STRING" | + "SUM" | + "TABLE" | + "TABLEID" | + "TEXT" | + "TIME" | + "TIMESTAMP" | + "TOP" | + "TRANSFORM" | + "TYPE" | + "UNION" | + "UNIQUE" | + "UPDATE" | + "USER" | + "VALUE" | + "VALUES" | + "VAR" | + "VARBINARY" | + "VARCHAR" | + "VARP" | + "WHERE" | + "WITH" | + "YESNO" { addToken(Token.RESERVED_WORD); } + + /* SQL99 aggregate functions */ + "AVG" | + "COUNT" | + "MIN" | + "MAX" | + "SUM" { addToken(Token.FUNCTION); } + + /* SQL99 built-in scalar functions */ + "CURRENT_DATE" | + "CURRENT_TIME" | + "CURRENT_TIMESTAMP" | + "CURRENT_USER" | + "SESSION_USER" | + "SYSTEM_USER" { addToken(Token.FUNCTION); } + + /* SQL99 numeric scalar functions */ + "BIT_LENGTH" | + "CHAR_LENGTH" | + "EXTRACT" | + "OCTET_LENGTH" | + "POSITION" { addToken(Token.FUNCTION); } + + /* SQL99 string functions */ + "CONCATENATE" | + "CONVERT" | + "LOWER" | + "SUBSTRING" | + "TRANSLATE" | + "TRIM" | + "UPPER" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + ";" { addToken(Token.IDENTIFIER); } + + {Parameter} { addToken(Token.IDENTIFIER); } + + {Comment} { addToken(Token.COMMENT_EOL); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + + {Whitespace} { addToken(Token.WHITESPACE); } + + {Operator} { addToken(Token.OPERATOR); } + {Separator} { addToken(Token.SEPARATOR); } + + {Integer} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {Float} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ApproxNum} { addToken(Token.LITERAL_NUMBER_FLOAT); } + + "\"" { start = zzMarkedPos-1; yybegin(STRING); } + "\'" { start = zzMarkedPos-1; yybegin(CHAR); } + + "["[^\]]*"]" { addToken(Token.PREPROCESSOR); } + "["[^\]]* { addToken(Token.ERROR_IDENTIFIER); addNullToken(); return firstToken; } + + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as OK; */ + /* I don't know enough about SQL to know what's really invalid. */ + . { addToken(Token.IDENTIFIER); } + +} + + { + + [^\n\"]+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + "\"\"" {} + "\"" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + +} + + { + + [^\n\']+ {} + \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + "\'\'" {} + "\'" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + +} + + { + + [^\n\*]+ {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java new file mode 100644 index 0000000..9bfc0fd --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java @@ -0,0 +1,1138 @@ +/* The following code was generated by JFlex 1.4.1 on 6/29/14 12:25 AM */ + +/* + * 02/15/2005 + * + * SQLTokenMaker.java - Scanner for SQL. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class generates tokens representing a text stream as SQL.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated SQLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class SQLTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int YYINITIAL = 0; + public static final int MLC = 3; + public static final int CHAR = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\1\25\0\1\4\1\0\1\54\4\0\1\55\2\15"+ + "\1\13\1\11\1\0\1\12\1\17\1\14\1\3\1\50\1\50\1\3"+ + "\1\45\3\3\1\46\1\3\1\16\1\0\1\10\1\7\1\6\2\0"+ + "\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41\1\34\1\51"+ + "\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25\1\30\1\24"+ + "\1\32\1\36\1\40\1\43\1\27\1\2\1\56\1\0\1\57\1\0"+ + "\1\5\1\0\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41"+ + "\1\34\1\51\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25"+ + "\1\30\1\24\1\32\1\36\1\40\1\43\1\27\1\2\uff85\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 = + "\4\0\1\1\1\2\1\1\1\3\1\4\5\5\1\6"+ + "\1\1\1\7\27\1\1\10\1\11\1\12\1\13\1\14"+ + "\1\15\1\13\1\16\1\17\1\13\1\20\1\13\1\0"+ + "\1\21\1\22\4\1\1\23\45\1\2\23\4\1\1\23"+ + "\7\1\1\23\22\1\1\24\1\13\1\25\1\7\1\0"+ + "\3\1\1\26\51\1\1\23\4\1\1\23\2\1\1\23"+ + "\22\1\1\23\4\1\1\23\4\1\1\23\17\1\1\23"+ + "\35\1\1\23\5\1\1\23\10\1\1\23\5\1\1\23"+ + "\11\1\1\23\42\1\1\23\4\1\1\23\16\1\1\26"+ + "\4\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[354]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\60\0\140\0\220\0\300\0\300\0\360\0\u0120"+ + "\0\u0150\0\u0180\0\300\0\u01b0\0\u01e0\0\u0210\0\300\0\u0240"+ + "\0\u0270\0\u02a0\0\u02d0\0\u0300\0\u0330\0\u0360\0\u0390\0\u03c0"+ + "\0\u03f0\0\u0420\0\u0450\0\u0480\0\u04b0\0\u04e0\0\u0510\0\u0540"+ + "\0\u0570\0\u05a0\0\u05d0\0\u0600\0\u0630\0\u0660\0\u0690\0\u06c0"+ + "\0\300\0\300\0\u06f0\0\u0720\0\300\0\u0750\0\u0780\0\300"+ + "\0\u07b0\0\u07e0\0\300\0\u0810\0\u0840\0\u0870\0\300\0\u08a0"+ + "\0\u08d0\0\u0900\0\u0930\0\u0960\0\u0990\0\u09c0\0\u09f0\0\u0a20"+ + "\0\u0a50\0\u0a80\0\u0ab0\0\u0ae0\0\u0b10\0\u0b40\0\u0b70\0\u0ba0"+ + "\0\u0bd0\0\u0c00\0\u0c30\0\u0c60\0\u0c90\0\u0cc0\0\u0cf0\0\u0d20"+ + "\0\u0d50\0\u0d80\0\u0db0\0\u0de0\0\u0e10\0\u0e40\0\u0e70\0\u0ea0"+ + "\0\u0ed0\0\u0f00\0\u0f30\0\u0f60\0\u0f90\0\u0fc0\0\u0ff0\0\u1020"+ + "\0\u1050\0\u1080\0\360\0\u10b0\0\u10e0\0\u1110\0\u1140\0\u1170"+ + "\0\u11a0\0\u11d0\0\u1200\0\u1230\0\u1260\0\u1290\0\u12c0\0\u12f0"+ + "\0\u1320\0\u1350\0\u1380\0\u13b0\0\u13e0\0\u1410\0\u1440\0\u1470"+ + "\0\u14a0\0\u14d0\0\u1500\0\u1530\0\u1560\0\u1590\0\u15c0\0\u15f0"+ + "\0\u1620\0\u1650\0\300\0\300\0\300\0\u1680\0\u1680\0\u16b0"+ + "\0\u16e0\0\u1710\0\360\0\u1740\0\u0960\0\u1770\0\u17a0\0\u17d0"+ + "\0\u1800\0\u1830\0\u1860\0\u1890\0\u18c0\0\u18f0\0\u1920\0\u1950"+ + "\0\u1980\0\u19b0\0\u19e0\0\u1a10\0\u1a40\0\u1a70\0\u1aa0\0\u1ad0"+ + "\0\u1b00\0\u1b30\0\u1b60\0\u1b90\0\u1bc0\0\u1bf0\0\u1c20\0\u1c50"+ + "\0\u1c80\0\u1cb0\0\u1ce0\0\u1d10\0\u1d40\0\u1d70\0\u1da0\0\u1dd0"+ + "\0\u1e00\0\u1e30\0\u1e60\0\u1e90\0\u1ec0\0\u1ef0\0\u1f20\0\u1f50"+ + "\0\u1f80\0\u1fb0\0\u1fe0\0\u2010\0\u2040\0\u2070\0\u20a0\0\u20d0"+ + "\0\u2100\0\u2130\0\u2160\0\u2190\0\u21c0\0\u21f0\0\u2220\0\u2250"+ + "\0\u2280\0\u22b0\0\u22e0\0\u2310\0\u2340\0\u2370\0\u12f0\0\u23a0"+ + "\0\u23d0\0\u2400\0\u2430\0\u2460\0\u2490\0\u24c0\0\u24f0\0\u2520"+ + "\0\u2550\0\u2580\0\u25b0\0\u25e0\0\u2610\0\u2640\0\u2670\0\u26a0"+ + "\0\u26d0\0\u2700\0\u2730\0\u2760\0\u2790\0\u27c0\0\u27f0\0\u2820"+ + "\0\u2850\0\u2880\0\u28b0\0\u28e0\0\u2910\0\u2940\0\u2970\0\u29a0"+ + "\0\u29d0\0\u2a00\0\u2a30\0\u2a60\0\u2a90\0\u2ac0\0\u2af0\0\u2b20"+ + "\0\u2b50\0\u2b80\0\u2bb0\0\u2be0\0\u2c10\0\u2c40\0\u2c70\0\u2ca0"+ + "\0\u2cd0\0\u2d00\0\u2d30\0\u2d60\0\u2d90\0\u2dc0\0\u2df0\0\u15f0"+ + "\0\u2e20\0\u2e50\0\u2e80\0\u2eb0\0\u2ee0\0\u0c30\0\u2f10\0\u2f40"+ + "\0\u2f70\0\u2fa0\0\u2fd0\0\u3000\0\u3030\0\u3060\0\u0ff0\0\u3090"+ + "\0\u30c0\0\u2040\0\u30f0\0\u3120\0\u2ca0\0\u3150\0\u3180\0\u31b0"+ + "\0\u31e0\0\u3210\0\u3240\0\u3270\0\u32a0\0\u32d0\0\u3300\0\u3330"+ + "\0\u3360\0\u3390\0\u33c0\0\u33f0\0\u3420\0\u3450\0\u3480\0\u34b0"+ + "\0\u34e0\0\u3510\0\u3540\0\u3570\0\u35a0\0\u35d0\0\u3600\0\u3630"+ + "\0\u3660\0\u3690\0\u36c0\0\u36f0\0\u3720\0\u3750\0\u3780\0\u37b0"+ + "\0\u37e0\0\u3810\0\u3840\0\u3870\0\u38a0\0\u38d0\0\u3900\0\u3930"+ + "\0\u3960\0\u3990\0\u39c0\0\u39f0\0\u3a20\0\u3a50\0\u3a80\0\u3ab0"+ + "\0\u3ae0\0\u3b10\0\u3b40\0\u3b70\0\u3ba0\0\u3bd0\0\u3c00\0\u3c30"+ + "\0\u3c60\0\u3c90\0\u3cc0\0\u3cf0\0\u3d20\0\u3d50\0\u3d80\0\u3db0"+ + "\0\u3de0\0\u3e10"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[354]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\1\13"+ + "\1\14\1\13\1\15\1\13\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\1\42\1\43\1\44\1\7\1\45\2\10\1\46\1\10"+ + "\1\47\1\50\1\7\1\51\1\52\1\53\1\5\1\54"+ + "\1\55\52\54\1\56\3\54\1\57\1\60\53\57\1\61"+ + "\2\57\1\62\1\63\11\62\1\64\44\62\62\0\2\7"+ + "\1\0\1\7\12\0\34\7\7\0\1\10\13\0\1\21"+ + "\1\65\24\0\2\10\1\0\1\10\13\0\1\11\62\0"+ + "\1\13\56\0\2\13\62\0\1\66\60\0\1\67\46\0"+ + "\1\7\15\0\25\7\2\0\1\7\1\0\3\7\7\0"+ + "\1\21\14\0\1\65\24\0\2\21\1\0\1\21\11\0"+ + "\2\7\1\0\1\7\12\0\23\7\1\70\10\7\6\0"+ + "\2\7\1\0\1\7\12\0\2\7\1\71\1\72\2\7"+ + "\1\73\1\7\1\74\1\7\1\75\3\7\1\76\15\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\77\1\100\3\7"+ + "\1\101\5\7\1\102\1\103\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\104\12\7\1\105\1\106\17\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\107\1\110\3\7\1\111"+ + "\1\7\1\112\3\7\1\113\1\114\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\115\13\7\1\116\17\7\6\0"+ + "\2\7\1\0\1\7\12\0\12\7\1\117\1\120\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\121\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\122\3\7\1\123\2\7"+ + "\1\124\2\7\1\125\1\126\1\127\1\130\3\7\1\131"+ + "\12\7\6\0\2\7\1\0\1\7\12\0\5\7\1\132"+ + "\4\7\1\133\1\134\5\7\1\135\12\7\6\0\2\7"+ + "\1\0\1\7\12\0\6\7\1\136\1\7\1\137\11\7"+ + "\1\140\11\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\141\1\7\1\142\1\143\2\7\1\144\1\145\5\7"+ + "\1\146\1\7\1\147\11\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\150\1\7\1\143\4\7\1\113\11\7"+ + "\1\151\4\7\6\0\2\7\1\0\1\7\12\0\1\152"+ + "\1\153\11\7\1\154\1\155\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\156\32\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\157\6\7\1\160\3\7\1\161\1\162"+ + "\17\7\6\0\2\7\1\0\1\7\12\0\14\7\1\163"+ + "\4\7\1\164\12\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\165\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\166\1\167\3\7\1\170\5\7\1\171\1\172\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\3\7\1\173\1\7"+ + "\1\174\5\7\1\175\20\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\176\4\7\1\177\4\7\1\200\21\7\6\0"+ + "\2\7\1\0\1\7\12\0\13\7\1\201\20\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\202\33\7\4\0\57\53"+ + "\1\203\1\54\1\0\52\54\1\0\3\54\54\0\1\204"+ + "\3\0\1\57\1\0\53\57\1\0\2\57\55\0\1\204"+ + "\2\0\1\62\1\0\11\62\1\0\44\62\14\0\1\205"+ + "\46\0\1\206\5\0\2\207\32\0\2\206\1\0\1\206"+ + "\7\0\1\66\1\0\56\66\2\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\210\7\7\1\211\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\2\7\1\143\31\7\6\0\2\7"+ + "\1\0\1\7\12\0\3\7\1\143\1\137\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\2\7\1\143\4\7\1\143"+ + "\24\7\6\0\2\7\1\0\1\7\12\0\11\7\1\143"+ + "\22\7\6\0\2\7\1\0\1\7\12\0\4\7\1\212"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\143"+ + "\25\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\214\4\7\1\215\23\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\216\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\13\7\1\113\20\7\6\0\2\7\1\0"+ + "\1\7\12\0\12\7\1\217\21\7\6\0\2\7\1\0"+ + "\1\7\12\0\10\7\1\220\23\7\6\0\2\7\1\0"+ + "\1\7\12\0\16\7\1\221\5\7\1\120\7\7\6\0"+ + "\2\7\1\0\1\7\12\0\6\7\1\222\11\7\1\223"+ + "\6\7\1\224\4\7\6\0\2\7\1\0\1\7\12\0"+ + "\32\7\1\225\1\7\6\0\2\7\1\0\1\7\12\0"+ + "\23\7\1\120\10\7\6\0\2\7\1\0\1\7\12\0"+ + "\17\7\1\226\14\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\227\12\7\1\230\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\22\7\1\225\11\7\6\0\2\7\1\0"+ + "\1\7\12\0\22\7\1\143\11\7\6\0\2\7\1\0"+ + "\1\7\12\0\15\7\1\231\16\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\232\22\7\1\233\7\7\6\0"+ + "\2\7\1\0\1\7\12\0\27\7\1\234\4\7\6\0"+ + "\2\7\1\0\1\7\12\0\3\7\1\232\11\7\1\235"+ + "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\143"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\236"+ + "\23\7\6\0\2\7\1\0\1\7\12\0\3\7\1\237"+ + "\1\143\3\7\1\240\23\7\6\0\2\7\1\0\1\7"+ + "\12\0\2\7\1\241\2\7\1\242\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\10\7\1\243\23\7\6\0\2\7"+ + "\1\0\1\7\12\0\15\7\1\143\1\7\1\244\14\7"+ + "\6\0\2\7\1\0\1\7\12\0\15\7\1\225\16\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\245\25\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\246\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\247\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\250\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\251\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\3\7\1\252\2\7\1\253"+ + "\3\7\1\254\21\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\255\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\14\7\1\256\17\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\257\33\7\6\0\2\7\1\0\1\7\12\0\2\7"+ + "\1\250\17\7\1\223\11\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\260\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\2\7\1\137\31\7\6\0\2\7\1\0\1\7\12\0"+ + "\4\7\1\261\27\7\6\0\2\7\1\0\1\7\12\0"+ + "\4\7\1\137\27\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\262\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\4\7\1\263\27\7\6\0\2\7\1\0\1\7\12\0"+ + "\2\7\1\264\1\7\1\265\1\7\1\137\1\7\1\266"+ + "\23\7\6\0\2\7\1\0\1\7\12\0\6\7\1\267"+ + "\25\7\6\0\2\7\1\0\1\7\12\0\15\7\1\270"+ + "\16\7\6\0\2\7\1\0\1\7\12\0\23\7\1\143"+ + "\10\7\6\0\2\7\1\0\1\7\12\0\2\7\1\143"+ + "\3\7\1\50\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\143\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\271\1\7\1\272\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\273\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\225\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\13\7\1\274\20\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\275\1\7\1\276\25\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\277\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\300\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\16\7\1\242\15\7\6\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\301\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\302\2\7\1\303\23\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\304\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\10\7\1\305\23\7"+ + "\6\0\2\7\1\0\1\7\12\0\16\7\1\306\15\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\307\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\310\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\5\7\1\311\26\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\312\25\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\313\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\71\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\155\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\7\7\1\143\24\7"+ + "\7\0\1\206\41\0\2\206\1\0\1\206\11\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\314\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\10\7\1\315\23\7\6\0\2\7"+ + "\1\0\1\7\12\0\13\7\1\316\20\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\317\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\320\1\321\32\7\6\0\2\7\1\0"+ + "\1\7\12\0\17\7\1\322\14\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\323\2\7\1\324\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\232\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\27\7\1\325\4\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\326\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\14\7\1\327\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\143\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\3\7\1\330\30\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\331\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\213\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\332\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\143\30\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\333\33\7\6\0\2\7\1\0\1\7\12\0\21\7"+ + "\1\120\12\7\6\0\2\7\1\0\1\7\12\0\1\334"+ + "\16\7\1\137\14\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\270\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\335\33\7\6\0\2\7\1\0\1\7\12\0\10\7"+ + "\1\336\23\7\6\0\2\7\1\0\1\7\12\0\1\337"+ + "\33\7\6\0\2\7\1\0\1\7\12\0\14\7\1\340"+ + "\17\7\6\0\2\7\1\0\1\7\12\0\4\7\1\341"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\342"+ + "\23\7\6\0\2\7\1\0\1\7\12\0\27\7\1\322"+ + "\4\7\6\0\2\7\1\0\1\7\12\0\3\7\1\343"+ + "\30\7\6\0\2\7\1\0\1\7\12\0\5\7\1\120"+ + "\26\7\6\0\2\7\1\0\1\7\12\0\1\7\1\317"+ + "\32\7\6\0\2\7\1\0\1\7\12\0\5\7\1\344"+ + "\26\7\6\0\2\7\1\0\1\7\12\0\12\7\1\345"+ + "\21\7\6\0\2\7\1\0\1\7\12\0\10\7\1\346"+ + "\1\347\4\7\1\350\15\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\351\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\352\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\13\7\1\155\17\7\1\353\6\0\2\7\1\0"+ + "\1\7\12\0\5\7\1\143\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\13\7\1\354\20\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\355\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\356\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\14\7\1\357\17\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\153\33\7\6\0\2\7\1\0\1\7\12\0\1\360"+ + "\12\7\1\143\20\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\247\33\7\6\0\2\7\1\0\1\7\12\0\13\7"+ + "\1\300\20\7\6\0\2\7\1\0\1\7\12\0\13\7"+ + "\1\143\20\7\6\0\2\7\1\0\1\7\12\0\12\7"+ + "\1\361\21\7\6\0\2\7\1\0\1\7\12\0\11\7"+ + "\1\362\5\7\1\363\2\7\1\143\11\7\6\0\2\7"+ + "\1\0\1\7\12\0\20\7\1\364\13\7\6\0\2\7"+ + "\1\0\1\7\12\0\3\7\1\365\30\7\6\0\2\7"+ + "\1\0\1\366\12\0\34\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\367\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\21\7\1\143\12\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\225\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\370\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\371\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\10\7\1\372\23\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\276\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\373\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\13\7\1\120\20\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\374\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\143\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\375\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\376\33\7\6\0\2\7\1\0\1\7\12\0\12\7"+ + "\1\113\21\7\6\0\2\7\1\0\1\7\12\0\1\7"+ + "\1\377\32\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0100\27\7\6\0\2\7\1\0\1\7\12\0\14\7"+ + "\1\u0101\17\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0102\27\7\6\0\2\7\1\0\1\7\12\0\17\7"+ + "\1\u0103\14\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\225\30\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\u0104\30\7\6\0\2\7\1\0\1\7\12\0\14\7"+ + "\1\u0105\17\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0106\12\7\1\363\14\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\213\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\u0107\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\u0108\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\10\7\1\u0109\23\7\6\0\2\7\1\0\1\7\12\0"+ + "\10\7\1\u010a\23\7\6\0\2\7\1\0\1\7\12\0"+ + "\5\7\1\u010b\26\7\6\0\2\7\1\0\1\7\12\0"+ + "\5\7\1\u010c\26\7\6\0\2\7\1\0\1\7\12\0"+ + "\11\7\1\120\22\7\6\0\2\7\1\0\1\7\12\0"+ + "\14\7\1\u010d\17\7\6\0\2\7\1\0\1\7\12\0"+ + "\16\7\1\u010e\15\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\u010f\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\u0110\33\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0111\27\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\u0112\30\7\6\0\2\7\1\0\1\7\12\0\1\u0113"+ + "\33\7\6\0\2\7\1\0\1\7\12\0\15\7\1\155"+ + "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\u0114"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\u0115"+ + "\32\7\6\0\2\7\1\0\1\7\12\0\1\u0116\33\7"+ + "\6\0\2\7\1\0\1\7\12\0\4\7\1\u0117\27\7"+ + "\6\0\2\7\1\0\1\366\12\0\1\7\1\u0118\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\12\7\1\225\21\7"+ + "\6\0\2\7\1\0\1\7\12\0\17\7\1\u0119\14\7"+ + "\6\0\2\7\1\0\1\7\12\0\4\7\1\u011a\27\7"+ + "\6\0\2\7\1\0\1\7\12\0\5\7\1\u011b\26\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\155\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\27\7\1\u011c\4\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\u011d\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\21\7\1\u011e\12\7\6\0"+ + "\2\7\1\0\1\7\12\0\14\7\1\u011f\17\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\u0120\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\u0121\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\3\7\1\u0122\30\7\6\0\2\7\1\0"+ + "\1\7\12\0\5\7\1\202\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\u0123\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\u0124\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\20\7\1\u0125\13\7\6\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\u0126\27\7\6\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\u0127\27\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\u0128\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0107\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\u0129\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\10\7\1\143\23\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\u012a\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\126\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\u012b\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\3\7\1\u012c\30\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\u012d\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\107\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\232\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\u012e\20\7\1\u012f\7\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\u0130\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\u0131\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\215\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\13\7\1\u0132\20\7\6\0\2\7\1\0\1\7"+ + "\12\0\27\7\1\143\4\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\u0133\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0134\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\u0123\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\u0135\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0136\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\u0137\27\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0129\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\145\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\31\7\1\237\2\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\u0138\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\u0139\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\257\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\276\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\155\33\7\6\0\2\7\1\0\1\7\12\0\1\7"+ + "\1\155\32\7\6\0\2\7\1\0\1\7\12\0\1\u013a"+ + "\33\7\6\0\2\7\1\0\1\7\12\0\6\7\1\120"+ + "\25\7\6\0\2\7\1\0\1\7\12\0\1\u013b\33\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013c\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\u013d\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\25\7\2\143\5\7"+ + "\6\0\2\7\1\0\1\7\12\0\27\7\1\155\4\7"+ + "\6\0\2\7\1\0\1\7\12\0\4\7\1\213\27\7"+ + "\6\0\2\7\1\0\1\7\12\0\11\7\1\u013e\22\7"+ + "\6\0\2\7\1\0\1\7\12\0\10\7\1\225\23\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013f\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\11\7\1\u0140\22\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0141\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\u0142\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0143\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0144\25\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0133\25\7"+ + "\6\0\2\7\1\0\1\u0145\12\0\34\7\6\0\2\7"+ + "\1\0\1\7\12\0\14\7\1\u0146\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\4\7\1\u0147\4\7\1\202\22\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0112\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\u0148\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\11\7\1\u0149\22\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\u014a\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\6\7\1\u014b\25\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\u014c\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\71\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\13\7\1\u014d\20\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\u014e\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\20\7\1\143\13\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\u014f\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\u0150\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\310\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\15\7\1\113\16\7\6\0"+ + "\2\7\1\0\1\7\12\0\11\7\1\u0151\22\7\6\0"+ + "\2\7\1\0\1\7\12\0\12\7\1\u0152\21\7\6\0"+ + "\2\7\1\0\1\7\12\0\6\7\1\u0153\25\7\6\0"+ + "\2\7\1\0\1\u0154\12\0\34\7\6\0\2\7\1\0"+ + "\1\7\12\0\6\7\1\u012e\25\7\6\0\2\7\1\0"+ + "\1\7\12\0\11\7\1\u0155\22\7\6\0\2\7\1\0"+ + "\1\7\12\0\25\7\1\143\2\7\1\143\3\7\6\0"+ + "\2\7\1\0\1\7\12\0\27\7\1\u0156\4\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\u0157\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\6\7\1\213\25\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\u0158\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\5\7\1\u012c\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\213\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\u0100\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\10\7\1\223\23\7\6\0\2\7\1\0\1\7\12\0"+ + "\27\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0"+ + "\2\7\1\u012e\1\7\1\u0159\5\7\1\u0152\21\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\u015a\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\4\7\1\u015b\27\7\6\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\u0100\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\15\7\1\370\16\7\6\0\2\7"+ + "\1\0\1\7\12\0\14\7\1\u015c\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\10\7\1\u0100\23\7\6\0\2\7"+ + "\1\0\1\7\12\0\21\7\1\213\12\7\6\0\2\7"+ + "\1\0\1\7\12\0\15\7\1\u015d\16\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\u015e\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\10\7\1\u015f\23\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\u0160\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\u0161\32\7\6\0\2\7\1\0"+ + "\1\7\12\0\15\7\1\u0162\16\7\6\0\2\7\1\0"+ + "\1\7\12\0\22\7\1\213\11\7\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[15936]; + 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; + } + + + /* 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; + + /* 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 = + "\4\0\2\11\4\1\1\11\3\1\1\11\31\1\2\11"+ + "\2\1\1\11\2\1\1\11\2\1\1\11\1\1\1\0"+ + "\1\1\1\11\113\1\3\11\1\1\1\0\333\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[354]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public SQLTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Overridden to return true so paren matching occurs for + * SQL. + * + * @return true always. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return true; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "--", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public SQLTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public SQLTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 178) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + 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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 20: + { addToken(Token.PREPROCESSOR); + } + case 23: break; + case 2: + { addNullToken(); return firstToken; + } + case 24: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 25: break; + case 18: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 26: break; + case 4: + { addToken(Token.WHITESPACE); + } + case 27: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 28: break; + case 9: + { start = zzMarkedPos-1; yybegin(CHAR); + } + case 29: break; + case 7: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 30: break; + case 19: + { addToken(Token.RESERVED_WORD); + } + case 31: break; + case 6: + { addToken(Token.SEPARATOR); + } + case 32: break; + case 15: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 33: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 34: break; + case 22: + { addToken(Token.FUNCTION); + } + case 35: break; + case 12: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 36: break; + case 17: + { addToken(Token.COMMENT_EOL); + } + case 37: break; + case 8: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 38: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 39: break; + case 5: + { addToken(Token.OPERATOR); + } + case 40: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 41: break; + case 10: + { addToken(Token.ERROR_IDENTIFIER); addNullToken(); return firstToken; + } + case 42: break; + case 11: + { + } + case 43: break; + case 16: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 44: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 355: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 356: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 357: break; + case CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 358: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex new file mode 100644 index 0000000..6b16491 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex @@ -0,0 +1,383 @@ +/* + * 8/19/2009 + * + * ScalaTokenMaker.java - Scanner for the Scala programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Scala programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated ScalaTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class ScalaTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ScalaTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + default: + state = YYINITIAL; + } + + s = text; + start = text.offset; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + + +/***** BEGIN SCALA-SPECIFIC CHANGES *********/ +Upper = ([A-Z\$\_]) /* Plus Unicode category Lu */ +Lower = ([a-z]) /* Plus Unicode category Ll */ +Letter = ({Upper}|{Lower}) /*Plus Unicode categories Lo, Lt, Nl */ +Digit = ([0-9]) +OpChar = ([^A-Z\$\_a-z0-9\(\[\]\)\. \t\f]) +Op = ({OpChar}+) +IdRest = (({Letter}|{Digit})*([\_]{Op})?) +VarId = ({Lower}{IdRest}) +PlainId = ({Upper}{IdRest}|{VarId}) /*|{Op})*/ +Id = ({PlainId}) /*({PlainId}|[\']{StringLit}[\'])*/ + +IntegerLiteral = ({Digit}+[Ll]?) +HexDigit = ({Digit}|[A-Fa-f]) +HexLiteral = ("0x"{HexDigit}+) + +ExponentPart = ([Ee][+\-]?{Digit}+) +FloatType = ([FfDd]) +FloatingPointLiteral = ({Digit}+[\.]{Digit}*{ExponentPart}?{FloatType}? | + [\.]{Digit}+{ExponentPart}?{FloatType}? | + {Digit}+{ExponentPart}{FloatType}? | + {Digit}+{ExponentPart}?{FloatType}) + +UnclosedCharLiteral = ([\']([\\].|[^\\\'])*[^\']?) +CharLiteral = ({UnclosedCharLiteral}[\']) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +StringLiteral = ({UnclosedStringLiteral}[\"]) +UnclosedBacktickLiteral = ([\`][^\`]+) +BacktickLiteral = ({UnclosedBacktickLiteral}[\`]) +/* TODO: Multiline strings */ + +MLCBegin = ("/*") +MLCEnd = ("*/") +LineCommentBegin = ("//") + +/***** END SCALA-SPECIFIC CHANGES *********/ + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) +Separator = ([\(\)\{\}\[\]]) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({Letter}|[\_]|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state MULTILINE_STRING_DOUBLE +%state MLC +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "abstract" | + "case" | + "catch" | + "class" | + "def" | + "do" | + "else" | + "extends" | + "false" | + "final" | + "finally" | + "for" | + "forSome" | + "if" | + "implicit" | + "import" | + "lazy" | + "match" | + "new" | + "null" | + "object" | + "override" | + "package" | + "private" | + "protected" | + "requires" | + "return" | + "sealed" | + "super" | + "this" | + "throw" | + "trait" | + "try" | + "true" | + "type" | + "val" | + "var" | + "while" | + "with" | + "yield" { addToken(Token.RESERVED_WORD); } + + {LineTerminator} { addNullToken(); return firstToken; } + + {Id} { addToken(Token.IDENTIFIER); } + + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + \"\"\" { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } + {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } + {CharLiteral} { addToken(Token.LITERAL_CHAR); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedBacktickLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {BacktickLiteral} { addToken(Token.LITERAL_BACKQUOTE); } + + /* Comment literals. */ + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + {Separator} { addToken(Token.SEPARATOR); } + + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatingPointLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + . { addToken(Token.IDENTIFIER); } + +} + + { + [^\"\\\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } + \" {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java new file mode 100644 index 0000000..a7051ae --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java @@ -0,0 +1,998 @@ +/* The following code was generated by JFlex 1.4.1 on 11/10/12 10:31 PM */ + +/* + * 8/19/2009 + * + * ScalaTokenMaker.java - Scanner for the Scala programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexCTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for the Scala programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated ScalaTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class ScalaTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 3; + public static final int MULTILINE_STRING_DOUBLE = 1; + public static final int YYINITIAL = 0; + public static final int MLC = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\31\1\24\1\0\1\31\23\0\1\31\1\33\1\25\1\33"+ + "\1\1\1\33\1\33\1\22\2\4\1\30\1\16\1\33\1\16\1\21"+ + "\1\27\1\12\11\3\1\42\1\33\1\0\1\33\1\0\2\33\3\10"+ + "\1\17\1\14\1\17\5\1\1\6\6\1\1\52\7\1\1\4\1\23"+ + "\1\4\1\0\1\5\1\26\1\44\1\45\1\11\1\20\1\15\1\40"+ + "\1\61\1\34\1\41\1\56\1\60\1\7\1\53\1\50\1\47\1\36"+ + "\1\2\1\46\1\37\1\35\1\55\1\57\1\43\1\13\1\51\1\54"+ + "\1\32\1\0\1\32\1\33\uff81\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 = + "\1\0\1\1\2\0\2\2\1\3\1\4\2\2\1\3"+ + "\3\2\1\5\1\6\1\7\2\2\1\10\15\2\1\1"+ + "\1\11\1\12\2\1\1\13\5\1\1\14\3\1\1\2"+ + "\1\3\1\0\2\15\3\2\1\0\3\2\1\16\1\17"+ + "\1\5\2\7\1\20\1\7\1\21\1\22\26\2\1\11"+ + "\1\0\1\23\10\0\1\2\1\15\1\0\4\2\1\24"+ + "\1\2\1\20\1\25\1\26\11\2\1\16\12\2\1\27"+ + "\10\0\21\2\2\0\1\30\2\0\1\31\4\2\1\16"+ + "\6\2\4\0\3\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[184]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\310"+ + "\0\u015e\0\u0190\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a\0\310"+ + "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a"+ + "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa"+ + "\0\u05dc\0\u060e\0\u0640\0\310\0\u0672\0\u06a4\0\310\0\u06d6"+ + "\0\u0708\0\u073a\0\u076c\0\u079e\0\310\0\u07d0\0\u0802\0\u0834"+ + "\0\u0866\0\310\0\u0898\0\310\0\u08ca\0\u08fc\0\u092e\0\u0960"+ + "\0\u0992\0\u09c4\0\u09f6\0\u0a28\0\372\0\310\0\u0a5a\0\u0a8c"+ + "\0\u0abe\0\u0af0\0\u0b22\0\310\0\310\0\u0b54\0\u0b86\0\u0bb8"+ + "\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2\0\u0ce4\0\u0d16\0\u0d48"+ + "\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42\0\u0e74\0\u0ea6\0\u0ed8"+ + "\0\u0f0a\0\u0f3c\0\u0f6e\0\310\0\u0fa0\0\310\0\u0fd2\0\u1004"+ + "\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130\0\u1162\0\u1194"+ + "\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u0992\0\u12c0\0\310"+ + "\0\310\0\310\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec"+ + "\0\u141e\0\u1450\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c"+ + "\0\u15ae\0\u15e0\0\u1612\0\u1644\0\u1676\0\u16a8\0\310\0\u16da"+ + "\0\u170c\0\u173e\0\u1770\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a"+ + "\0\u189c\0\u18ce\0\u1900\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa"+ + "\0\u1a2c\0\u1a5e\0\u1a90\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a"+ + "\0\u1bbc\0\u1bee\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u1d1a"+ + "\0\u1d4c\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa"+ + "\0\u1edc\0\u1f0e\0\u1c20\0\u1f40\0\u1cb6\0\u1f72\0\u1fa4\0\u1fd6"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[184]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\2\6\1\7\1\10\2\6\1\11\1\6\1\12"+ + "\1\13\2\6\1\14\1\5\1\6\1\15\1\16\1\17"+ + "\1\5\1\20\1\21\1\22\1\23\1\5\1\24\1\10"+ + "\1\5\1\6\1\25\1\26\1\27\1\30\1\31\1\5"+ + "\1\32\1\33\1\6\1\34\1\35\1\36\1\37\1\6"+ + "\1\40\3\6\1\41\2\6\23\42\1\43\1\44\1\45"+ + "\34\42\24\46\1\47\3\46\1\50\3\46\1\51\3\46"+ + "\1\52\2\46\1\53\16\46\24\54\1\55\7\54\1\56"+ + "\3\54\1\57\2\54\1\60\16\54\63\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\17\6"+ + "\3\0\1\7\2\0\2\62\2\0\1\7\1\0\2\63"+ + "\1\0\2\64\1\65\16\0\1\64\22\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\1\6"+ + "\1\66\15\6\1\0\3\6\1\0\1\61\1\6\1\67"+ + "\6\6\1\0\2\6\13\0\6\6\1\0\1\6\1\70"+ + "\15\6\3\0\1\7\2\0\2\62\2\0\1\7\1\71"+ + "\2\63\1\0\2\64\1\65\16\0\1\64\22\0\3\6"+ + "\1\0\1\61\1\6\1\72\3\6\1\73\2\6\1\0"+ + "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\7\6\1\74\1\0\2\6\13\0\6\6\1\0"+ + "\4\6\1\75\12\6\3\0\1\65\6\0\1\65\47\0"+ + "\22\17\1\76\1\77\36\17\23\100\1\101\1\100\1\102"+ + "\34\100\26\103\1\0\33\103\27\0\1\104\1\105\62\0"+ + "\1\24\31\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\1\106\5\6\1\0\3\6\1\107\2\6\1\110"+ + "\10\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\1\6\1\111\1\6\1\112\13\6"+ + "\1\0\3\6\1\0\1\61\7\6\1\113\1\0\2\6"+ + "\13\0\6\6\1\0\12\6\1\114\4\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\115"+ + "\1\0\1\6\1\116\2\6\1\117\12\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\4\6\1\75"+ + "\1\6\1\0\10\6\1\120\6\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\1\121\4\6\1\122"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\2\6\1\123\14\6\1\0"+ + "\3\6\1\0\1\61\7\6\1\124\1\0\2\6\13\0"+ + "\6\6\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\2\6\1\125\11\6"+ + "\1\126\2\6\1\0\3\6\1\0\1\61\7\6\1\127"+ + "\1\0\2\6\13\0\6\6\1\0\12\6\1\130\4\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\5\6\1\131\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\1\6\1\132"+ + "\15\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\1\6\1\133\15\6\23\42\3\0"+ + "\34\42\24\134\1\0\35\134\25\0\1\135\34\0\24\46"+ + "\1\0\3\46\1\0\3\46\1\0\3\46\1\0\2\46"+ + "\1\0\16\46\27\0\1\136\67\0\1\137\61\0\1\140"+ + "\3\0\1\141\63\0\1\142\16\0\24\54\1\0\7\54"+ + "\1\0\3\54\1\0\2\54\1\0\16\54\35\0\1\143"+ + "\61\0\1\144\3\0\1\145\63\0\1\146\16\0\1\147"+ + "\3\6\1\0\1\61\10\6\1\147\2\6\1\0\7\147"+ + "\1\0\2\147\6\6\1\147\17\6\3\0\1\150\6\0"+ + "\1\150\3\0\1\151\46\0\1\65\6\0\1\65\1\0"+ + "\2\63\1\0\2\64\17\0\1\64\22\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\11\6"+ + "\1\152\5\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\1\6\1\153\15\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\1\6"+ + "\1\154\1\6\1\155\2\6\1\0\17\6\3\0\1\156"+ + "\4\0\3\156\1\0\2\156\1\0\2\156\17\0\1\156"+ + "\3\0\2\156\15\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\3\6\1\155\2\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\1\6"+ + "\1\157\4\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\4\6\1\75\1\6\1\0"+ + "\17\6\24\17\1\0\35\17\23\100\1\101\1\100\1\160"+ + "\60\100\1\0\35\100\25\0\1\161\34\0\26\103\1\162"+ + "\33\103\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\5\6\1\163\1\0\3\6\1\164\13\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\1\6\1\165\4\6\1\75\3\6\1\155\4\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\2\6\1\155\3\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\3\6\1\166\4\6\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\5\6\1\167\1\0\4\6\1\170\12\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\6\6\1\0\1\6\1\171\15\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\2\6\1\172\3\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\5\6\1\173\11\6\1\0"+ + "\3\6\1\0\1\61\1\6\1\72\6\6\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\3\6\1\174"+ + "\13\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\2\6\1\175\3\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\176"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\1\6\1\177\4\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\3\6"+ + "\1\200\2\6\1\0\17\6\1\0\1\6\1\201\1\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\1\6\1\202"+ + "\4\6\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\13\6\1\203\3\6"+ + "\1\0\3\6\1\0\1\61\7\6\1\204\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\1\75\16\6"+ + "\1\0\3\6\1\0\1\61\1\6\1\205\6\6\1\0"+ + "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\7\6\1\206\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\1\6\1\154\4\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\1\6\1\75\6\6\1\0\2\6\13\0"+ + "\6\6\1\0\3\6\1\75\13\6\25\0\1\207\71\0"+ + "\1\210\62\0\1\211\32\0\1\212\115\0\1\213\53\0"+ + "\1\214\62\0\1\215\32\0\1\216\115\0\1\217\16\0"+ + "\1\147\15\0\1\147\3\0\7\147\1\0\2\147\6\0"+ + "\1\147\22\0\1\150\6\0\1\150\4\0\2\64\17\0"+ + "\1\64\24\0\1\150\6\0\1\150\50\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\6\6"+ + "\1\75\10\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\3\6\1\163\2\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\3\6\1\177\4\6\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\7\6\1\75\1\0\2\6\13\0\6\6\1\0\17\6"+ + "\1\0\3\6\1\0\1\61\7\6\1\220\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\3\6\1\75\2\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\4\6\1\127\12\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\221"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\15\6\1\222\1\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\14\6\1\223\2\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\1\6\1\224\4\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\1\6\1\225\6\6"+ + "\1\0\2\6\13\0\6\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\7\6\1\226\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\1\6\1\227\15\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\7\6\1\230\7\6\1\0\3\6\1\0\1\61"+ + "\1\6\1\231\6\6\1\0\2\6\13\0\6\6\1\0"+ + "\4\6\1\232\12\6\1\0\3\6\1\0\1\61\1\6"+ + "\1\155\6\6\1\0\2\6\13\0\6\6\1\0\17\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\1\75\5\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\1\6\1\233\4\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\12\6\1\234\4\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ + "\12\6\1\235\4\6\1\0\3\6\1\0\1\61\7\6"+ + "\1\236\1\0\2\6\13\0\6\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\3\6\1\237\13\6\1\0\3\6\1\0\1\61"+ + "\1\6\1\75\6\6\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\1\6\1\240\6\6"+ + "\1\0\2\6\13\0\6\6\1\0\17\6\36\0\1\241"+ + "\65\0\1\242\34\0\1\211\65\0\1\243\76\0\1\244"+ + "\65\0\1\245\34\0\1\215\65\0\1\246\41\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ + "\5\6\1\247\11\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\1\6\1\75\4\6\1\0\17\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\6\6\1\0\1\6\1\250\15\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\1\6"+ + "\1\251\15\6\1\0\3\6\1\0\1\61\7\6\1\252"+ + "\1\0\2\6\13\0\6\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\7\6\1\240\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\3\6\1\75\13\6\1\0"+ + "\3\6\1\0\1\61\1\6\1\253\6\6\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\4\6\1\254"+ + "\12\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\5\6\1\255\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\3\6"+ + "\1\221\13\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\3\6\1\256\13\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\5\6"+ + "\1\257\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\3\6\1\260\13\6"+ + "\1\0\3\6\1\0\1\61\3\6\1\221\4\6\1\0"+ + "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\3\6"+ + "\1\261\13\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\1\6\1\75\13\0\6\6\1\0\17\6\37\0\1\211"+ + "\2\0\1\242\46\0\1\262\33\0\3\243\1\263\11\243"+ + "\1\263\2\243\2\263\4\0\1\243\1\263\2\0\1\263"+ + "\6\243\1\263\17\243\37\0\1\215\2\0\1\245\46\0"+ + "\1\264\33\0\3\246\1\265\11\246\1\265\2\246\2\265"+ + "\4\0\1\246\1\265\2\0\1\265\6\246\1\265\17\246"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\1\6\1\163"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\16\6\1\155"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\1\6\1\155\4\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\3\6\1\266\4\6\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\1\6\1\152"+ + "\6\6\1\0\2\6\13\0\6\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\10\6\1\155\6\6\1\0\3\6\1\0\1\61"+ + "\3\6\1\165\4\6\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\1\6\1\236\15\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ + "\3\6\1\267\13\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\5\6\1\75\11\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\5\6\1\270\1\0\17\6\27\0\1\243\61\0\1\246"+ + "\33\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\1\6\1\225\4\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\7\6\1\163\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\1\6"+ + "\1\155\13\0\6\6\1\0\17\6"; + + private static int [] zzUnpackTrans() { + int [] result = new int[8200]; + 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; + } + + + /* 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; + + /* 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 = + "\1\0\1\1\2\0\1\11\2\1\1\11\7\1\1\11"+ + "\23\1\1\11\2\1\1\11\5\1\1\11\4\1\1\11"+ + "\1\0\1\11\4\1\1\0\4\1\1\11\5\1\2\11"+ + "\26\1\1\11\1\0\1\11\10\0\2\1\1\0\6\1"+ + "\3\11\24\1\1\11\10\0\21\1\2\0\1\1\2\0"+ + "\14\1\4\0\3\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[184]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ScalaTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + default: + state = YYINITIAL; + } + + s = text; + start = text.offset; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ScalaTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ScalaTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 150) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 6: + { addNullToken(); return firstToken; + } + case 26: break; + case 15: + { addToken(Token.LITERAL_CHAR); + } + case 27: break; + case 21: + { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); + } + case 28: break; + case 19: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 29: break; + case 18: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 30: break; + case 8: + { addToken(Token.WHITESPACE); + } + case 31: break; + case 20: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 32: break; + case 13: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 33: break; + case 14: + { addToken(Token.RESERVED_WORD); + } + case 34: break; + case 4: + { addToken(Token.SEPARATOR); + } + case 35: break; + case 22: + { addToken(Token.LITERAL_BACKQUOTE); + } + case 36: break; + case 9: + { /* Skip escaped chars, handles case: '\"""'. */ + } + case 37: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 38: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 39: break; + case 17: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 40: break; + case 23: + { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); + } + case 41: break; + case 5: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 42: break; + case 7: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 43: break; + case 16: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 44: break; + case 10: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 45: break; + case 25: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 46: break; + case 24: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 47: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 48: break; + case 1: + { + } + case 49: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 50: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 185: break; + case MULTILINE_STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 186: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 187: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 188: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex new file mode 100644 index 0000000..79be7e8 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex @@ -0,0 +1,401 @@ +/* + * 10/03/2007 + * + * TclTokenMaker.java - Scanner for the Tcl programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Tcl programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated TclTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class TclTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public TclTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +StringLiteral = ({UnclosedStringLiteral}[\"]) + +LineCommentBegin = "#" + +IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +IntegerLiteral = ({IntegerHelper1}[lL]?) +HexLiteral = ({IntegerHelper2}[lL]?) +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +Operator = ("="|"!"|"+"|"-"|"*"|"/"|">"=?|"<"=?|"%"|"&"|"|"|"^"|"~") + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + + +%% + +/* Keywords */ + "append" { addToken(Token.RESERVED_WORD); } + "array" { addToken(Token.RESERVED_WORD); } + "auto_mkindex" { addToken(Token.RESERVED_WORD); } + "concat" { addToken(Token.RESERVED_WORD); } + "console" { addToken(Token.RESERVED_WORD); } + "eval" { addToken(Token.RESERVED_WORD); } + "expr" { addToken(Token.RESERVED_WORD); } + "format" { addToken(Token.RESERVED_WORD); } + "global" { addToken(Token.RESERVED_WORD); } + "set" { addToken(Token.RESERVED_WORD); } + "trace" { addToken(Token.RESERVED_WORD); } + "unset" { addToken(Token.RESERVED_WORD); } + "upvar" { addToken(Token.RESERVED_WORD); } + "join" { addToken(Token.RESERVED_WORD); } + "lappend" { addToken(Token.RESERVED_WORD); } + "lindex" { addToken(Token.RESERVED_WORD); } + "linsert" { addToken(Token.RESERVED_WORD); } + "list" { addToken(Token.RESERVED_WORD); } + "llength" { addToken(Token.RESERVED_WORD); } + "lrange" { addToken(Token.RESERVED_WORD); } + "lreplace" { addToken(Token.RESERVED_WORD); } + "lsearch" { addToken(Token.RESERVED_WORD); } + "lsort" { addToken(Token.RESERVED_WORD); } + "split" { addToken(Token.RESERVED_WORD); } + "scan" { addToken(Token.RESERVED_WORD); } + "string" { addToken(Token.RESERVED_WORD); } + "regexp" { addToken(Token.RESERVED_WORD); } + "regsub" { addToken(Token.RESERVED_WORD); } + "if" { addToken(Token.RESERVED_WORD); } + "else" { addToken(Token.RESERVED_WORD); } + "elseif" { addToken(Token.RESERVED_WORD); } + "switch" { addToken(Token.RESERVED_WORD); } + "for" { addToken(Token.RESERVED_WORD); } + "foreach" { addToken(Token.RESERVED_WORD); } + "while" { addToken(Token.RESERVED_WORD); } + "break" { addToken(Token.RESERVED_WORD); } + "continue" { addToken(Token.RESERVED_WORD); } + "proc" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD); } + "source" { addToken(Token.RESERVED_WORD); } + "unkown" { addToken(Token.RESERVED_WORD); } + "uplevel" { addToken(Token.RESERVED_WORD); } + "cd" { addToken(Token.RESERVED_WORD); } + "close" { addToken(Token.RESERVED_WORD); } + "eof" { addToken(Token.RESERVED_WORD); } + "file" { addToken(Token.RESERVED_WORD); } + "flush" { addToken(Token.RESERVED_WORD); } + "gets" { addToken(Token.RESERVED_WORD); } + "glob" { addToken(Token.RESERVED_WORD); } + "open" { addToken(Token.RESERVED_WORD); } + "read" { addToken(Token.RESERVED_WORD); } + "puts" { addToken(Token.RESERVED_WORD); } + "pwd" { addToken(Token.RESERVED_WORD); } + "seek" { addToken(Token.RESERVED_WORD); } + "tell" { addToken(Token.RESERVED_WORD); } + "catch" { addToken(Token.RESERVED_WORD); } + "error" { addToken(Token.RESERVED_WORD); } + "exec" { addToken(Token.RESERVED_WORD); } + "pid" { addToken(Token.RESERVED_WORD); } + "after" { addToken(Token.RESERVED_WORD); } + "time" { addToken(Token.RESERVED_WORD); } + "exit" { addToken(Token.RESERVED_WORD); } + "history" { addToken(Token.RESERVED_WORD); } + "rename" { addToken(Token.RESERVED_WORD); } + "info" { addToken(Token.RESERVED_WORD); } + "ceil" { addToken(Token.RESERVED_WORD); } + "floor" { addToken(Token.RESERVED_WORD); } + "round" { addToken(Token.RESERVED_WORD); } + "incr" { addToken(Token.RESERVED_WORD); } + "hypot" { addToken(Token.RESERVED_WORD); } + "abs" { addToken(Token.RESERVED_WORD); } + "acos" { addToken(Token.RESERVED_WORD); } + "cos" { addToken(Token.RESERVED_WORD); } + "cosh" { addToken(Token.RESERVED_WORD); } + "asin" { addToken(Token.RESERVED_WORD); } + "sin" { addToken(Token.RESERVED_WORD); } + "sinh" { addToken(Token.RESERVED_WORD); } + "atan" { addToken(Token.RESERVED_WORD); } + "atan2" { addToken(Token.RESERVED_WORD); } + "tan" { addToken(Token.RESERVED_WORD); } + "tanh" { addToken(Token.RESERVED_WORD); } + "log" { addToken(Token.RESERVED_WORD); } + "log10" { addToken(Token.RESERVED_WORD); } + "fmod" { addToken(Token.RESERVED_WORD); } + "pow" { addToken(Token.RESERVED_WORD); } + "hypot" { addToken(Token.RESERVED_WORD); } + "sqrt" { addToken(Token.RESERVED_WORD); } + "double" { addToken(Token.RESERVED_WORD); } + "int" { addToken(Token.RESERVED_WORD); } + + "bind" { addToken(Token.RESERVED_WORD); } + "button" { addToken(Token.RESERVED_WORD); } + "canvas" { addToken(Token.RESERVED_WORD); } + "checkbutton" { addToken(Token.RESERVED_WORD); } + "destroy" { addToken(Token.RESERVED_WORD); } + "entry" { addToken(Token.RESERVED_WORD); } + "focus" { addToken(Token.RESERVED_WORD); } + "frame" { addToken(Token.RESERVED_WORD); } + "grab" { addToken(Token.RESERVED_WORD); } + "image" { addToken(Token.RESERVED_WORD); } + "label" { addToken(Token.RESERVED_WORD); } + "listbox" { addToken(Token.RESERVED_WORD); } + "lower" { addToken(Token.RESERVED_WORD); } + "menu" { addToken(Token.RESERVED_WORD); } + "menubutton" { addToken(Token.RESERVED_WORD); } + "message" { addToken(Token.RESERVED_WORD); } + "option" { addToken(Token.RESERVED_WORD); } + "pack" { addToken(Token.RESERVED_WORD); } + "placer" { addToken(Token.RESERVED_WORD); } + "radiobutton" { addToken(Token.RESERVED_WORD); } + "raise" { addToken(Token.RESERVED_WORD); } + "scale" { addToken(Token.RESERVED_WORD); } + "scrollbar" { addToken(Token.RESERVED_WORD); } + "selection" { addToken(Token.RESERVED_WORD); } + "send" { addToken(Token.RESERVED_WORD); } + "text" { addToken(Token.RESERVED_WORD); } + "tk" { addToken(Token.RESERVED_WORD); } + "tkerror" { addToken(Token.RESERVED_WORD); } + "tkwait" { addToken(Token.RESERVED_WORD); } + "toplevel" { addToken(Token.RESERVED_WORD); } + "update" { addToken(Token.RESERVED_WORD); } + "winfo" { addToken(Token.RESERVED_WORD); } + "wm" { addToken(Token.RESERVED_WORD); } + + + { + + {LineTerminator} { addNullToken(); return firstToken; } + + {Identifier} { addToken(Token.IDENTIFIER); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + + /* Comment literals. */ + {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java b/src/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java new file mode 100644 index 0000000..a043a29 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java @@ -0,0 +1,1074 @@ +/* The following code was generated by JFlex 1.4.1 on 10/10/10 10:56 PM */ + +/* + * 10/03/2007 + * + * TclTokenMaker.java - Scanner for the Tcl programming language. + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Tcl programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated TclTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class TclTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\14\1\13\1\0\1\14\1\7\22\0\1\14\1\27\1\15"+ + "\1\10\1\1\1\27\1\27\1\7\2\24\1\27\1\22\1\25\1\22"+ + "\1\23\1\27\1\3\1\61\1\60\5\5\2\2\1\7\1\25\1\30"+ + "\1\26\1\30\1\7\1\0\3\4\1\20\1\21\1\20\5\1\1\17"+ + "\13\1\1\16\2\1\1\24\1\11\1\24\1\27\1\12\1\0\1\31"+ + "\1\54\1\46\1\35\1\33\1\52\1\53\1\56\1\44\1\55\1\43"+ + "\1\50\1\42\1\34\1\41\1\32\1\62\1\36\1\47\1\40\1\6"+ + "\1\51\1\57\1\45\1\37\1\1\1\24\1\27\1\24\1\27\uff81\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 = + "\1\0\1\1\1\2\2\3\1\2\1\1\1\4\1\5"+ + "\1\6\1\7\1\10\1\2\1\11\1\2\1\10\22\2"+ + "\1\1\1\12\1\3\1\13\1\12\1\13\1\12\1\14"+ + "\1\12\2\2\1\7\1\15\35\2\1\16\5\2\1\16"+ + "\40\2\1\1\1\13\1\0\2\14\5\2\1\15\25\2"+ + "\1\16\30\2\1\16\4\2\1\16\11\2\1\1\5\2"+ + "\2\16\6\2\1\16\15\2\1\16\3\2\1\16\1\2"+ + "\1\1\14\2\1\1\6\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[241]; + 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; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\63\0\146\0\231\0\314\0\377\0\u0132\0\u0165"+ + "\0\u0132\0\u0198\0\u01cb\0\u0132\0\u01fe\0\u0132\0\u0132\0\u0231"+ + "\0\u0264\0\u0297\0\u02ca\0\u02fd\0\u0330\0\u0363\0\u0396\0\u03c9"+ + "\0\u03fc\0\u042f\0\u0462\0\u0495\0\u04c8\0\u04fb\0\u052e\0\u0561"+ + "\0\u0594\0\u05c7\0\u05fa\0\u062d\0\u062d\0\u062d\0\u0660\0\u0693"+ + "\0\u06c6\0\u06f9\0\u072c\0\u075f\0\u0792\0\u07c5\0\u0132\0\u07f8"+ + "\0\u082b\0\u085e\0\u0891\0\u08c4\0\u08f7\0\u092a\0\u095d\0\u0990"+ + "\0\u09c3\0\u09f6\0\u0a29\0\u0a5c\0\u0a8f\0\u0ac2\0\u0af5\0\u0b28"+ + "\0\u0b5b\0\u0b8e\0\u0bc1\0\u0bf4\0\u0c27\0\u0c5a\0\u0c8d\0\u0cc0"+ + "\0\u0cf3\0\u0d26\0\u0d59\0\u0d8c\0\u0dbf\0\u0df2\0\u0e25\0\u0e58"+ + "\0\u0e8b\0\u0ebe\0\146\0\u0ef1\0\u0f24\0\u0f57\0\u0f8a\0\u0fbd"+ + "\0\u0ff0\0\u1023\0\u1056\0\u1089\0\u10bc\0\u10ef\0\u1122\0\u1155"+ + "\0\u1188\0\u11bb\0\u11ee\0\u1221\0\u1254\0\u1287\0\u12ba\0\u12ed"+ + "\0\u1320\0\u1353\0\u1386\0\u13b9\0\u13ec\0\u141f\0\u1452\0\u1485"+ + "\0\u14b8\0\u14eb\0\u151e\0\u1551\0\u1584\0\u15b7\0\u062d\0\u15ea"+ + "\0\u161d\0\u1650\0\u1683\0\u16b6\0\u16e9\0\u01cb\0\u171c\0\u174f"+ + "\0\u1782\0\u17b5\0\u17e8\0\u181b\0\u184e\0\u1881\0\u18b4\0\u18e7"+ + "\0\u191a\0\u194d\0\u1980\0\u19b3\0\u19e6\0\u1a19\0\u1a4c\0\u1a7f"+ + "\0\u1ab2\0\u1ae5\0\u1b18\0\u1b4b\0\u1b7e\0\u1bb1\0\u1be4\0\u1c17"+ + "\0\u1c4a\0\u1c7d\0\u1cb0\0\u1ce3\0\u1d16\0\u1d49\0\u1d7c\0\u1daf"+ + "\0\u1de2\0\u1e15\0\u1e48\0\u1e7b\0\u1eae\0\u1ee1\0\u1f14\0\u1f47"+ + "\0\u1f7a\0\u1fad\0\u1fe0\0\u2013\0\u2046\0\u2079\0\u20ac\0\u20df"+ + "\0\u2112\0\u2145\0\u2178\0\u21ab\0\u21de\0\u2211\0\u2244\0\u2277"+ + "\0\u22aa\0\u22dd\0\u2310\0\u2343\0\u2376\0\u23a9\0\u23dc\0\u240f"+ + "\0\u2442\0\u2475\0\u24a8\0\u24db\0\u250e\0\u2541\0\u2574\0\u25a7"+ + "\0\u25da\0\u260d\0\u2640\0\u1b4b\0\u2673\0\u26a6\0\u26d9\0\u270c"+ + "\0\u273f\0\u2772\0\u27a5\0\u27d8\0\u280b\0\u283e\0\u2871\0\u28a4"+ + "\0\u28d7\0\u290a\0\u293d\0\u0bc1\0\u2970\0\u29a3\0\u29d6\0\u2a09"+ + "\0\u260d\0\u2a3c\0\u2a6f\0\u2aa2\0\u2ad5\0\u2b08\0\u2b3b\0\u2b6e"+ + "\0\u2ba1\0\u2bd4\0\u2c07\0\u2c3a\0\u2c6d\0\u2ca0\0\u2cd3\0\u2d06"+ + "\0\u2d39"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[241]; + 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; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\4\1\5\1\3\1\4\1\6\1\7"+ + "\1\10\1\2\1\3\1\11\1\12\1\13\4\3\1\14"+ + "\1\15\1\16\1\17\2\14\1\20\1\21\1\22\1\23"+ + "\1\3\1\24\1\25\1\3\1\26\1\27\1\30\1\3"+ + "\1\31\1\3\1\32\1\33\1\34\1\3\1\35\1\36"+ + "\1\37\1\40\1\41\1\42\2\4\1\3\7\2\1\0"+ + "\3\2\3\0\4\2\7\0\33\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\32\3\2\44\2\4"+ + "\1\44\1\4\1\44\1\0\3\44\3\0\1\44\1\45"+ + "\1\46\1\47\1\0\1\50\5\0\2\44\1\47\1\44"+ + "\1\46\12\44\1\45\1\44\1\46\5\44\2\4\3\44"+ + "\1\51\1\52\1\44\1\52\1\44\1\0\3\44\3\0"+ + "\1\53\1\45\1\46\1\47\1\0\1\50\5\0\2\44"+ + "\1\47\1\44\1\46\7\44\1\53\2\44\1\45\1\44"+ + "\1\46\5\44\2\52\1\44\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\3\1\54\1\3"+ + "\1\55\26\3\63\0\13\10\1\0\47\10\14\0\1\12"+ + "\46\0\11\13\1\56\3\13\1\57\45\13\2\0\2\50"+ + "\1\0\1\50\52\0\2\50\27\0\1\14\34\0\1\2"+ + "\5\3\1\60\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\3\1\61\3\3\1\62\1\3\1\63\5\3"+ + "\1\64\1\65\2\3\1\66\1\3\1\67\6\3\1\2"+ + "\5\3\1\70\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\71\4\3\1\72\2\3\1\73\2\3\1\74"+ + "\3\3\1\75\6\3\1\74\3\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\76"+ + "\1\3\1\77\2\3\1\100\3\3\1\101\2\3\1\102"+ + "\1\103\11\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\2\3\1\104\5\3\1\105\21\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\106\1\3\1\107\5\3\1\110\21\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\111\1\3\1\112\2\3\1\113\2\3\1\114\1\3"+ + "\1\115\1\116\16\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\3\1\117\30\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\2\3\1\120\27\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\121\5\3\1\122"+ + "\7\3\1\123\10\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\124\1\3\1\125\1\3"+ + "\1\123\3\3\1\126\6\3\1\127\5\3\1\130\4\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\3\1\131\1\132\4\3\1\133\1\134\2\3"+ + "\1\111\1\3\1\135\10\3\1\136\2\3\1\137\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\140\4\3\1\141\2\3\1\142\2\3\1\143\2\3"+ + "\1\144\1\145\12\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\5\3\1\146\2\3\1\147"+ + "\1\150\1\3\1\151\3\3\1\152\12\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\70\2\3\1\153\11\3\1\154\12\3\1\2\5\3"+ + "\1\155\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\156\5\3\1\157\16\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\65"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\6\3\1\160\4\3\1\161\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\11\3\1\123\1\3\1\162\11\3\1\163\4\3\6\2"+ + "\1\164\1\0\3\2\3\0\4\2\7\0\32\2\7\44"+ + "\1\0\3\44\3\0\4\44\7\0\34\44\2\165\1\44"+ + "\1\165\1\44\1\0\3\44\3\0\4\44\1\166\6\0"+ + "\27\44\2\165\3\44\2\50\1\44\1\50\1\44\1\0"+ + "\3\44\3\0\2\44\1\46\1\47\7\0\2\44\1\47"+ + "\1\44\1\46\14\44\1\46\5\44\2\50\3\44\2\51"+ + "\1\44\1\51\1\44\1\0\3\44\3\0\2\44\1\46"+ + "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46"+ + "\14\44\1\46\5\44\2\51\3\44\1\51\1\52\1\44"+ + "\1\52\1\44\1\0\3\44\3\0\1\44\1\167\1\46"+ + "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46"+ + "\12\44\1\167\1\44\1\46\5\44\2\52\3\44\4\170"+ + "\1\44\1\0\3\44\3\0\2\44\2\170\7\0\1\170"+ + "\1\44\1\170\1\44\1\170\10\44\1\170\3\44\1\170"+ + "\1\44\1\170\3\44\2\170\1\44\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\4\3\1\171"+ + "\12\3\1\172\1\173\11\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\12\3\1\174\3\3"+ + "\1\175\13\3\13\13\1\0\1\13\1\176\45\13\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\177\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\3\1\200\30\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\201\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\202\31\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\67\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\13\3\1\203\16\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3"+ + "\1\204\22\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\16\3\1\123\13\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3"+ + "\1\67\22\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\15\3\1\205\14\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\206\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\26\3\1\123\3\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3"+ + "\1\123\25\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\207\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\210"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\5\3\1\211\24\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\21\3\1\123"+ + "\10\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\1\3\1\212\1\206\10\3\1\213\16\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\16\3\1\214\13\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\215\31\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\16\3\1\216\13\3\1\2\5\3\1\217\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3"+ + "\1\220\6\3\1\221\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\74\2\3\1\146"+ + "\3\3\1\222\12\3\1\223\7\3\1\2\5\3\1\157"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\3\3\1\224\26\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\14\3\1\213\2\3"+ + "\1\215\12\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\225\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\226"+ + "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\2\3\1\227\23\3\1\230\3\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\11\3\1\231\20\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\2\3\1\203\4\3\1\232"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\3\3\1\233\12\3\1\234\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\123\5\3\1\212\3\3\1\235\10\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\236\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\3\3\1\237\3\3\1\240\22\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\13\3\1\215\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\3\3\1\241\12\3"+ + "\1\224\13\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\221\21\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\242\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\17\3\1\243\12\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\205\1\74\3\3\1\123\7\3\1\244\12\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\245\24\3\1\2\5\3\1\246\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\247"+ + "\4\3\1\250\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\13\3\1\251\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\213\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\3\1\61\21\3\1\252"+ + "\6\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\1\253\1\3\1\254\27\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\22\3"+ + "\1\255\3\3\1\204\3\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\3\3\1\256\12\3"+ + "\1\257\13\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\2\3\1\260\5\3\1\137\21\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\2\3\1\261\27\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\116\31\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\262\7\3\1\263\14\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\74"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\17\3\1\231\12\3\1\2\5\3\1\264"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\211\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\265\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\266"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\7\3\1\267\22\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\270"+ + "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\3\3\1\74\26\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\271"+ + "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\16\3\1\272\13\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\273"+ + "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\13\3\1\151\16\3\2\2\4\274\1\2"+ + "\1\0\3\2\3\0\2\2\2\274\7\0\1\274\1\2"+ + "\1\274\1\2\1\274\10\2\1\274\3\2\1\274\1\2"+ + "\1\274\3\2\2\274\1\2\2\44\2\165\1\44\1\165"+ + "\1\44\1\0\3\44\3\0\2\44\1\46\1\44\7\0"+ + "\4\44\1\46\14\44\1\46\5\44\2\165\1\44\2\0"+ + "\2\165\1\0\1\165\52\0\2\165\1\0\2\44\4\170"+ + "\1\44\1\0\3\44\3\0\1\44\1\167\2\170\7\0"+ + "\1\170\1\44\1\170\1\44\1\170\10\44\1\170\1\44"+ + "\1\167\1\44\1\170\1\44\1\170\3\44\2\170\1\44"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\275\31\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\2\3\1\276\27\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\212\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\277\21\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\213\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\300\21\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\157\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\301\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\302"+ + "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\3\3\1\123\26\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\212"+ + "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\12\3\1\123\17\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\15\3\1\123"+ + "\14\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\15\3\1\204\14\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\301"+ + "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\10\3\1\212\21\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\123"+ + "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\7\3\1\123\22\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\303"+ + "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\17\3\1\123\12\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\304"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\23\3\1\151\6\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\305"+ + "\16\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\16\3\1\231\13\3\1\2\5\3\1\306"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\2\3\1\307\13\3\1\310\13\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\25\3"+ + "\1\123\4\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\15\3\1\231\14\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\17\3"+ + "\1\172\12\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\5\3\1\77\24\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\243"+ + "\31\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\2\3\1\123\27\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\311"+ + "\16\3\1\2\5\3\1\312\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\16\3\1\122\13\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\10\3\1\123\21\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\22\3\1\231\7\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\20\3\1\313\11\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\15\3\1\314\14\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\7\3\1\315\5\3\1\316\1\317\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\15\3\1\320\14\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\13\3\1\213\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\2\3\1\321\27\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\13\3\1\322\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\225\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\123\13\3\1\231"+ + "\12\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\10\3\1\323\21\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\240"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\2\3\1\215\27\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\236"+ + "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\1\3\1\324\30\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\30\3\1\325"+ + "\1\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\4\3\1\326\11\3\1\327\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\330\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\331\31\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\3\3"+ + "\1\332\26\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\2\3\1\333\6\3\1\316\20\3"+ + "\1\2\5\3\1\67\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\16\3\1\314\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\23\3\1\123\6\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\23\3\1\334\6\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\311\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\205\31\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\213\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\7\3\1\335\22\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\21\3"+ + "\1\235\10\3\2\2\4\336\1\2\1\0\3\2\3\0"+ + "\2\2\2\336\7\0\1\336\1\2\1\336\1\2\1\336"+ + "\10\2\1\336\3\2\1\336\1\2\1\336\3\2\2\336"+ + "\2\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\7\3\1\231\22\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\20\3\1\252\11\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\26\3\1\203\3\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\337\3\0\4\3\7\0\32\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\6\3"+ + "\1\123\23\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\27\3\1\123\2\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\13\3"+ + "\1\100\16\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\5\3\1\340\24\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\341\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\5\3\1\203\24\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\14\3"+ + "\1\342\15\3\1\2\5\3\1\265\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\32\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\203"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\23\3\1\343\6\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\1\67\31\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\13\3\1\344\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\213\31\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\10\3\1\151\21\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\12\3\1\341\17\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\15\3\1\345\14\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\346\26\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\17\3\1\347\12\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\17\3\1\113\12\3\1\2"+ + "\2\3\1\123\3\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\2\3\1\350\27\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\2\3\1\137\27\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\23\3\1\351\6\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\240\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\22\3\1\352\7\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\240\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\210\21\3\2\2\4\353"+ + "\1\2\1\0\3\2\3\0\2\2\2\353\7\0\1\353"+ + "\1\2\1\353\1\2\1\353\10\2\1\353\3\2\1\353"+ + "\1\2\1\353\3\2\2\353\2\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\11\3\1\354\20\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\10\3\1\301\21\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\3\1\123\30\3"+ + "\1\2\5\3\1\155\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\355\26\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\232\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\22\3\1\123\7\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\17\3\1\356\12\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\14\3\1\123\15\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\10\3\1\350\21\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\7\3\1\314\22\3\2\2"+ + "\4\3\1\2\1\0\3\2\3\0\2\2\2\3\7\0"+ + "\1\3\1\2\1\3\1\2\1\3\10\2\1\3\3\2"+ + "\1\3\1\2\1\3\3\2\2\3\2\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\12\3\1\357"+ + "\17\3\1\2\5\3\1\231\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\23\3\1\173\6\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\13\3\1\360\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\3\3\1\361\26\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\4\3\1\326\25\3"; + + private static int [] zzUnpackTrans() { + int [] result = new int[11628]; + 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; + } + + + /* 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; + + /* 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 = + "\1\0\5\1\1\11\1\1\1\11\2\1\1\11\1\1"+ + "\2\11\37\1\1\11\106\1\1\0\173\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[241]; + 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 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[]; + + /** 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; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public TclTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public TclTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public TclTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 160) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +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]; + } + + throw new Error(message); + } + + + /** + * 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); + + zzMarkedPos -= number; + } + + + /** + * 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 org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 14: + { addToken(Token.RESERVED_WORD); + } + case 15: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 16: break; + case 13: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 17: break; + case 11: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 18: break; + case 4: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 19: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 20: break; + case 10: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 21: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 22: break; + case 12: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 23: break; + case 8: + { addToken(Token.OPERATOR); + } + case 24: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 25: break; + case 7: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 26: break; + case 5: + { addNullToken(); return firstToken; + } + case 27: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 28: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 242: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex b/src/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex new file mode 100644 index 0000000..3fe1db1 --- /dev/null +++ b/src/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex @@ -0,0 +1,951 @@ +/* + * 11/24/2015 + * + * This library is distributed under a modified BSD license. See the included + * RSyntaxTextArea.License.txt file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for TypeScript files. Currently it is a clone of + * {@code JavaScriptTokenMaker}, but it should diverge over time to match + * the added features of TypeScript. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated TypeScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class TypeScriptTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -9; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + private static final int INTERNAL_E4X = -14; + + private static final int INTERNAL_E4X_INTAG = -15; + + private static final int INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION = -16; + + private static final int INTERNAL_IN_E4X_COMMENT = -17; + + private static final int INTERNAL_E4X_DTD = -18; + + private static final int INTERNAL_E4X_DTD_INTERNAL = -19; + + private static final int INTERNAL_E4X_ATTR_SINGLE = -20; + + private static final int INTERNAL_E4X_ATTR_DOUBLE = -21; + + private static final int INTERNAL_E4X_MARKUP_CDATA = -22; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Whether we're in an internal DTD. Only valid if in an e4x DTD. + */ + private boolean e4x_inInternalDtd; + + /** + * The previous e4x state. Only valid if in an e4x state. + */ + private int e4x_prevState; + + /** + * Whether e4x is being highlighted. + */ + private static boolean e4xSupported; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on E4X tokens. + */ + private static final int LANG_INDEX_E4X = 1; + + private Stack varDepths; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public TypeScriptTokenMaker() { + super(); + } + + + static { + e4xSupported = true; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes} "standard" token type for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + return TokenTypes.COMMENT_DOCUMENTATION; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + return TokenTypes.LITERAL_BACKQUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + return TokenTypes.ERROR_STRING_DOUBLE; + } + return type; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + e4x_prevState = YYINITIAL; + e4x_inInternalDtd = false; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + start = text.offset; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + case INTERNAL_E4X: + state = E4X; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_INTAG: + state = E4X_INTAG; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION: + state = E4X_PI; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD: + state = E4X_DTD; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD_INTERNAL: + state = E4X_DTD; + e4x_inInternalDtd = true; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_SINGLE: + state = E4X_INATTR_SINGLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_DOUBLE: + state = E4X_INATTR_DOUBLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_CDATA: + state = E4X_CDATA; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_E4X_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_E4X_COMMENT: + state = E4X_COMMENT; + break; + } + e4x_prevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_E4X; + } + else { // Shouldn't happen + state = Token.NULL; + } + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether e4x is being highlighted. + * + * @return Whether e4x is being highlighted. + * @see #setE4xSupported(boolean) + */ + public static boolean isE4xSupported() { + return e4xSupported; + } + + + /** + * Sets whether e4x should be highlighted. A repaint should be forced on + * all RSyntaxTextAreas editing JavaScript if this property + * is changed to see the difference. + * + * @param supported Whether e4x should be highlighted. + * @see #isE4xSupported() + */ + public static void setE4xSupported(boolean supported) { + e4xSupported = supported; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * 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 YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrDigit = ({Letter}|{Digit}) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_DocCommentBegin = "/**" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) +JS_E4xAttribute = ("@"{Letter}{LetterOrDigit}*) + +JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| + "callback"|"classdesc"|"constant"|"constructor"|"constructs"| + "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| + "example"|"exports"|"external"|"file"|"fires"|"global"| + "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| + "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| + "name"|"namespace"|"param"|"private"|"property"|"protected"| + "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| + "static"|"summary"|"this"|"throws"|"todo"| + "type"|"typedef"|"variation"|"version") +JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") +JS_TemplateLiteralExprStart = ("${") + +e4x_NameStartChar = ([\:A-Z_a-z]) +e4x_NameChar = ({e4x_NameStartChar}|[\-\.0-9]) +e4x_TagName = ({e4x_NameStartChar}{e4x_NameChar}*) +e4x_Identifier = ([^ \t\n<&;]+) +e4x_EndXml = ([;]) +e4x_EntityReference = ([&][^; \t]*[;]?) +e4x_InTagIdentifier = ([^ \t\n\"\'=\/>]+) +e4x_CDataBegin = ("") + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_DOCCOMMENT +%state JS_EOL_COMMENT +%state E4X +%state E4X_COMMENT +%state E4X_PI +%state E4X_DTD +%state E4X_INTAG +%state E4X_INATTR_DOUBLE +%state E4X_INATTR_SINGLE +%state E4X_CDATA +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR + +%% + + { + + // ECMA and TypeScript keywords + "break" | + "case" | + "catch" | + "class" | + "const" | + "continue" | + "debugger" | + "default" | + "delete" | + "do" | + "else" | + "export" | + "extends" | + "finally" | + "for" | + "function" | + "if" | + "import" | + "in" | + "instanceof" | + "module" | + "new" | + "super" | + "switch" | + "this" | + "throw" | + "try" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //e4X + "each" {if(e4xSupported){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" { addToken(Token.RESERVED_WORD); } + // e4x miscellaneous + {JS_E4xAttribute} { addToken(isE4xSupported() ? Token.MARKUP_TAG_ATTRIBUTE : Token.ERROR_IDENTIFIER); } + + // TypeScript data types + "any" | + "boolean" | + "number" | + "string" | + + // Reserved ECMA keywords that represent types (older specs, 1-3) + "byte" | + "char" | + "double" | + "float" | + "int" | + "long" | + "short" { addToken(Token.DATA_TYPE); } + + // Reserved words, mostly from older standards + "abstract" | + "enum" | + "final" | + "goto" | + "implements" | + "interface" | + "native" | + "package" | + "private" | + "protected" | + "public" | + "static" | + "synchronized" | + "throws" | + "transient" | + "volatile" | + "null" { addToken(Token.RESERVED_WORD); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" | + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + [\+]?"="{Whitespace}*"<" { + int start = zzStartRead; + int operatorLen = yycharat(0)=='+' ? 2 : 1; + int yylen = yylength(); // Cache before first addToken() invalidates it + //System.out.println("'" + yytext() + "': " + yylength() + ", " + (operatorLen+1)); + addToken(zzStartRead,zzStartRead+operatorLen-1, Token.OPERATOR); + if (yylen>operatorLen+1) { + //System.out.println((start+operatorLen) + ", " + (zzMarkedPos-2)); + addToken(start+operatorLen,zzMarkedPos-2, Token.WHITESPACE); + } + zzStartRead = zzCurrentPos = zzMarkedPos = zzMarkedPos - 1; + if (isE4xSupported()) { + // Scanning will continue with "<" as markup tag start + yybegin(E4X, LANG_INDEX_E4X); + } + // Found e4x (or syntax error) but option not enabled; + // Scanning will continue at "<" as operator + } + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} + + { + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(e4x_prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_E4X_COMMENT - e4x_prevState); return firstToken; } +} + + { + [^\n\?]+ {} + "?>" { yybegin(E4X); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); addEndToken(INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n\[\]<>]+ {} + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_XML_COMMENT - prevState); return firstToken; } +} + + { + [^\n\?]+ {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n\[\]<>]+ {} + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +