/* The following code was generated by JFlex 1.4.3 on 1/31/09 11:52 PM */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JFlex 1.4.3 * * Copyright (C) 1998-2009 Gerwin Klein <lsf@jflex.de> * * All rights reserved. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License. See the file * * COPYRIGHT for more information. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package JFlex; import java_cup.runtime.Symbol; import java.util.Vector; import java.io.*; import java.util.Stack; /** * The lexer of JFlex. * * Generated by <a href="http://www.jflex.de/">JFlex</a>. * * @author Gerwin Klein * @version JFlex 1.4.3, $Revision: 433 $, $Date: 2009-01-31 19:52:34 +1100 (Sat, 31 Jan 2009) $ */ public final class LexScan implements sym, java_cup.runtime.Scanner { /** 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 STRING_CONTENT = 16; public static final int REGEXPSTART = 8; public static final int MACROS = 6; public static final int STATELIST = 4; public static final int CTOR_ARG = 26; public static final int EATWSPNL = 24; public static final int CHARCLASS = 18; public static final int JAVA_CODE = 12; public static final int REGEXP = 10; public static final int YYINITIAL = 0; public static final int REPEATEXP = 22; public static final int COMMENT = 2; public static final int STATES = 14; public static final int COPY = 20; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l * at the beginning of a line * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { 0, 0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14 }; /** * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = "\10\25\1\26\1\10\1\13\2\11\1\12\16\25\4\0\1\10\1\76"+ "\1\32\1\0\1\103\1\35\1\22\1\33\1\100\1\101\1\30\1\102"+ "\1\15\1\106\1\14\1\31\1\7\1\66\2\7\2\3\1\67\1\64"+ "\1\65\1\1\1\105\1\0\1\20\1\71\1\21\1\23\1\0\4\2"+ "\1\72\1\74\10\24\1\73\13\24\1\16\1\4\1\17\1\104\1\24"+ "\1\0\1\53\1\57\1\55\1\62\1\46\1\47\1\63\1\42\1\37"+ "\1\60\1\70\1\51\1\56\1\40\1\44\1\61\1\24\1\43\1\54"+ "\1\41\1\6\1\52\1\45\1\5\1\50\1\24\1\36\1\75\1\34"+ "\1\77\6\25\1\27\32\25\2\0\4\24\4\0\1\24\2\0\1\25"+ "\7\0\1\24\4\0\1\24\5\0\27\24\1\0\37\24\1\0\u013f\24"+ "\31\0\162\24\4\0\14\24\16\0\5\24\11\0\1\24\21\0\130\25"+ "\5\0\23\25\12\0\1\24\13\0\1\24\1\0\3\24\1\0\1\24"+ "\1\0\24\24\1\0\54\24\1\0\46\24\1\0\5\24\4\0\202\24"+ "\1\0\4\25\3\0\105\24\1\0\46\24\2\0\2\24\6\0\20\24"+ "\41\0\46\24\2\0\1\24\7\0\47\24\11\0\21\25\1\0\27\25"+ "\1\0\3\25\1\0\1\25\1\0\2\25\1\0\1\25\13\0\33\24"+ "\5\0\3\24\15\0\4\25\14\0\6\25\13\0\32\24\5\0\13\24"+ "\16\25\7\0\12\25\4\0\2\24\1\25\143\24\1\0\1\24\10\25"+ "\1\0\6\25\2\24\2\25\1\0\4\25\2\24\12\25\3\24\2\0"+ "\1\24\17\0\1\25\1\24\1\25\36\24\33\25\2\0\3\24\60\0"+ "\46\24\13\25\1\24\u014f\0\3\25\66\24\2\0\1\25\1\24\20\25"+ "\2\0\1\24\4\25\3\0\12\24\2\25\2\0\12\25\21\0\3\25"+ "\1\0\10\24\2\0\2\24\2\0\26\24\1\0\7\24\1\0\1\24"+ "\3\0\4\24\2\0\1\25\1\24\7\25\2\0\2\25\2\0\3\25"+ "\11\0\1\25\4\0\2\24\1\0\3\24\2\25\2\0\12\25\4\24"+ "\15\0\3\25\1\0\6\24\4\0\2\24\2\0\26\24\1\0\7\24"+ "\1\0\2\24\1\0\2\24\1\0\2\24\2\0\1\25\1\0\5\25"+ "\4\0\2\25\2\0\3\25\13\0\4\24\1\0\1\24\7\0\14\25"+ "\3\24\14\0\3\25\1\0\11\24\1\0\3\24\1\0\26\24\1\0"+ "\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\10\25\1\0"+ "\3\25\1\0\3\25\2\0\1\24\17\0\2\24\2\25\2\0\12\25"+ "\1\0\1\24\17\0\3\25\1\0\10\24\2\0\2\24\2\0\26\24"+ "\1\0\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\6\25"+ "\3\0\2\25\2\0\3\25\10\0\2\25\4\0\2\24\1\0\3\24"+ "\4\0\12\25\1\0\1\24\20\0\1\25\1\24\1\0\6\24\3\0"+ "\3\24\1\0\4\24\3\0\2\24\1\0\1\24\1\0\2\24\3\0"+ "\2\24\3\0\3\24\3\0\10\24\1\0\3\24\4\0\5\25\3\0"+ "\3\25\1\0\4\25\11\0\1\25\17\0\11\25\11\0\1\24\7\0"+ "\3\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0\12\24\1\0"+ "\5\24\4\0\7\25\1\0\3\25\1\0\4\25\7\0\2\25\11\0"+ "\2\24\4\0\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0"+ "\27\24\1\0\12\24\1\0\5\24\2\0\1\25\1\24\7\25\1\0"+ "\3\25\1\0\4\25\7\0\2\25\7\0\1\24\1\0\2\24\4\0"+ "\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0"+ "\20\24\4\0\6\25\2\0\3\25\1\0\4\25\11\0\1\25\10\0"+ "\2\24\4\0\12\25\22\0\2\25\1\0\22\24\3\0\30\24\1\0"+ "\11\24\1\0\1\24\2\0\7\24\3\0\1\25\4\0\6\25\1\0"+ "\1\25\1\0\10\25\22\0\2\25\15\0\60\24\1\25\2\24\7\25"+ "\4\0\10\24\10\25\1\0\12\25\47\0\2\24\1\0\1\24\2\0"+ "\2\24\1\0\1\24\2\0\1\24\6\0\4\24\1\0\7\24\1\0"+ "\3\24\1\0\1\24\1\0\1\24\2\0\2\24\1\0\4\24\1\25"+ "\2\24\6\25\1\0\2\25\1\24\2\0\5\24\1\0\1\24\1\0"+ "\6\25\2\0\12\25\2\0\2\24\42\0\1\24\27\0\2\25\6\0"+ "\12\25\13\0\1\25\1\0\1\25\1\0\1\25\4\0\2\25\10\24"+ "\1\0\42\24\6\0\24\25\1\0\2\25\4\24\4\0\10\25\1\0"+ "\44\25\11\0\1\25\71\0\42\24\1\0\5\24\1\0\2\24\1\0"+ "\7\25\3\0\4\25\6\0\12\25\6\0\6\24\4\25\106\0\46\24"+ "\12\0\51\24\7\0\132\24\5\0\104\24\5\0\122\24\6\0\7\24"+ "\1\0\77\24\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24"+ "\1\0\4\24\2\0\47\24\1\0\1\24\1\0\4\24\2\0\37\24"+ "\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24\1\0\4\24"+ "\2\0\7\24\1\0\7\24\1\0\27\24\1\0\37\24\1\0\1\24"+ "\1\0\4\24\2\0\7\24\1\0\47\24\1\0\23\24\16\0\11\25"+ "\56\0\125\24\14\0\u026c\24\2\0\10\24\12\0\32\24\5\0\113\24"+ "\3\0\3\24\17\0\15\24\1\0\4\24\3\25\13\0\22\24\3\25"+ "\13\0\22\24\2\25\14\0\15\24\1\0\3\24\1\0\2\25\14\0"+ "\64\24\40\25\3\0\1\24\3\0\2\24\1\25\2\0\12\25\41\0"+ "\3\25\2\0\12\25\6\0\130\24\10\0\51\24\1\25\126\0\35\24"+ "\3\0\14\25\4\0\14\25\12\0\12\25\36\24\2\0\5\24\u038b\0"+ "\154\24\224\0\234\24\4\0\132\24\6\0\26\24\2\0\6\24\2\0"+ "\46\24\2\0\6\24\2\0\10\24\1\0\1\24\1\0\1\24\1\0"+ "\1\24\1\0\37\24\2\0\65\24\1\0\7\24\1\0\1\24\3\0"+ "\3\24\1\0\7\24\3\0\4\24\2\0\6\24\4\0\15\24\5\0"+ "\3\24\1\0\7\24\17\0\4\25\30\0\2\11\5\25\20\0\2\24"+ "\23\0\1\24\13\0\4\25\6\0\6\25\1\0\1\24\15\0\1\24"+ "\40\0\22\24\36\0\15\25\4\0\1\25\3\0\6\25\27\0\1\24"+ "\4\0\1\24\2\0\12\24\1\0\1\24\3\0\5\24\6\0\1\24"+ "\1\0\1\24\1\0\1\24\1\0\4\24\1\0\3\24\1\0\7\24"+ "\3\0\3\24\5\0\5\24\26\0\44\24\u0e81\0\3\24\31\0\11\24"+ "\6\25\1\0\5\24\2\0\5\24\4\0\126\24\2\0\2\25\2\0"+ "\3\24\1\0\137\24\5\0\50\24\4\0\136\24\21\0\30\24\70\0"+ "\20\24\u0200\0\u19b6\24\112\0\u51a6\24\132\0\u048d\24\u0773\0\u2ba4\24\u215c\0"+ "\u012e\24\2\0\73\24\225\0\7\24\14\0\5\24\5\0\1\24\1\25"+ "\12\24\1\0\15\24\1\0\5\24\1\0\1\24\1\0\2\24\1\0"+ "\2\24\1\0\154\24\41\0\u016b\24\22\0\100\24\2\0\66\24\50\0"+ "\15\24\3\0\20\25\20\0\4\25\17\0\2\24\30\0\3\24\31\0"+ "\1\24\6\0\5\24\1\0\207\24\2\0\1\25\4\0\1\24\13\0"+ "\12\25\7\0\32\24\4\0\1\24\1\0\32\24\12\0\132\24\3\0"+ "\6\24\2\0\6\24\2\0\6\24\2\0\3\24\3\0\2\24\3\0"+ "\2\24\22\0\3\25\4\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\15\0\1\1\2\3\1\1\1\2\3\4"+ "\1\5\1\6\2\7\1\6\1\10\2\6\1\4\1\11"+ "\1\12\1\6\1\11\1\13\1\14\1\4\1\15\2\16"+ "\1\6\2\17\1\20\1\21\1\16\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\3\4\1\40\1\41\1\6\1\42"+ "\1\43\1\44\1\4\2\45\1\46\1\16\1\47\1\50"+ "\1\51\1\52\1\16\1\53\1\54\1\4\2\44\1\4"+ "\1\55\1\4\1\56\1\13\1\57\1\60\1\61\3\0"+ "\1\62\1\63\1\0\1\64\1\0\2\11\1\0\15\11"+ "\3\0\1\65\1\11\1\66\1\11\2\0\1\67\1\6"+ "\1\70\1\71\2\70\1\71\1\72\1\73\1\74\1\75"+ "\1\76\1\0\1\77\2\0\1\100\1\101\3\0\2\102"+ "\10\0\1\103\1\104\2\103\1\104\1\105\1\106\1\107"+ "\1\110\1\111\1\112\3\0\1\113\5\0\1\114\1\0"+ "\1\60\1\61\2\6\1\11\2\115\35\11\3\0\2\116"+ "\1\11\2\117\1\11\1\0\1\71\1\0\1\120\6\0"+ "\1\121\1\122\1\0\1\37\4\0\1\104\1\0\1\123"+ "\1\124\2\125\3\0\2\11\1\126\24\11\1\127\12\11"+ "\3\0\2\11\1\0\2\120\14\0\2\123\3\0\20\11"+ "\1\130\3\11\1\131\10\11\1\132\6\11\1\133\1\11"+ "\1\134\1\130\1\0\2\11\1\0\1\120\13\0\1\123"+ "\5\0\11\11\1\0\1\11\1\135\5\11\1\136\1\137"+ "\17\11\1\140\1\141\2\11\7\0\2\37\10\0\2\142"+ "\3\0\11\11\1\143\1\0\11\11\1\144\4\11\1\145"+ "\1\0\3\11\1\146\1\147\2\11\6\0\1\150\1\37"+ "\3\0\1\37\6\0\2\151\4\0\1\141\1\11\1\152"+ "\1\126\3\11\1\153\2\154\1\143\4\0\11\11\2\155"+ "\2\11\1\156\1\11\2\157\1\11\1\160\6\0\1\37"+ "\6\0\1\37\13\0\1\11\1\161\2\11\1\154\1\162"+ "\1\154\1\143\3\0\2\11\1\163\2\11\1\164\3\11"+ "\1\155\1\165\1\155\1\166\1\0\1\11\1\156\1\0"+ "\1\167\1\157\2\170\1\157\4\0\1\171\1\172\2\37"+ "\4\0\2\37\7\0\2\173\1\0\3\11\2\162\2\143"+ "\1\174\2\175\1\0\1\11\1\0\5\11\2\165\2\0"+ "\1\11\1\0\2\170\2\0\1\176\2\0\1\37\2\0"+ "\2\37\4\0\1\37\2\0\2\37\7\0\2\177\1\11"+ "\1\162\1\0\1\143\1\0\1\174\1\0\1\175\1\200"+ "\1\175\2\0\2\11\1\201\1\11\1\202\1\203\2\204"+ "\1\165\1\0\1\205\3\0\1\205\1\0\1\205\1\156"+ "\3\0\1\206\1\0\4\37\3\0\4\37\3\0\2\207"+ "\1\0\1\177\1\210\1\177\1\211\3\0\2\200\2\0"+ "\2\11\1\201\2\212\1\204\1\213\1\204\12\0\3\37"+ "\5\0\3\37\1\0\2\214\1\0\2\210\2\143\1\174"+ "\1\200\3\0\2\11\1\212\1\215\1\212\2\213\1\205"+ "\2\0\1\216\1\217\4\0\1\37\3\0\1\37\2\220"+ "\1\210\1\0\1\143\1\163\1\0\1\163\1\11\2\215"+ "\1\213\1\0\2\205\1\0\1\205\3\0\1\37\2\0"+ "\1\37\2\221\1\215\10\0\1\222\3\205"; private static int [] zzUnpackAction() { int [] result = new int[826]; 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\107\0\216\0\325\0\u011c\0\u0163\0\u01aa\0\u01f1"+ "\0\u0238\0\u027f\0\u02c6\0\u030d\0\u0354\0\u039b\0\u03e2\0\u0429"+ "\0\u0429\0\u0470\0\u04b7\0\u04fe\0\u0545\0\u058c\0\u0470\0\u05d3"+ "\0\u061a\0\u0470\0\u0661\0\u06a8\0\u06ef\0\u0736\0\u077d\0\u07c4"+ "\0\u080b\0\u0852\0\u0899\0\u08e0\0\u0927\0\u096e\0\u09b5\0\u0470"+ "\0\u0470\0\u09fc\0\u0a43\0\u0a8a\0\u0ad1\0\u0470\0\u0b18\0\u0b5f"+ "\0\u0470\0\u0470\0\u0ba6\0\u0470\0\u0bed\0\u0c34\0\u0470\0\u0470"+ "\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470\0\u0c7b\0\u0cc2\0\u0d09"+ "\0\u0d50\0\u0470\0\u0470\0\u0d97\0\u0470\0\u0dde\0\u0e25\0\u0e6c"+ "\0\u0470\0\u0eb3\0\u0470\0\u0efa\0\u0efa\0\u0b18\0\u0470\0\u0470"+ "\0\u0f41\0\u0470\0\u0f88\0\u0fcf\0\u0fcf\0\u0470\0\u1016\0\u0470"+ "\0\u105d\0\u0470\0\u10a4\0\u0470\0\u10eb\0\u1132\0\u1179\0\u11c0"+ "\0\u0545\0\u0470\0\u0470\0\u058c\0\u0470\0\u1207\0\u124e\0\u1295"+ "\0\u12dc\0\u1323\0\u136a\0\u13b1\0\u13f8\0\u143f\0\u1486\0\u14cd"+ "\0\u1514\0\u155b\0\u15a2\0\u15e9\0\u1630\0\u1677\0\u16be\0\u1705"+ "\0\u174c\0\u0470\0\u1793\0\u17da\0\u1821\0\u09b5\0\u1868\0\u0470"+ "\0\u18af\0\u0470\0\u18f6\0\u193d\0\u1984\0\u19cb\0\u0470\0\u0470"+ "\0\u0470\0\u0470\0\u0470\0\u0a8a\0\u0bed\0\u1a12\0\u1a59\0\u0470"+ "\0\u1aa0\0\u1ae7\0\u0bed\0\u0c34\0\u0470\0\u1b2e\0\u0cc2\0\u0d09"+ "\0\u0d50\0\u1b75\0\u1bbc\0\u1c03\0\u1c4a\0\u1c91\0\u0470\0\u1cd8"+ "\0\u1d1f\0\u1d66\0\u1dad\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470"+ "\0\u0470\0\u0efa\0\u0b18\0\u1df4\0\u0470\0\u0fcf\0\u1e3b\0\u1e82"+ "\0\u1ec9\0\u1f10\0\u1f57\0\u105d\0\u1f9e\0\u0470\0\u1207\0\u0470"+ "\0\u1fe5\0\u12dc\0\u0470\0\u202c\0\u2073\0\u20ba\0\u2101\0\u2148"+ "\0\u218f\0\u21d6\0\u221d\0\u2264\0\u22ab\0\u22f2\0\u2339\0\u2380"+ "\0\u23c7\0\u240e\0\u2455\0\u249c\0\u24e3\0\u252a\0\u2571\0\u25b8"+ "\0\u25ff\0\u2646\0\u268d\0\u26d4\0\u271b\0\u2762\0\u27a9\0\u27f0"+ "\0\u2837\0\u287e\0\u28c5\0\u290c\0\u2953\0\u299a\0\u29e1\0\u2a28"+ "\0\u2a6f\0\u2ab6\0\u0470\0\u2afd\0\u2b44\0\u2b8b\0\u2bd2\0\u2c19"+ "\0\u2c60\0\u2ca7\0\u2cee\0\u0470\0\u0470\0\u2d35\0\u2d7c\0\u2dc3"+ "\0\u2e0a\0\u2e51\0\u2e98\0\u0470\0\u2edf\0\u2f26\0\u0470\0\u1e3b"+ "\0\u0470\0\u2f6d\0\u2fb4\0\u2ffb\0\u3042\0\u3089\0\u30d0\0\u3117"+ "\0\u315e\0\u31a5\0\u31ec\0\u3233\0\u327a\0\u32c1\0\u3308\0\u334f"+ "\0\u3396\0\u33dd\0\u3424\0\u346b\0\u34b2\0\u34f9\0\u3540\0\u3587"+ "\0\u35ce\0\u3615\0\u365c\0\u36a3\0\u36ea\0\u3731\0\u3778\0\u37bf"+ "\0\u3806\0\u384d\0\u3894\0\u38db\0\u3922\0\u3969\0\u39b0\0\u39f7"+ "\0\u3a3e\0\u3a85\0\u3acc\0\u3b13\0\u0470\0\u3b5a\0\u3ba1\0\u3be8"+ "\0\u3c2f\0\u3c76\0\u3cbd\0\u3d04\0\u3d4b\0\u3d92\0\u3dd9\0\u3e20"+ "\0\u3e67\0\u3eae\0\u0470\0\u3ef5\0\u3f3c\0\u3f83\0\u3fca\0\u4011"+ "\0\u4058\0\u409f\0\u40e6\0\u412d\0\u4174\0\u41bb\0\u4202\0\u4249"+ "\0\u4290\0\u42d7\0\u431e\0\u4365\0\u43ac\0\u43f3\0\u443a\0\u124e"+ "\0\u4481\0\u44c8\0\u450f\0\u124e\0\u4556\0\u459d\0\u45e4\0\u462b"+ "\0\u4672\0\u46b9\0\u4700\0\u4747\0\u124e\0\u478e\0\u47d5\0\u481c"+ "\0\u4863\0\u48aa\0\u48f1\0\u124e\0\u4938\0\u0470\0\u0470\0\u497f"+ "\0\u49c6\0\u4a0d\0\u4a54\0\u2afd\0\u4a9b\0\u4ae2\0\u4b29\0\u4b70"+ "\0\u4bb7\0\u4bfe\0\u4c45\0\u4c8c\0\u4cd3\0\u4d1a\0\u4d61\0\u2edf"+ "\0\u4da8\0\u4def\0\u4e36\0\u4e7d\0\u4ec4\0\u4f0b\0\u4f52\0\u4f99"+ "\0\u4fe0\0\u5027\0\u506e\0\u50b5\0\u50fc\0\u5143\0\u518a\0\u51d1"+ "\0\u124e\0\u5218\0\u525f\0\u52a6\0\u52ed\0\u5334\0\u124e\0\u124e"+ "\0\u537b\0\u53c2\0\u5409\0\u5450\0\u5497\0\u54de\0\u5525\0\u556c"+ "\0\u55b3\0\u55fa\0\u5641\0\u5688\0\u56cf\0\u5716\0\u575d\0\u124e"+ "\0\u0470\0\u57a4\0\u57eb\0\u5832\0\u5879\0\u58c0\0\u5907\0\u594e"+ "\0\u5995\0\u59dc\0\u5a23\0\u5a6a\0\u5ab1\0\u5af8\0\u5b3f\0\u5b86"+ "\0\u5bcd\0\u5c14\0\u5c5b\0\u5ca2\0\u4def\0\u0470\0\u5ce9\0\u5d30"+ "\0\u5d77\0\u5dbe\0\u5e05\0\u5e4c\0\u5e93\0\u5eda\0\u5f21\0\u5f68"+ "\0\u5faf\0\u5ff6\0\u603d\0\u6084\0\u60cb\0\u6112\0\u6159\0\u61a0"+ "\0\u61e7\0\u622e\0\u6275\0\u62bc\0\u6303\0\u124e\0\u634a\0\u6391"+ "\0\u63d8\0\u641f\0\u124e\0\u6466\0\u64ad\0\u64f4\0\u653b\0\u124e"+ "\0\u124e\0\u6582\0\u2a28\0\u65c9\0\u6610\0\u6657\0\u669e\0\u66e5"+ "\0\u672c\0\u6773\0\u67ba\0\u6801\0\u6848\0\u688f\0\u68d6\0\u691d"+ "\0\u6964\0\u69ab\0\u69f2\0\u6a39\0\u6a80\0\u5c5b\0\u0470\0\u6ac7"+ "\0\u6b0e\0\u6b55\0\u6b9c\0\u124e\0\u6be3\0\u124e\0\u124e\0\u6c2a"+ "\0\u6c71\0\u6cb8\0\u124e\0\u6cff\0\u6d46\0\u6d8d\0\u6dd4\0\u6e1b"+ "\0\u6e62\0\u6ea9\0\u6ef0\0\u6f37\0\u6f7e\0\u6fc5\0\u700c\0\u7053"+ "\0\u709a\0\u70e1\0\u7128\0\u716f\0\u71b6\0\u71fd\0\u7244\0\u728b"+ "\0\u72d2\0\u7319\0\u7360\0\u2953\0\u0470\0\u73a7\0\u73ee\0\u7435"+ "\0\u747c\0\u74c3\0\u750a\0\u7551\0\u7598\0\u75df\0\u7626\0\u766d"+ "\0\u76b4\0\u76fb\0\u7742\0\u7789\0\u77d0\0\u7817\0\u785e\0\u78a5"+ "\0\u78ec\0\u7933\0\u797a\0\u79c1\0\u7a08\0\u7a4f\0\u7a96\0\u7add"+ "\0\u7b24\0\u7b6b\0\u7bb2\0\u7bf9\0\u7c40\0\u7c87\0\u7cce\0\u7d15"+ "\0\u7d5c\0\u7da3\0\u7dea\0\u7e31\0\u7e78\0\u7ebf\0\u124e\0\u7f06"+ "\0\u7f4d\0\u7f94\0\u7fdb\0\u8022\0\u8069\0\u124e\0\u80b0\0\u80f7"+ "\0\u813e\0\u8185\0\u124e\0\u81cc\0\u8213\0\u825a\0\u82a1\0\u82e8"+ "\0\u832f\0\u8376\0\u83bd\0\u0470\0\u0470\0\u8404\0\u844b\0\u8492"+ "\0\u84d9\0\u8520\0\u8567\0\u85ae\0\u85f5\0\u863c\0\u8683\0\u86ca"+ "\0\u8711\0\u8758\0\u879f\0\u87e6\0\u7a08\0\u0470\0\u882d\0\u8874"+ "\0\u88bb\0\u8902\0\u8949\0\u8990\0\u89d7\0\u8a1e\0\u8a65\0\u8aac"+ "\0\u8af3\0\u8b3a\0\u8b81\0\u8bc8\0\u8c0f\0\u8c56\0\u8c9d\0\u8ce4"+ "\0\u8d2b\0\u8d72\0\u8db9\0\u8e00\0\u8e47\0\u8e8e\0\u8ed5\0\u8f1c"+ "\0\u8f63\0\u8faa\0\u8ff1\0\u0470\0\u9038\0\u907f\0\u90c6\0\u910d"+ "\0\u9154\0\u919b\0\u91e2\0\u9229\0\u9270\0\u92b7\0\u92fe\0\u9345"+ "\0\u938c\0\u93d3\0\u941a\0\u9461\0\u94a8\0\u94ef\0\u9536\0\u957d"+ "\0\u95c4\0\u960b\0\u9652\0\u9699\0\u96e0\0\u9727\0\u976e\0\u97b5"+ "\0\u97fc\0\u9843\0\u988a\0\u98d1\0\u9918\0\u995f\0\u99a6\0\u99ed"+ "\0\u9a34\0\u9a7b\0\u9ac2\0\u9b09\0\u9b50\0\u124e\0\u124e\0\u9b97"+ "\0\u9bde\0\u9c25\0\u9c6c\0\u9cb3\0\u9cfa\0\u9d41\0\u9d88\0\u8e00"+ "\0\u9dcf\0\u8e8e\0\u9e16\0\u9e5d\0\u9ea4\0\u9eeb\0\u0470\0\u9f32"+ "\0\u9f79\0\u9fc0\0\ua007\0\ua04e\0\ua095\0\ua0dc\0\ua123\0\ua16a"+ "\0\ua1b1\0\ua1f8\0\ua23f\0\ua286\0\ua2cd\0\ua314\0\u960b\0\u0470"+ "\0\ua35b\0\ua3a2\0\ua3e9\0\ua430\0\ua477\0\ua4be\0\ua505\0\ua54c"+ "\0\ua593\0\ua5da\0\ua621\0\ua668\0\ua6af\0\ua6f6\0\ua73d\0\ua784"+ "\0\ua7cb\0\ua812\0\ua859\0\ua8a0\0\ua8e7\0\ua92e\0\ua975\0\ua9bc"+ "\0\uaa03\0\uaa4a\0\uaa91\0\uaad8\0\uab1f\0\uab66\0\uabad\0\uabf4"+ "\0\uac3b\0\uac82\0\uacc9\0\uad10\0\uad57\0\uad9e\0\uade5\0\uae2c"+ "\0\uae73\0\uaeba\0\ua314\0\u0470\0\uaf01\0\uaf48\0\uaf8f\0\uafd6"+ "\0\ub01d\0\ub064\0\ub0ab\0\ub0f2\0\ub139\0\ub180\0\ub1c7\0\ub20e"+ "\0\ub255\0\ub29c\0\ub2e3\0\ub32a\0\ub371\0\ua8e7\0\ub3b8\0\ub3ff"+ "\0\u0470\0\u0470\0\ub446\0\ub48d\0\ub4d4\0\ub51b\0\ub562\0\ub5a9"+ "\0\ub5f0\0\ub637\0\ub67e\0\uaf01\0\u0470\0\ub6c5\0\ub70c\0\ub753"+ "\0\u0470\0\ub79a\0\u124e\0\ub7e1\0\ub828\0\ub86f\0\ub8b6\0\ub8fd"+ "\0\ub3b8\0\ub944\0\ub98b\0\ub3ff\0\ub9d2\0\uba19\0\uba60\0\ubaa7"+ "\0\ubaee\0\ubb35\0\ubb7c\0\u0470\0\u124e\0\ubbc3\0\ubc0a\0\ubc51"+ "\0\ubc98\0\ubcdf\0\ubd26\0\ubd6d\0\ubdb4\0\ubdfb\0\u0470\0\ubdb4"+ "\0\ube42\0\ubdfb"; private static int [] zzUnpackRowMap() { int [] result = new int[826]; 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 = "\11\20\2\21\1\22\13\20\1\21\5\20\1\23\51\20"+ "\30\24\1\25\1\26\55\24\2\27\1\30\2\27\2\30"+ "\1\27\1\31\1\32\1\33\1\32\1\27\1\34\6\27"+ "\1\30\2\27\1\32\7\27\25\30\4\27\1\30\1\27"+ "\3\30\6\27\1\30\5\27\1\35\2\27\2\35\1\27"+ "\1\36\3\37\10\27\1\35\1\27\1\36\1\37\1\27"+ "\1\40\3\27\1\41\1\27\25\35\4\27\1\35\1\42"+ "\3\35\6\27\1\35\5\27\1\35\2\27\2\35\1\27"+ "\1\43\3\37\10\27\1\35\1\27\1\43\1\37\1\27"+ "\1\40\3\27\1\44\1\27\25\35\4\27\1\35\1\42"+ "\3\35\6\27\1\35\13\27\4\45\4\27\1\46\5\27"+ "\2\45\1\27\1\47\2\27\1\50\52\27\4\51\1\52"+ "\3\51\1\53\1\54\1\55\1\54\1\56\1\51\1\57"+ "\1\51\1\60\2\51\1\61\2\51\1\53\1\54\1\62"+ "\1\63\1\64\3\51\1\65\36\51\1\66\1\67\1\70"+ "\1\71\1\72\1\73\1\74\1\75\2\51\31\76\1\77"+ "\1\100\1\101\1\102\1\76\1\103\50\76\2\27\1\35"+ "\2\27\2\35\1\27\4\104\1\27\1\105\3\27\1\106"+ "\2\27\1\35\1\27\2\104\7\27\25\35\4\27\1\35"+ "\1\27\3\35\6\27\1\35\3\27\4\107\1\110\4\107"+ "\1\111\1\112\1\111\13\107\1\111\2\107\1\113\54\107"+ "\4\51\1\52\3\51\3\114\1\115\2\51\1\116\1\117"+ "\6\51\2\114\2\51\1\120\3\51\1\121\45\51\1\122"+ "\1\51\1\123\11\124\2\125\1\126\13\124\1\125\5\124"+ "\1\127\51\124\10\27\1\36\2\27\1\130\1\27\1\131"+ "\10\27\1\36\5\27\1\132\62\27\4\133\12\27\2\133"+ "\57\27\2\134\1\135\2\134\2\135\15\134\1\135\12\134"+ "\25\135\4\134\1\135\1\134\3\135\6\134\1\135\3\134"+ "\11\20\2\21\1\22\13\20\1\21\57\20\107\0\11\20"+ "\2\21\1\22\13\20\1\21\5\20\1\136\51\20\30\24"+ "\1\137\1\140\105\24\1\141\1\142\105\24\1\143\1\144"+ "\55\24\1\0\3\30\1\0\3\30\14\0\4\30\7\0"+ "\32\30\1\0\3\30\6\0\1\30\13\0\1\31\4\0"+ "\1\34\104\0\1\32\103\0\1\34\77\0\3\35\1\0"+ "\3\35\14\0\4\35\7\0\32\35\1\0\3\35\6\0"+ "\1\35\13\0\1\36\15\0\1\36\71\0\3\37\13\0"+ "\1\37\107\0\1\145\1\146\57\0\1\147\2\0\1\147"+ "\1\150\15\0\1\147\11\0\1\151\1\152\1\153\1\154"+ "\4\147\1\155\1\156\1\157\1\160\1\147\1\161\1\162"+ "\1\163\1\147\1\164\1\147\1\165\1\166\1\147\1\167"+ "\1\170\1\171\1\0\1\147\1\0\3\147\6\0\1\147"+ "\13\0\1\42\15\0\1\42\70\0\1\43\15\0\1\43"+ "\6\0\1\172\53\0\1\147\2\0\1\173\1\150\15\0"+ "\1\147\10\0\1\174\1\151\1\152\1\153\1\154\4\147"+ "\1\155\1\156\1\157\1\160\1\147\1\161\1\175\1\163"+ "\1\147\1\164\1\147\1\165\1\166\1\147\1\167\1\170"+ "\1\171\1\0\1\147\1\0\3\147\6\0\1\147\13\0"+ "\4\45\4\0\1\46\5\0\2\45\1\0\1\176\2\0"+ "\1\50\72\0\1\177\116\0\1\200\1\201\55\0\3\202"+ "\1\203\1\202\1\204\1\205\1\206\3\202\1\0\24\202"+ "\1\207\1\210\1\202\1\211\3\202\1\212\7\202\1\213"+ "\4\202\1\203\1\202\1\206\1\203\17\202\10\0\1\53"+ "\3\214\1\56\1\0\1\57\4\0\1\61\2\0\1\53"+ "\1\214\1\62\1\63\1\64\3\0\1\215\36\0\1\66"+ "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\12\0"+ "\4\214\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+ "\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+ "\1\70\1\71\1\72\1\73\1\74\1\75\12\0\3\214"+ "\1\54\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+ "\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+ "\1\70\1\71\1\72\1\73\1\74\1\75\107\0\1\216"+ "\21\0\1\217\116\0\1\220\1\201\56\0\1\221\1\222"+ "\1\221\1\0\2\222\1\221\1\223\13\0\1\222\1\0"+ "\1\223\10\0\25\222\4\221\1\222\1\0\3\222\6\0"+ "\1\222\13\0\1\224\1\225\1\226\1\225\12\0\1\224"+ "\1\225\57\0\31\76\1\227\1\230\1\231\1\0\1\76"+ "\1\0\100\76\1\232\1\233\55\76\4\230\1\234\4\230"+ "\3\0\13\230\1\0\2\230\1\76\54\230\4\235\1\236"+ "\4\235\3\0\13\235\1\0\3\235\1\0\53\235\10\0"+ "\4\104\12\0\2\104\67\0\4\106\12\0\2\106\57\0"+ "\4\107\1\0\4\107\3\0\13\107\1\0\2\107\1\0"+ "\54\107\3\237\1\240\1\237\1\241\1\242\1\243\3\237"+ "\1\0\16\237\1\244\5\237\1\245\1\246\1\237\1\247"+ "\3\237\1\250\7\237\1\251\4\237\1\240\1\237\1\243"+ "\1\240\17\237\13\0\1\111\103\0\4\252\2\0\1\253"+ "\7\0\2\252\61\0\1\254\2\0\2\254\15\0\1\254"+ "\12\0\25\254\4\0\1\254\1\0\3\254\6\0\1\254"+ "\22\0\1\255\67\0\11\256\2\125\1\126\13\256\1\125"+ "\70\256\2\125\1\126\13\256\1\125\4\256\1\257\2\256"+ "\1\260\6\256\1\261\1\256\1\262\36\256\1\0\1\263"+ "\1\0\1\263\3\0\1\263\1\264\15\0\1\264\35\0"+ "\4\263\27\0\4\133\12\0\2\133\60\0\3\135\1\0"+ "\3\135\1\265\13\0\4\135\7\0\32\135\1\0\3\135"+ "\6\0\1\135\3\0\13\136\1\266\73\136\30\24\1\137"+ "\1\0\105\24\1\0\1\140\55\24\11\146\2\267\1\270"+ "\13\146\1\267\57\146\1\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\271"+ "\30\147\1\0\3\147\6\0\1\147\3\0\11\151\2\272"+ "\1\273\13\151\1\272\57\151\1\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\1\147\1\274\15\147\1\275\4\147"+ "\1\276\5\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\5\147\1\277\24\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\3\147\1\300\5\147\1\301\2\147"+ "\1\302\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\1\303\2\147\14\0\4\147\7\0\5\147\1\304"+ "\24\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\1\147\1\305\1\147\14\0\4\147\7\0\1\306\31\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\11\147\1\307\20\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\1\310\31\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\20\147\1\311"+ "\1\147\1\312\7\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\2\147\1\313"+ "\3\147\1\314\7\147\1\315\13\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\1\147\1\316\1\147\14\0"+ "\4\147\7\0\2\147\1\317\1\320\1\147\1\321\4\147"+ "\1\322\1\147\1\323\15\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\1\147\1\324\1\147\14\0\4\147"+ "\7\0\11\147\1\325\20\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\1\147\1\326\1\147\14\0\4\147"+ "\7\0\14\147\1\327\15\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ "\1\330\22\147\1\0\3\147\6\0\1\147\62\0\1\331"+ "\106\0\1\332\116\0\1\333\20\0\3\147\1\0\3\147"+ "\1\334\13\0\2\147\1\335\1\147\7\0\15\147\1\336"+ "\14\147\1\0\3\147\6\0\1\147\3\0\11\174\3\0"+ "\13\174\1\0\57\174\1\0\3\147\1\0\3\147\1\337"+ "\13\0\2\147\1\340\1\147\7\0\2\147\1\341\3\147"+ "\1\314\7\147\1\315\13\147\1\0\3\147\6\0\1\147"+ "\75\0\1\342\14\0\11\201\3\0\13\201\1\0\57\201"+ "\3\0\1\343\3\0\1\343\54\0\1\343\1\0\2\343"+ "\20\0\3\344\3\0\1\344\36\0\2\344\3\0\1\344"+ "\1\0\1\344\1\0\1\344\2\0\1\344\1\0\4\344"+ "\2\0\1\344\1\0\1\344\13\0\3\345\3\0\1\345"+ "\36\0\2\345\3\0\1\345\1\0\1\345\1\0\1\345"+ "\2\0\1\345\1\0\4\345\2\0\1\345\1\0\1\345"+ "\15\0\1\203\3\0\1\203\54\0\1\203\1\0\2\203"+ "\25\0\1\346\42\0\1\347\6\0\1\350\1\0\1\351"+ "\116\0\1\352\15\0\1\221\1\0\1\221\3\0\1\221"+ "\54\0\4\221\20\0\3\222\1\0\3\222\1\353\13\0"+ "\4\222\4\0\1\354\2\0\32\222\1\0\3\222\6\0"+ "\1\222\16\0\1\355\73\0\30\232\1\356\56\232\11\233"+ "\2\357\1\76\13\233\1\357\57\233\11\230\3\0\13\230"+ "\1\0\57\230\33\0\1\76\53\0\3\235\1\360\1\361"+ "\1\235\1\362\1\363\1\235\3\0\13\235\1\0\34\235"+ "\1\360\1\235\1\363\1\360\17\235\3\0\1\364\3\0"+ "\1\364\54\0\1\364\1\0\2\364\20\0\3\365\3\0"+ "\1\365\36\0\2\365\3\0\1\365\1\0\1\365\1\0"+ "\1\365\2\0\1\365\1\0\4\365\2\0\1\365\1\0"+ "\1\365\13\0\3\366\3\0\1\366\36\0\2\366\3\0"+ "\1\366\1\0\1\366\1\0\1\366\2\0\1\366\1\0"+ "\4\366\2\0\1\366\1\0\1\366\15\0\1\240\3\0"+ "\1\240\54\0\1\240\1\0\2\240\20\0\3\254\1\0"+ "\3\254\14\0\4\254\4\0\1\367\2\0\32\254\1\0"+ "\3\254\6\0\1\254\3\0\11\257\2\370\1\371\13\257"+ "\1\370\57\257\11\256\2\125\1\126\13\256\1\125\10\256"+ "\1\372\57\256\2\125\1\126\13\256\1\125\14\256\1\373"+ "\53\256\2\125\1\126\13\256\1\125\20\256\1\374\36\256"+ "\1\0\1\263\1\0\1\263\3\0\1\263\54\0\4\263"+ "\27\0\1\265\15\0\1\265\61\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\1\375\31\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\1\376\1\147\1\377\13\147\1\u0100\13\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\22\147\1\u0101\7\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ "\1\u0102\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0103\27\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\4\147\1\u0104\25\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\22\147\1\u0105\7\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\20\147"+ "\1\u0106\11\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0107\27\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\10\147\1\u0108\21\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\1\147\1\u0109\10\147\1\u010a\17\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\1\147\1\u010b\30\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ "\1\u010c\2\147\1\u010d\17\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ "\1\u010e\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\15\147\1\u010f\14\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\1\u0110\31\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\14\147\1\u0111\15\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\u0112\31\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\14\147\1\u0113\15\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\22\147\1\u0114\7\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ "\1\u0115\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0116\15\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\12\147\1\u0117\17\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\14\147\1\u0118\15\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ "\1\u0119\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\10\147\1\u011a\21\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\14\147\1\u011b\15\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\20\147\1\u011c\11\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ "\1\u011d\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\20\147\1\u011e\11\147"+ "\1\0\3\147\6\0\1\147\42\0\1\u011f\106\0\1\u0120"+ "\126\0\1\u0121\37\0\1\334\15\0\1\334\61\0\3\147"+ "\1\0\3\147\1\334\13\0\2\147\1\335\1\147\7\0"+ "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\2\147\1\u0122\27\147\1\0"+ "\3\147\6\0\1\147\13\0\1\337\15\0\1\337\61\0"+ "\3\147\1\0\3\147\1\337\13\0\2\147\1\340\1\147"+ "\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0123\15\147"+ "\1\0\3\147\6\0\1\147\76\0\1\u0124\14\0\3\u0125"+ "\3\0\1\u0125\36\0\2\u0125\3\0\1\u0125\1\0\1\u0125"+ "\1\0\1\u0125\2\0\1\u0125\1\0\4\u0125\2\0\1\u0125"+ "\1\0\1\u0125\13\0\3\u0126\3\0\1\u0126\36\0\2\u0126"+ "\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126\2\0\1\u0126"+ "\1\0\4\u0126\2\0\1\u0126\1\0\1\u0126\73\0\1\u0127"+ "\71\0\1\u0128\1\0\1\u0129\111\0\1\u012a\74\0\1\u012b"+ "\142\0\1\u012c\23\0\1\353\15\0\1\353\5\0\1\354"+ "\52\0\30\232\1\356\1\76\55\232\13\357\1\76\15\357"+ "\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\50\357\3\0"+ "\1\235\3\0\1\235\23\0\1\76\30\0\1\235\1\0"+ "\2\235\23\0\1\u0130\1\0\1\u0131\24\0\1\76\54\0"+ "\3\u0132\3\0\1\u0132\23\0\1\76\12\0\2\u0132\3\0"+ "\1\u0132\1\0\1\u0132\1\0\1\u0132\2\0\1\u0132\1\0"+ "\4\u0132\2\0\1\u0132\1\0\1\u0132\15\0\1\360\3\0"+ "\1\360\23\0\1\76\30\0\1\360\1\0\2\360\20\0"+ "\3\u0133\3\0\1\u0133\36\0\2\u0133\3\0\1\u0133\1\0"+ "\1\u0133\1\0\1\u0133\2\0\1\u0133\1\0\4\u0133\2\0"+ "\1\u0133\1\0\1\u0133\13\0\3\u0134\3\0\1\u0134\36\0"+ "\2\u0134\3\0\1\u0134\1\0\1\u0134\1\0\1\u0134\2\0"+ "\1\u0134\1\0\4\u0134\2\0\1\u0134\1\0\1\u0134\12\0"+ "\11\256\2\125\1\126\13\256\1\125\7\256\1\u0135\60\256"+ "\2\125\1\126\13\256\1\125\17\256\1\u0136\50\256\2\125"+ "\1\126\13\256\1\125\21\256\1\u0137\35\256\1\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\16\147\1\u0138\13\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\2\147\1\u0139\27\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\6\147\1\u013a\1\u013b\22\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\12\147\1\u013c\17\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u013d"+ "\17\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\5\147\1\u013e\24\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u013f"+ "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\5\147\1\u0140\24\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u0141"+ "\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\12\147\1\u0142\17\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\7\147\1\u0143\22\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\6\0"+ "\1\151\2\147\1\u0144\10\147\1\u0145\2\147\1\u0146\13\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\16\147\1\u0147\13\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\12\147\1\u0148\17\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\14\147"+ "\1\u0149\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\5\147\1\u014a\24\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\7\147\1\u014b\22\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\7\147\1\u014c\22\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ "\1\u014d\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\22\147\1\u014e\7\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\1\147\1\u014f\30\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\2\147\1\u0150\27\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ "\1\u0151\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0152\5\147"+ "\1\u0153\6\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\4\147\1\u0154\25\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\4\147\1\u0155\25\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\1\147\1\u0156\1\147"+ "\14\0\4\147\7\0\32\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ "\1\u0157\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\7\147\1\u0158\22\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\10\147\1\u0159\21\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\16\147\1\u015a\13\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\12\147"+ "\1\u015b\17\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\31\147\1\u015c\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u015d"+ "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+ "\1\147\44\0\1\u015e\106\0\1\u015f\104\0\1\u0160\50\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0161"+ "\15\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\1\147\1\u014f\1\u0162\27\147"+ "\1\0\3\147\6\0\1\147\77\0\1\u0163\13\0\3\u0164"+ "\3\0\1\u0164\36\0\2\u0164\3\0\1\u0164\1\0\1\u0164"+ "\1\0\1\u0164\2\0\1\u0164\1\0\4\u0164\2\0\1\u0164"+ "\1\0\1\u0164\73\0\1\u0165\72\0\1\u0166\102\0\1\u0167"+ "\113\0\1\u0168\123\0\1\u0169\117\0\1\u016a\12\0\13\357"+ "\1\76\14\357\1\u016b\1\233\55\357\4\u012e\1\u016c\4\u012e"+ "\2\357\1\76\13\u012e\1\357\2\u012e\1\357\54\u012e\4\u016d"+ "\1\u016e\4\u016d\2\357\1\76\13\u016d\1\357\3\u016d\1\233"+ "\53\u016d\4\0\1\u0130\1\0\1\u0131\101\0\3\u0132\3\0"+ "\1\u0132\36\0\2\u0132\3\0\1\u0132\1\0\1\u0132\1\0"+ "\1\u0132\2\0\1\u0132\1\0\4\u0132\2\0\1\u0132\1\0"+ "\1\u0132\13\0\3\u016f\3\0\1\u016f\36\0\2\u016f\3\0"+ "\1\u016f\1\0\1\u016f\1\0\1\u016f\2\0\1\u016f\1\0"+ "\4\u016f\2\0\1\u016f\1\0\1\u016f\13\0\3\u0170\3\0"+ "\1\u0170\36\0\2\u0170\3\0\1\u0170\1\0\1\u0170\1\0"+ "\1\u0170\2\0\1\u0170\1\0\4\u0170\2\0\1\u0170\1\0"+ "\1\u0170\12\0\11\256\2\125\1\126\13\256\1\125\11\256"+ "\1\u0171\56\256\2\125\1\126\13\256\1\125\4\256\1\u0172"+ "\4\256\1\u0173\10\256\1\u0174\45\256\2\125\1\126\13\256"+ "\1\125\16\256\1\u0175\40\256\1\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\5\147\1\u0176\24\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\6\0\1\151\2\147\1\u0177\27\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\4\147\1\u0178\25\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\24\147\1\u0179"+ "\5\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\1\147\1\u017a\1\147\14\0\4\147\7\0\32\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\7\147\1\u017b\22\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\4\147\1\u017c\25\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u017d"+ "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\6\147\1\u017e\23\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u017f"+ "\13\0\2\147\1\u0180\1\147\7\0\32\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\7\147\1\u0181\22\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ "\1\u0182\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\3\147\1\u0183\26\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\14\147\1\u0184\15\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\12\147\1\u0185\17\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+ "\1\u0186\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\12\147\1\u0187\17\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\10\147\1\u0188\21\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\1\u0189\2\147\14\0"+ "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u018a"+ "\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\4\147\1\u018b\25\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\23\147\1\u018c\6\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\16\147\1\u018d\13\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u018e"+ "\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\11\147\1\u018f\20\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\7\147\1\u0190\22\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\14\147\1\u0191\15\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\17\147\1\u0192"+ "\12\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\15\147\1\u0193\14\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\12\147\1\u0194\17\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\7\147\1\u0195\22\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u0196"+ "\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\1\u0197\31\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\24\147\1\u0198\5\147\1\0\3\147\6\0\1\147"+ "\44\0\1\u0199\46\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\2\147\1\u019a\27\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ "\1\u019b\22\147\1\0\3\147\6\0\1\147\24\0\1\u019c"+ "\133\0\1\u019d\106\0\1\u019e\101\0\1\u019f\106\0\1\u01a0"+ "\104\0\1\u01a1\70\0\1\u01a2\65\0\11\u016b\2\u01a3\1\u01a4"+ "\13\u016b\1\u01a3\1\u01a5\56\u016b\11\u012e\2\357\1\76\13\u012e"+ "\1\357\57\u012e\11\233\2\357\1\76\13\233\1\357\3\233"+ "\1\357\53\233\3\u016d\1\u01a6\1\u01a7\1\u016d\1\u01a8\1\u01a9"+ "\1\u016d\2\357\1\76\13\u016d\1\357\34\u016d\1\u01a6\1\u016d"+ "\1\u01a9\1\u01a6\17\u016d\1\0\3\u01aa\3\0\1\u01aa\36\0"+ "\2\u01aa\3\0\1\u01aa\1\0\1\u01aa\1\0\1\u01aa\2\0"+ "\1\u01aa\1\0\4\u01aa\2\0\1\u01aa\1\0\1\u01aa\12\0"+ "\11\256\2\125\1\126\13\256\1\125\4\256\1\u01ab\4\256"+ "\1\u01ac\45\256\11\u0172\2\u01ad\1\u01ae\13\u0172\1\u01ad\57\u0172"+ "\11\256\2\125\1\126\13\256\1\125\12\256\1\u01af\55\256"+ "\2\125\1\126\13\256\1\125\23\256\1\u01b0\40\256\1\u01b1"+ "\3\256\2\125\1\126\13\256\1\125\57\256\1\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b2\6\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\3\147\1\u01b3\26\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\14\147\1\u01b4\15\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+ "\1\u01b5\22\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b6\6\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\17\147\1\u01b7\12\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\7\147\1\u01b8\22\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\u01b9"+ "\31\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\15\147\1\u01ba\14\147\1\0"+ "\3\147\6\0\1\147\5\0\1\u01bb\2\0\2\u01bb\1\0"+ "\1\u017f\7\0\1\u01bc\3\0\1\u01bb\1\0\1\u017f\10\0"+ "\25\u01bb\4\0\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0"+ "\1\147\1\u01bb\1\147\1\0\2\u01bb\1\147\1\u017f\7\0"+ "\1\u01bc\3\0\1\u01bb\1\147\1\u0180\1\147\7\0\25\u01bb"+ "\4\147\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01bd\6\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\4\147\1\u01be\25\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\12\147\1\u01bf\17\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ "\1\u01c0\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\1\u01c1\31\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\2\147\1\u01c2\27\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\14\147\1\u01c3\15\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\u01c4\31\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\14\147\1\u01c5\15\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\3\147\1\u01c6\26\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ "\1\u01c7\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\17\147\1\u01c8\12\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\20\147\1\u01c9\11\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\4\147\1\u01ca\25\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+ "\1\u01cb\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\1\u01cc\13\0\2\147\1\u01cd\1\147\7\0"+ "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\7\147\1\u01ce\22\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\4\147\1\u01cf\25\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\21\147\1\u01d0\10\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u01d1"+ "\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\7\147\1\u01d2\22\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\337"+ "\13\0\2\147\1\340\1\147\7\0\15\147\1\u01d3\14\147"+ "\1\0\3\147\6\0\1\147\24\0\1\u01d4\130\0\1\u01d5"+ "\106\0\1\u01d6\111\0\1\u01d7\101\0\1\u01d8\106\0\1\u01d9"+ "\66\0\1\u01da\65\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u01dc"+ "\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\50\u01a3\30\u01a4\1\u01df"+ "\1\u01e0\1\u01e1\1\u01e2\1\232\1\u01a4\1\232\50\u01a4\11\u016b"+ "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\357\55\u016b\3\233"+ "\1\u016d\3\233\1\u016d\1\233\2\357\1\76\13\233\1\357"+ "\3\233\1\357\30\233\1\u016d\1\233\2\u016d\23\233\1\u01e3"+ "\1\233\1\u01e4\2\233\2\357\1\76\13\233\1\357\3\233"+ "\1\357\54\233\3\u01e5\3\233\1\u01e5\1\233\2\357\1\76"+ "\13\233\1\357\3\233\1\357\12\233\2\u01e5\3\233\1\u01e5"+ "\1\233\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5"+ "\2\233\1\u01e5\1\233\1\u01e5\15\233\1\u01a6\3\233\1\u01a6"+ "\1\233\2\357\1\76\13\233\1\357\3\233\1\357\30\233"+ "\1\u01a6\1\233\2\u01a6\17\233\1\0\3\235\3\0\1\235"+ "\36\0\2\235\3\0\1\235\1\0\1\235\1\0\1\235"+ "\2\0\1\235\1\0\4\235\2\0\1\235\1\0\1\235"+ "\12\0\11\u01ab\2\u01e6\1\u01e7\13\u01ab\1\u01e6\57\u01ab\11\256"+ "\2\125\1\126\13\256\1\125\12\256\1\u01e8\55\256\2\125"+ "\1\126\13\256\1\125\13\256\1\u01e9\54\256\2\125\1\126"+ "\13\256\1\125\21\256\1\u01ea\46\256\2\125\1\126\13\256"+ "\1\125\11\256\1\u01eb\45\256\1\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\7\147\1\u01ec\22\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\4\147\1\u01ed\25\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+ "\1\u01ee\7\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\4\147\1\u01ef\25\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\7\147\1\u01f0\22\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\7\147\1\u01f1\22\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+ "\1\u01f2\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\1\u01f3\2\147\14\0\4\147\7\0\32\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u01f4"+ "\13\0\2\147\1\u01f5\1\147\7\0\32\147\1\0\3\147"+ "\6\0\1\147\4\0\3\u01bb\1\0\3\u01bb\1\u01f6\3\0"+ "\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\3\0\4\u01bb\7\0"+ "\32\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\u01fa\1\0"+ "\4\u01fa\3\0\2\u01fa\2\0\10\u01fa\7\0\32\u01fa\1\0"+ "\3\u01fa\6\0\1\u01fa\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\15\147\1\u01fb\14\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\5\147\1\u01fc\24\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\6\0\1\151\32\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\15\147\1\u01fd\14\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\5\147\1\u01fe\24\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\3\147"+ "\1\u01ff\26\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\16\147\1\u0200\13\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\13\147\1\u0201\16\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\12\147\1\u0202\17\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ "\1\u0203\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\1\u0204\13\0\2\147\1\u0205\1\147\7\0"+ "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\1\147\1\u0206\1\147\14\0\4\147\7\0\32\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\24\147\1\u0207\5\147\1\0\3\147\6\0"+ "\1\147\5\0\1\u0208\2\0\2\u0208\1\0\1\u01cc\13\0"+ "\1\u0208\1\0\1\u01cc\10\0\25\u0208\4\0\1\u0208\1\0"+ "\3\u0208\6\0\1\u0208\4\0\1\147\1\u0208\1\147\1\0"+ "\2\u0208\1\147\1\u01cc\13\0\1\u0208\1\147\1\u01cd\1\147"+ "\7\0\25\u0208\4\147\1\u0208\1\0\3\u0208\6\0\1\u0208"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+ "\1\u0209\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\1\u020a\13\0\2\147\1\u020b\1\147\7\0"+ "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\1\334\13\0\2\147\1\335\1\147\7\0\15\147"+ "\1\u020c\14\147\1\0\3\147\6\0\1\147\13\0\4\u01d4"+ "\12\0\2\u01d4\6\0\1\u020d\125\0\1\u020e\106\0\1\u020f"+ "\74\0\1\u0210\111\0\1\u0211\145\0\1\u0212\11\0\4\u0213"+ "\12\0\2\u0213\57\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u0214"+ "\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\63\u01a3\1\u01a4\14\u01a3"+ "\1\u0215\1\u016b\55\u01a3\4\u01dd\1\u0216\4\u01dd\2\u01a3\1\u01a4"+ "\13\u01dd\1\u01a3\1\u0217\1\u01dd\1\u01a3\54\u01dd\4\u0218\1\u0219"+ "\4\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\2\u0218\1\u016b"+ "\53\u0218\30\u01a4\1\u01df\1\u021b\1\u01e1\1\u01e2\1\232\1\u01a4"+ "\1\232\100\u01a4\1\u021c\1\u016b\55\u01a4\4\u01e1\1\u021d\4\u01e1"+ "\3\232\13\u01e1\1\232\1\u021e\1\u01e1\1\u01a4\54\u01e1\4\u021f"+ "\1\u0220\4\u021f\3\232\13\u021f\1\232\1\u0221\2\u021f\1\232"+ "\53\u021f\4\233\1\u01e3\1\233\1\u01e4\2\233\2\357\1\76"+ "\13\233\1\357\60\233\3\u01e5\3\233\1\u01e5\1\233\2\357"+ "\1\76\13\233\1\357\16\233\2\u01e5\3\233\1\u01e5\1\233"+ "\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5\2\233"+ "\1\u01e5\1\233\1\u01e5\13\233\3\u0222\3\233\1\u0222\1\233"+ "\2\357\1\76\13\233\1\357\16\233\2\u0222\3\233\1\u0222"+ "\1\233\1\u0222\1\233\1\u0222\2\233\1\u0222\1\233\4\u0222"+ "\2\233\1\u0222\1\233\1\u0222\12\233\11\256\2\125\1\126"+ "\13\256\1\125\13\256\1\u0223\54\256\2\125\1\126\13\256"+ "\1\125\14\256\1\u0224\53\256\2\125\1\126\13\256\1\125"+ "\4\256\1\u0225\63\256\2\125\1\126\13\256\1\125\12\256"+ "\1\u0226\44\256\1\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\5\147\1\u0227\24\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\1\u0228\13\0\2\147\1\u0228"+ "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0229"+ "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\14\147\1\u022a\15\147\1\0"+ "\3\147\6\0\1\147\3\0\2\u022b\1\u022c\2\u022b\2\u022c"+ "\1\u022b\1\u01f4\3\0\10\u022b\1\u022c\1\u022b\1\u01f4\1\0"+ "\7\u022b\25\u022c\4\u022b\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c"+ "\4\u022b\1\u022d\1\u022c\1\u022d\1\u022b\2\u022c\1\u022d\1\u01f4"+ "\3\0\10\u022b\1\u022c\1\u022d\1\u01f5\1\147\7\u022b\25\u022c"+ "\4\u022d\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c\3\u022b\10\0"+ "\1\u01f6\3\0\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\5\0"+ "\1\u01f6\62\0\1\u01bb\2\0\2\u01bb\1\0\1\u01f7\13\0"+ "\1\u01bb\1\0\1\u01f7\10\0\25\u01bb\4\0\1\u01bb\1\0"+ "\3\u01bb\6\0\1\u01bb\13\0\1\u01f8\6\0\1\u022e\6\0"+ "\1\u01f8\61\0\3\u022f\1\0\4\u022f\3\0\2\u022f\2\0"+ "\10\u022f\7\0\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0"+ "\3\u01fa\1\0\4\u01fa\3\0\2\u01fa\2\0\1\u01fa\1\u0230"+ "\6\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa\4\0"+ "\3\147\1\0\3\147\1\u0231\13\0\2\147\1\u0232\1\147"+ "\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\6\147\1\u0233\23\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\7\147\1\u0234\22\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\1\147\1\u0235\30\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+ "\1\u0236\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0237\27\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\14\147\1\u0238\15\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\5\147\1\u0239\24\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+ "\1\u023a\24\147\1\0\3\147\6\0\1\147\3\0\2\u023b"+ "\1\u023c\2\u023b\2\u023c\1\u023b\1\u0204\3\0\10\u023b\1\u023c"+ "\1\u023b\1\u0204\1\0\7\u023b\25\u023c\4\u023b\1\u023c\1\u023b"+ "\3\u023c\6\u023b\1\u023c\4\u023b\1\u023d\1\u023c\1\u023d\1\u023b"+ "\2\u023c\1\u023d\1\u0204\3\0\10\u023b\1\u023c\1\u023d\1\u0205"+ "\1\147\7\u023b\25\u023c\4\u023d\1\u023c\1\u023b\3\u023c\6\u023b"+ "\1\u023c\3\u023b\1\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\24\147\1\u023e\5\147\1\0\3\147\6\0\1\147"+ "\4\0\3\147\1\0\3\147\1\u023f\13\0\2\147\1\u0240"+ "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ "\3\u0208\1\0\3\u0208\1\u0241\7\0\1\u0242\3\0\4\u0208"+ "\7\0\32\u0208\1\0\3\u0208\6\0\1\u0208\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0243\14\147"+ "\1\0\3\147\6\0\1\147\3\0\1\u0244\1\u0245\1\u0244"+ "\1\u0245\3\u0244\1\u0245\1\u020a\3\0\12\u0244\1\u020a\1\0"+ "\34\u0244\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247"+ "\1\u0246\1\u020a\3\0\10\u0244\2\u0247\1\u020b\1\147\7\u0244"+ "\25\u0247\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244"+ "\53\0\1\u0248\106\0\1\u0249\140\0\1\u024a\44\0\1\u024b"+ "\62\0\1\u024c\77\0\4\u0213\12\0\2\u0213\6\0\1\u024d"+ "\50\0\13\357\1\76\14\357\1\u01a3\1\u012d\1\u024e\1\u024f"+ "\53\357\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\u01a3"+ "\55\u016b\11\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\62\u01dd"+ "\1\u0216\4\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\1\u024e"+ "\1\u01a3\54\u01dd\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+ "\2\u016b\1\u01a3\53\u016b\3\u0218\1\u0250\1\u0251\1\u0218\1\u0252"+ "\1\u0253\1\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\33\u0218"+ "\1\u0250\1\u0218\1\u0253\1\u0250\17\u0218\11\u016b\2\u01a3\1\u01a4"+ "\13\u016b\1\u01a3\1\u01a5\1\357\1\u016b\1\u01a3\53\u016b\30\76"+ "\1\u01a4\1\u012d\1\u0254\1\u0255\53\76\30\232\1\356\1\u01a4"+ "\55\232\11\u01e1\3\232\13\u01e1\1\232\1\u021e\62\u01e1\1\u021d"+ "\4\u01e1\3\232\13\u01e1\1\232\1\u021e\1\u0254\1\u01a4\54\u01e1"+ "\30\232\1\356\2\232\1\u01a4\53\232\3\u021f\1\u0256\1\u0257"+ "\1\u021f\1\u0258\1\u0259\1\u021f\3\232\13\u021f\1\232\1\u0221"+ "\33\u021f\1\u0256\1\u021f\1\u0259\1\u0256\17\u021f\30\232\1\356"+ "\1\76\1\232\1\u01a4\53\232\1\233\3\u025a\3\233\1\u025a"+ "\1\233\2\357\1\76\13\233\1\357\16\233\2\u025a\3\233"+ "\1\u025a\1\233\1\u025a\1\233\1\u025a\2\233\1\u025a\1\233"+ "\4\u025a\2\233\1\u025a\1\233\1\u025a\12\233\11\256\2\125"+ "\1\126\13\256\1\125\14\256\1\u025b\53\256\2\125\1\126"+ "\13\256\1\125\15\256\1\u025c\41\256\11\u0225\2\u025d\1\u025e"+ "\13\u0225\1\u025d\57\u0225\11\256\2\125\1\126\13\256\1\125"+ "\13\256\1\u025f\43\256\1\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\6\147\1\u0260\23\147\1\0\3\147\6\0"+ "\1\147\3\0\13\u0228\1\0\73\u0228\1\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\2\147\1\u0261\27\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\15\147\1\u0262\14\147\1\0\3\147\6\0"+ "\1\147\3\0\11\u022b\3\0\13\u022b\1\0\60\u022b\3\u022c"+ "\1\u022b\3\u022c\1\u0263\3\0\2\u01f4\6\u022b\3\u022c\1\u0264"+ "\7\u022b\32\u022c\1\u022b\3\u022c\6\u022b\1\u022c\4\u022b\3\u022d"+ "\1\u022b\3\u022d\1\u022b\3\0\10\u022b\3\u022d\1\147\7\u022b"+ "\32\u022d\1\u022b\3\u022d\6\u022b\1\u022d\3\u022b\10\0\1\u022e"+ "\5\0\1\u01f8\7\0\1\u022e\61\0\3\u022f\1\0\4\u022f"+ "\3\0\2\u022f\2\0\1\u022f\1\u0265\6\u022f\7\0\32\u022f"+ "\1\0\3\u022f\6\0\1\u022f\4\0\1\u01fa\1\u0266\1\u01fa"+ "\1\0\2\u0266\1\u01fa\1\u0230\3\0\2\u01fa\2\0\1\u01fa"+ "\1\u0230\2\u01fa\1\u0266\1\u01fa\1\u0230\1\u01fa\7\0\25\u0266"+ "\4\u01fa\1\u0266\1\0\3\u0266\6\0\1\u0266\5\0\1\u0267"+ "\2\0\2\u0267\1\0\1\u0231\13\0\1\u0267\1\0\1\u0231"+ "\10\0\25\u0267\4\0\1\u0267\1\0\3\u0267\6\0\1\u0267"+ "\4\0\1\147\1\u0267\1\147\1\0\2\u0267\1\147\1\u0231"+ "\13\0\1\u0267\1\147\1\u0232\1\147\7\0\25\u0267\4\147"+ "\1\u0267\1\0\3\u0267\6\0\1\u0267\4\0\3\147\1\0"+ "\3\147\1\u0268\13\0\2\147\1\u0269\1\147\6\0\1\151"+ "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0\32\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\1\u026c\13\0\2\147\1\u026d\1\147\7\0\32\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\5\147\1\u026e\24\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\2\147\1\u026f\27\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0270"+ "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\4\147\1\u0271\25\147\1\0"+ "\3\147\6\0\1\147\3\0\11\u023b\3\0\13\u023b\1\0"+ "\60\u023b\3\u023c\1\u023b\3\u023c\1\u0272\3\0\1\u0204\7\u023b"+ "\3\u023c\1\u0273\7\u023b\32\u023c\1\u023b\3\u023c\6\u023b\1\u023c"+ "\4\u023b\3\u023d\1\u023b\3\u023d\1\u023b\3\0\10\u023b\3\u023d"+ "\1\147\7\u023b\32\u023d\1\u023b\3\u023d\6\u023b\1\u023d\3\u023b"+ "\2\0\1\u0274\2\0\2\u0274\1\0\1\u023f\7\0\1\u0275"+ "\3\0\1\u0274\1\0\1\u023f\10\0\25\u0274\4\0\1\u0274"+ "\1\0\3\u0274\6\0\1\u0274\4\0\1\147\1\u0276\1\147"+ "\1\0\2\u0276\1\147\1\u023f\7\0\1\u0275\3\0\1\u0276"+ "\1\147\1\u0240\1\147\7\0\25\u0276\4\147\1\u0276\1\0"+ "\3\u0276\6\0\1\u0276\13\0\1\u0241\7\0\1\u0242\5\0"+ "\1\u0241\61\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+ "\10\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\3\0"+ "\11\u0244\3\0\13\u0244\1\0\60\u0244\1\u0245\1\u0244\1\u0245"+ "\3\u0244\1\u0245\1\u0278\3\0\12\u0244\1\u0278\1\0\34\u0244"+ "\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247\1\u0246"+ "\1\u0278\3\0\10\u0244\2\u0247\1\u0279\1\147\7\u0244\25\u0247"+ "\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\4\u0244\3\u0247"+ "\1\u0244\3\u0247\1\u0244\3\0\10\u0244\3\u0247\1\147\7\u0244"+ "\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244\54\0\1\u027a"+ "\106\0\1\u027b\51\0\1\u027c\151\0\1\u027d\22\0\1\u027e"+ "\1\0\4\u024e\1\u027f\4\u024e\2\357\1\76\13\u024e\1\357"+ "\1\u024e\1\u0280\1\u024e\1\u0281\1\u012e\1\u024e\1\u012e\50\u024e"+ "\4\u0282\1\u0283\4\u0282\2\357\1\76\13\u0282\1\357\1\u0282"+ "\1\u012d\1\u0284\1\u012f\1\u016d\1\u0282\1\u016d\50\u0282\3\u016b"+ "\1\u0218\3\u016b\1\u0218\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+ "\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0218\1\u016b\2\u0218\23\u016b"+ "\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+ "\1\u01a5\2\u016b\1\u01a3\54\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+ "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\2\u016b\1\u01a3\12\u016b"+ "\2\u0287\3\u016b\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b"+ "\1\u0287\1\u016b\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\15\u016b"+ "\1\u0250\3\u016b\1\u0250\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+ "\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0250\1\u016b\2\u0250\17\u016b"+ "\4\u0254\1\u0288\4\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289"+ "\1\u0254\1\u028a\1\230\1\u0254\1\230\50\u0254\4\u028b\1\u028c"+ "\4\u028b\3\76\13\u028b\1\76\1\u028b\1\227\1\u028d\1\231"+ "\1\235\1\u028b\1\235\50\u028b\3\232\1\u021f\3\232\1\u021f"+ "\20\232\1\356\2\232\1\u01a4\30\232\1\u021f\1\232\2\u021f"+ "\23\232\1\u028e\1\232\1\u028f\21\232\1\356\2\232\1\u01a4"+ "\54\232\3\u0290\3\232\1\u0290\20\232\1\356\2\232\1\u01a4"+ "\12\232\2\u0290\3\232\1\u0290\1\232\1\u0290\1\232\1\u0290"+ "\2\232\1\u0290\1\232\4\u0290\2\232\1\u0290\1\232\1\u0290"+ "\15\232\1\u0256\3\232\1\u0256\20\232\1\356\2\232\1\u01a4"+ "\30\232\1\u0256\1\232\2\u0256\17\232\1\233\3\u016d\3\233"+ "\1\u016d\1\233\2\357\1\76\13\233\1\357\16\233\2\u016d"+ "\3\233\1\u016d\1\233\1\u016d\1\233\1\u016d\2\233\1\u016d"+ "\1\233\4\u016d\2\233\1\u016d\1\233\1\u016d\12\233\11\256"+ "\2\125\1\126\13\256\1\125\15\256\1\u0291\52\256\2\125"+ "\1\126\13\256\1\125\4\256\1\u0292\63\256\2\125\1\126"+ "\13\256\1\125\14\256\1\u0293\42\256\1\0\3\147\1\0"+ "\3\147\1\u0294\13\0\2\147\1\u0295\1\147\6\0\1\151"+ "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\15\147\1\u0296\14\147\1\0"+ "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\7\147\1\u0243\22\147\1\0\3\147\6\0"+ "\1\147\3\0\10\u022b\1\u0263\3\0\2\u01f4\10\u022b\1\u0263"+ "\1\0\57\u022b\1\0\3\u0264\1\0\3\u0264\1\u0297\3\0"+ "\2\u0298\6\0\4\u0264\7\0\32\u0264\1\0\3\u0264\6\0"+ "\1\u0264\4\0\3\u022f\1\0\3\u022f\1\u0265\3\0\2\u022f"+ "\1\u01f8\1\0\1\u022f\1\u0265\4\u022f\1\u0265\1\u022f\7\0"+ "\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0\3\u0266\1\0"+ "\3\u0266\1\u0299\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a"+ "\1\u0230\2\u01fa\4\u0266\7\0\32\u0266\1\0\3\u0266\6\0"+ "\1\u0266\4\0\3\u0267\1\0\3\u0267\1\u029b\3\0\1\u0231"+ "\3\0\1\u029c\3\0\4\u0267\7\0\32\u0267\1\0\3\u0267"+ "\6\0\1\u0267\3\0\2\u029d\1\u029e\2\u029d\2\u029e\1\u029d"+ "\1\u0268\3\0\10\u029d\1\u029e\1\u029d\1\u0268\1\0\7\u029d"+ "\25\u029e\4\u029d\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\4\u029d"+ "\1\u029f\1\u029e\1\u029f\1\u029d\2\u029e\1\u029f\1\u0268\3\0"+ "\10\u029d\1\u029e\1\u029f\1\u0269\1\147\7\u029d\25\u029e\4\u029f"+ "\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\3\u029d\10\0\1\u026a"+ "\15\0\1\u026a\12\0\1\u02a0\5\0\1\u02a1\40\0\3\147"+ "\1\0\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0"+ "\2\147\1\u02a2\5\147\1\u02a3\21\147\1\0\3\147\6\0"+ "\1\147\5\0\1\u02a4\2\0\2\u02a4\1\0\1\u026c\13\0"+ "\1\u02a4\1\0\1\u026c\10\0\25\u02a4\4\0\1\u02a4\1\0"+ "\3\u02a4\6\0\1\u02a4\4\0\1\147\1\u02a4\1\147\1\0"+ "\2\u02a4\1\147\1\u026c\13\0\1\u02a4\1\147\1\u026d\1\147"+ "\7\0\25\u02a4\4\147\1\u02a4\1\0\3\u02a4\6\0\1\u02a4"+ "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\6\147"+ "\1\u02a5\23\147\1\0\3\147\6\0\1\147\4\0\3\147"+ "\1\0\3\147\14\0\4\147\7\0\7\147\1\u02a6\22\147"+ "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+ "\14\0\4\147\7\0\7\147\1\u02a7\22\147\1\0\3\147"+ "\6\0\1\147\4\0\3\147\1\0\3\147\1\u02a8\13\0"+ "\2\147\1\u02a9\1\147\7\0\32\147\1\0\3\147\6\0"+ "\1\147\3\0\10\u023b\1\u0272\3\0\1\u0204\11\u023b\1\u0272"+ "\1\0\57\u023b\1\0\3\u0273\1\0\3\u0273\1\u02aa\3\0"+ "\1\u02ab\7\0\4\u0273\7\0\32\u0273\1\0\3\u0273\6\0"+ "\1\u0273\4\0\3\u0274\1\0\3\u0274\1\u02ac\3\0\1\u02ad"+ "\1\0\1\u02ae\1\0\1\u02af\3\0\2\u0274\1\u02b0\1\u0274"+ "\7\0\32\u0274\1\0\3\u0274\6\0\1\u0274\4\0\3\u02b1"+ "\1\0\4\u02b1\3\0\2\u02b1\2\0\10\u02b1\7\0\32\u02b1"+ "\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0276\1\0\3\u0276"+ "\1\u02ac\3\0\1\u02ad\1\0\1\u02ae\1\0\1\u02af\3\0"+ "\2\u0276\1\u02b2\1\u0276\7\0\32\u0276\1\0\3\u0276\6\0"+ "\1\u0276\4\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+ "\1\u0277\1\u02b3\6\u0277\7\0\32\u0277\1\0\3\u0277\6\0"+ "\1\u0277\3\0\10\u0244\1\u0278\3\0\12\u0244\1\u0278\1\0"+ "\60\u0244\3\u0247\1\u0244\3\u0247\1\u0278\3\0\10\u0244\2\u0247"+ "\1\u0279\1\147\7\u0244\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247"+ "\3\u0244\46\0\1\u02b4\106\0\1\u02b5\77\0\1\u02b6\66\0"+ "\1\u02b7\67\0\11\u024e\2\357\1\76\13\u024e\1\357\1\u024e"+ "\1\u0280\1\u012e\1\u0281\1\u012e\1\u024e\1\u012e\54\u024e\1\u027f"+ "\4\u024e\2\357\1\76\13\u024e\1\357\1\u01dd\1\u012e\1\357"+ "\54\u024e\4\u0284\1\u02b8\4\u0284\2\357\1\76\13\u0284\1\357"+ "\2\u0284\1\u0282\1\u012e\53\u0284\13\357\1\76\15\357\1\u012d"+ "\1\u012e\1\u024f\1\233\1\357\1\233\50\357\3\u0282\1\u02b9"+ "\1\u02ba\1\u0282\1\u02bb\1\u02bc\1\u0282\2\357\1\76\13\u0282"+ "\1\357\1\u0282\1\u012d\1\u0284\1\u02bd\1\u016d\1\u0282\1\u016d"+ "\25\u0282\1\u02b9\1\u0282\1\u02bc\1\u02b9\17\u0282\4\u012e\1\u016c"+ "\4\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e"+ "\53\u012e\4\u016b\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4"+ "\13\u016b\1\u01a3\1\u01a5\57\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+ "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0287\3\u016b"+ "\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b\1\u0287\1\u016b"+ "\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\13\u016b\3\u02be\3\u016b"+ "\1\u02be\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b"+ "\2\u02be\3\u016b\1\u02be\1\u016b\1\u02be\1\u016b\1\u02be\2\u016b"+ "\1\u02be\1\u016b\4\u02be\2\u016b\1\u02be\1\u016b\1\u02be\12\u016b"+ "\11\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289\1\230\1\u028a"+ "\1\230\1\u0254\1\230\54\u0254\1\u0288\4\u0254\3\76\13\u0254"+ "\1\76\1\u01e1\1\u012e\1\76\54\u0254\4\u028d\1\u02bf\4\u028d"+ "\3\0\13\u028d\1\0\2\u028d\1\u028b\1\230\53\u028d\31\76"+ "\1\227\1\230\1\u0255\1\0\1\76\1\0\50\76\3\u028b"+ "\1\u02c0\1\u02c1\1\u028b\1\u02c2\1\u02c3\1\u028b\3\76\13\u028b"+ "\1\76\1\u028b\1\227\1\u028d\1\u02c4\1\235\1\u028b\1\235"+ "\25\u028b\1\u02c0\1\u028b\1\u02c3\1\u02c0\17\u028b\4\230\1\234"+ "\4\230\3\0\13\230\1\0\2\230\1\76\1\u0254\53\230"+ "\4\232\1\u028e\1\232\1\u028f\21\232\1\356\57\232\3\u0290"+ "\3\232\1\u0290\20\232\1\356\15\232\2\u0290\3\232\1\u0290"+ "\1\232\1\u0290\1\232\1\u0290\2\232\1\u0290\1\232\4\u0290"+ "\2\232\1\u0290\1\232\1\u0290\13\232\3\u02c5\3\232\1\u02c5"+ "\20\232\1\356\15\232\2\u02c5\3\232\1\u02c5\1\232\1\u02c5"+ "\1\232\1\u02c5\2\232\1\u02c5\1\232\4\u02c5\2\232\1\u02c5"+ "\1\232\1\u02c5\12\232\11\256\2\125\1\126\13\256\1\125"+ "\4\256\1\u02c6\52\256\11\u0292\2\u02c7\1\u02c8\13\u0292\1\u02c7"+ "\57\u0292\11\256\2\125\1\126\13\256\1\125\15\256\1\u02c9"+ "\41\256\2\u02ca\1\u02cb\2\u02ca\2\u02cb\1\u02ca\1\u0294\3\0"+ "\10\u02ca\1\u02cb\1\u02ca\1\u0294\1\0\7\u02ca\25\u02cb\4\u02ca"+ "\1\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb\4\u02ca\1\u02cc\1\u02cb"+ "\1\u02cc\1\u02ca\2\u02cb\1\u02cc\1\u0294\3\0\10\u02ca\1\u02cb"+ "\1\u02cc\1\u0295\1\147\7\u02ca\25\u02cb\4\u02cc\1\u02cb\1\u02ca"+ "\3\u02cb\6\u02ca\1\u02cb\3\u02ca\1\0\3\147\1\0\3\147"+ "\1\u02cd\13\0\2\147\1\u02cd\1\147\7\0\32\147\1\0"+ "\3\147\6\0\1\147\13\0\1\u0297\3\0\2\u0298\10\0"+ "\1\u0297\62\0\1\u0264\2\0\2\u0264\1\0\1\u0298\13\0"+ "\1\u0264\1\0\1\u0298\10\0\25\u0264\4\0\1\u0264\1\0"+ "\3\u0264\6\0\1\u0264\4\0\3\u01fa\1\0\3\u01fa\1\u0299"+ "\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a\1\u0230\4\u01fa"+ "\1\u0299\1\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa"+ "\4\0\3\u02ce\1\0\4\u02ce\3\0\2\u02ce\2\0\1\u02ce"+ "\1\u02cf\6\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+ "\13\0\1\u029b\3\0\1\u0231\3\0\1\u029c\5\0\1\u029b"+ "\61\0\3\u02d0\1\0\4\u02d0\3\0\2\u02d0\2\0\10\u02d0"+ "\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\11\u029d"+ "\3\0\13\u029d\1\0\60\u029d\3\u029e\1\u029d\3\u029e\1\u02d1"+ "\3\0\2\u0268\6\u029d\3\u029e\1\u02d2\7\u029d\32\u029e\1\u029d"+ "\3\u029e\6\u029d\1\u029e\4\u029d\3\u029f\1\u029d\3\u029f\1\u029d"+ "\3\0\10\u029d\3\u029f\1\147\7\u029d\32\u029f\1\u029d\3\u029f"+ "\6\u029d\1\u029f\3\u029d\43\0\1\u02d3\116\0\1\u02d4\34\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u02d5"+ "\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+ "\3\147\14\0\4\147\7\0\14\147\1\u02d6\15\147\1\0"+ "\3\147\6\0\1\147\4\0\3\u02a4\1\0\3\u02a4\1\u02d7"+ "\13\0\4\u02a4\7\0\32\u02a4\1\0\3\u02a4\6\0\1\u02a4"+ "\4\0\3\147\1\0\3\147\1\u02d8\13\0\2\147\1\u02d9"+ "\1\147\6\0\1\151\32\147\1\0\3\147\6\0\1\147"+ "\3\0\2\u02da\1\u02db\2\u02da\2\u02db\1\u02da\1\u02a8\3\0"+ "\10\u02da\1\u02db\1\u02da\1\u02a8\1\0\7\u02da\25\u02db\4\u02da"+ "\1\u02db\1\u02da\3\u02db\6\u02da\1\u02db\4\u02da\1\u02dc\1\u02db"+ "\1\u02dc\1\u02da\2\u02db\1\u02dc\1\u02a8\3\0\10\u02da\1\u02db"+ "\1\u02dc\1\u02a9\1\147\7\u02da\25\u02db\4\u02dc\1\u02db\1\u02da"+ "\3\u02db\6\u02da\1\u02db\3\u02da\10\0\1\u02aa\3\0\1\u02ab"+ "\11\0\1\u02aa\62\0\1\u0273\2\0\2\u0273\1\0\1\u02ab"+ "\13\0\1\u0273\1\0\1\u02ab\10\0\25\u0273\4\0\1\u0273"+ "\1\0\3\u0273\6\0\1\u0273\13\0\1\u02ac\3\0\1\u02ad"+ "\1\0\1\u02ae\1\0\1\u02af\5\0\1\u02ac\62\0\1\u0274"+ "\2\0\2\u0274\1\0\1\u02ad\13\0\1\u0274\1\0\1\u02ad"+ "\10\0\25\u0274\4\0\1\u0274\1\0\3\u0274\6\0\1\u0274"+ "\13\0\1\u02ae\6\0\1\u02dd\6\0\1\u02ae\61\0\3\u02de"+ "\1\0\4\u02de\3\0\2\u02de\2\0\10\u02de\7\0\32\u02de"+ "\1\0\3\u02de\6\0\1\u02de\4\0\3\u02b1\1\0\4\u02b1"+ "\3\0\2\u02b1\2\0\1\u02b1\1\u02df\6\u02b1\7\0\32\u02b1"+ "\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0277\1\0\3\u0277"+ "\1\u02b3\3\0\2\u0277\2\0\1\u0277\1\u02b3\4\u0277\1\u02b3"+ "\1\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\110\0"+ "\1\u02e0\106\0\1\u02e1\64\0\1\u02e2\23\0\3\u0284\1\u02e3"+ "\1\u02e4\1\u0284\1\u02e5\1\u02e6\1\u0284\2\357\1\76\13\u0284"+ "\1\357\34\u0284\1\u02e3\1\u0284\1\u02e6\1\u02e3\17\u0284\3\357"+ "\1\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d\1\u012e"+ "\1\u024f\1\233\1\357\1\233\25\357\1\u0282\1\357\2\u0282"+ "\23\357\1\u02e7\1\357\1\u02e8\4\357\1\76\15\357\1\u012d"+ "\1\u012e\1\u024f\1\233\1\357\1\233\51\357\3\u02e9\3\357"+ "\1\u02e9\3\357\1\76\15\357\1\u012d\1\u012e\1\u024f\1\233"+ "\1\357\1\233\7\357\2\u02e9\3\357\1\u02e9\1\357\1\u02e9"+ "\1\357\1\u02e9\2\357\1\u02e9\1\357\4\u02e9\2\357\1\u02e9"+ "\1\357\1\u02e9\15\357\1\u02b9\3\357\1\u02b9\3\357\1\76"+ "\15\357\1\u012d\1\u012e\1\u024f\1\233\1\357\1\233\25\357"+ "\1\u02b9\1\357\2\u02b9\17\357\4\u016d\1\u016e\4\u016d\2\357"+ "\1\76\13\u016d\1\357\3\u016d\1\357\53\u016d\1\u016b\3\u02ea"+ "\3\u016b\1\u02ea\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+ "\15\u016b\2\u02ea\3\u016b\1\u02ea\1\u016b\1\u02ea\1\u016b\1\u02ea"+ "\2\u016b\1\u02ea\1\u016b\4\u02ea\2\u016b\1\u02ea\1\u016b\1\u02ea"+ "\12\u016b\3\u028d\1\u02eb\1\u02ec\1\u028d\1\u02ed\1\u02ee\1\u028d"+ "\3\0\13\u028d\1\0\34\u028d\1\u02eb\1\u028d\1\u02ee\1\u02eb"+ "\17\u028d\3\76\1\u028b\3\76\1\u028b\21\76\1\227\1\230"+ "\1\u0255\1\0\1\76\1\0\25\76\1\u028b\1\76\2\u028b"+ "\23\76\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\u0255"+ "\1\0\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76"+ "\1\227\1\230\1\u0255\1\0\1\76\1\0\7\76\2\u02f1"+ "\3\76\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1"+ "\1\76\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\15\76\1\u02c0"+ "\3\76\1\u02c0\21\76\1\227\1\230\1\u0255\1\0\1\76"+ "\1\0\25\76\1\u02c0\1\76\2\u02c0\17\76\4\235\1\236"+ "\4\235\3\0\13\235\1\0\3\235\1\76\53\235\1\232"+ "\3\u02f2\3\232\1\u02f2\20\232\1\356\15\232\2\u02f2\3\232"+ "\1\u02f2\1\232\1\u02f2\1\232\1\u02f2\2\232\1\u02f2\1\232"+ "\4\u02f2\2\232\1\u02f2\1\232\1\u02f2\12\232\11\u02c6\2\u02f3"+ "\1\u02f4\13\u02c6\1\u02f3\57\u02c6\11\256\2\125\1\126\13\256"+ "\1\125\4\256\1\u02f5\52\256\11\u02ca\3\0\13\u02ca\1\0"+ "\60\u02ca\3\u02cb\1\u02ca\3\u02cb\1\u02f6\3\0\2\u0294\6\u02ca"+ "\3\u02cb\1\u02f7\7\u02ca\32\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb"+ "\4\u02ca\3\u02cc\1\u02ca\3\u02cc\1\u02ca\3\0\10\u02ca\3\u02cc"+ "\1\147\7\u02ca\32\u02cc\1\u02ca\3\u02cc\6\u02ca\1\u02cc\3\u02ca"+ "\13\u02cd\1\0\73\u02cd\1\0\3\u02ce\1\0\4\u02ce\3\0"+ "\2\u02ce\2\0\1\u02ce\1\u02f8\6\u02ce\7\0\32\u02ce\1\0"+ "\3\u02ce\6\0\1\u02ce\4\0\1\u02ce\1\u02f9\1\u02ce\1\0"+ "\2\u02f9\1\u02ce\1\u02cf\3\0\2\u02ce\2\0\1\u02ce\1\u02f8"+ "\2\u02ce\1\u02f9\1\u02ce\1\u02cf\1\u02ce\7\0\25\u02f9\4\u02ce"+ "\1\u02f9\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0"+ "\4\u02d0\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\6\u02d0\7\0"+ "\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\10\u029d\1\u02d1"+ "\3\0\2\u0268\10\u029d\1\u02d1\1\0\57\u029d\1\0\3\u02d2"+ "\1\0\3\u02d2\1\u02fb\3\0\2\u02fc\6\0\4\u02d2\7\0"+ "\32\u02d2\1\0\3\u02d2\6\0\1\u02d2\11\0\1\u02fd\151\0"+ "\1\u02fe\36\0\3\147\1\0\1\147\1\u02ff\1\147\14\0"+ "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+ "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u0300"+ "\17\147\1\0\3\147\6\0\1\147\13\0\1\u02d7\15\0"+ "\1\u02d7\60\0\2\u0301\1\u0302\2\u0301\2\u0302\1\u0301\1\u02d8"+ "\3\0\10\u0301\1\u0302\1\u0301\1\u02d8\1\0\7\u0301\25\u0302"+ "\4\u0301\1\u0302\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\1\u0303"+ "\1\u0302\1\u0303\1\u0301\2\u0302\1\u0303\1\u02d8\3\0\10\u0301"+ "\1\u0302\1\u0303\1\u02d9\1\147\7\u0301\25\u0302\4\u0303\1\u0302"+ "\1\u0301\3\u0302\6\u0301\1\u0302\3\u0301\11\u02da\3\0\13\u02da"+ "\1\0\60\u02da\3\u02db\1\u02da\3\u02db\1\u0304\3\0\1\u02a8"+ "\7\u02da\3\u02db\1\u0305\7\u02da\32\u02db\1\u02da\3\u02db\6\u02da"+ "\1\u02db\4\u02da\3\u02dc\1\u02da\3\u02dc\1\u02da\3\0\10\u02da"+ "\3\u02dc\1\147\7\u02da\32\u02dc\1\u02da\3\u02dc\6\u02da\1\u02dc"+ "\3\u02da\10\0\1\u0306\5\0\1\u02ae\7\0\1\u0306\61\0"+ "\3\u02de\1\0\4\u02de\3\0\2\u02de\2\0\1\u02de\1\u0307"+ "\6\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+ "\1\u02b1\1\u0308\1\u02b1\1\0\2\u0308\1\u02b1\1\u02df\3\0"+ "\2\u02b1\2\0\1\u02b1\1\u02df\2\u02b1\1\u0308\1\u02b1\1\u02df"+ "\1\u02b1\7\0\25\u0308\4\u02b1\1\u0308\1\0\3\u0308\6\0"+ "\1\u0308\22\0\1\u0309\106\0\1\u030a\126\0\1\u030b\47\0"+ "\3\u012e\1\u0284\1\u016c\2\u012e\1\u0284\1\u012e\2\357\1\76"+ "\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e\1\u0284\1\u012e"+ "\2\u0284\23\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76"+ "\13\u012e\1\357\2\u012e\1\357\1\u024e\54\u012e\3\u030e\1\u016c"+ "\2\u012e\1\u030e\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+ "\1\357\1\u024e\12\u012e\2\u030e\3\u012e\1\u030e\1\u012e\1\u030e"+ "\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e\4\u030e\2\u012e\1\u030e"+ "\1\u012e\1\u030e\15\u012e\1\u02e3\1\u016c\2\u012e\1\u02e3\1\u012e"+ "\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e"+ "\1\u02e3\1\u012e\2\u02e3\17\u012e\4\357\1\u02e7\1\357\1\u02e8"+ "\4\357\1\76\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357"+ "\1\233\51\357\3\u02e9\3\357\1\u02e9\3\357\1\76\15\357"+ "\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u02e9"+ "\3\357\1\u02e9\1\357\1\u02e9\1\357\1\u02e9\2\357\1\u02e9"+ "\1\357\4\u02e9\2\357\1\u02e9\1\357\1\u02e9\13\357\3\u030f"+ "\3\357\1\u030f\3\357\1\76\15\357\1\u012d\1\u012e\1\u012f"+ "\1\233\1\357\1\233\7\357\2\u030f\3\357\1\u030f\1\357"+ "\1\u030f\1\357\1\u030f\2\357\1\u030f\1\357\4\u030f\2\357"+ "\1\u030f\1\357\1\u030f\12\357\1\u016b\3\u0218\3\u016b\1\u0218"+ "\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0218"+ "\3\u016b\1\u0218\1\u016b\1\u0218\1\u016b\1\u0218\2\u016b\1\u0218"+ "\1\u016b\4\u0218\2\u016b\1\u0218\1\u016b\1\u0218\12\u016b\3\230"+ "\1\u028d\1\234\2\230\1\u028d\1\230\3\0\13\230\1\0"+ "\2\230\1\76\1\u0254\30\230\1\u028d\1\230\2\u028d\23\230"+ "\1\u0310\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230"+ "\1\76\1\u0254\54\230\3\u0312\1\234\2\230\1\u0312\1\230"+ "\3\0\13\230\1\0\2\230\1\76\1\u0254\12\230\2\u0312"+ "\3\230\1\u0312\1\230\1\u0312\1\230\1\u0312\2\230\1\u0312"+ "\1\230\4\u0312\2\230\1\u0312\1\230\1\u0312\15\230\1\u02eb"+ "\1\234\2\230\1\u02eb\1\230\3\0\13\230\1\0\2\230"+ "\1\76\1\u0254\30\230\1\u02eb\1\230\2\u02eb\17\230\4\76"+ "\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\231\1\0"+ "\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76\1\227"+ "\1\230\1\231\1\0\1\76\1\0\7\76\2\u02f1\3\76"+ "\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1\1\76"+ "\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\13\76\3\u0313\3\76"+ "\1\u0313\21\76\1\227\1\230\1\231\1\0\1\76\1\0"+ "\7\76\2\u0313\3\76\1\u0313\1\76\1\u0313\1\76\1\u0313"+ "\2\76\1\u0313\1\76\4\u0313\2\76\1\u0313\1\76\1\u0313"+ "\12\76\1\232\3\u021f\3\232\1\u021f\20\232\1\356\15\232"+ "\2\u021f\3\232\1\u021f\1\232\1\u021f\1\232\1\u021f\2\232"+ "\1\u021f\1\232\4\u021f\2\232\1\u021f\1\232\1\u021f\12\232"+ "\11\u02f5\2\u0314\1\u0315\13\u02f5\1\u0314\57\u02f5\10\u02ca\1\u02f6"+ "\3\0\2\u0294\10\u02ca\1\u02f6\1\0\57\u02ca\1\0\3\u02f7"+ "\1\0\3\u02f7\1\u0316\3\0\2\u0317\6\0\4\u02f7\7\0"+ "\32\u02f7\1\0\3\u02f7\6\0\1\u02f7\4\0\1\u02ce\1\u02f9"+ "\1\u02ce\1\0\2\u02f9\1\u02ce\1\u02f8\3\0\2\u02ce\1\u01f8"+ "\1\0\1\u02ce\1\u02f8\2\u02ce\1\u02f9\1\u02ce\1\u02f8\1\u02ce"+ "\7\0\25\u02f9\4\u02ce\1\u02f9\1\0\3\u02f9\6\0\1\u02f9"+ "\4\0\3\u02f9\1\0\3\u02f9\1\u0318\3\0\1\u02cf\1\u02ce"+ "\1\u01f8\1\0\1\u02ce\1\u02f8\2\u02ce\4\u02f9\7\0\32\u02f9"+ "\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0\3\u02d0"+ "\1\u02fa\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\4\u02d0\1\u02fa"+ "\1\u02d0\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\13\0"+ "\1\u02fb\3\0\2\u02fc\10\0\1\u02fb\62\0\1\u02d2\2\0"+ "\2\u02d2\1\0\1\u02fc\13\0\1\u02d2\1\0\1\u02fc\10\0"+ "\25\u02d2\4\0\1\u02d2\1\0\3\u02d2\6\0\1\u02d2\51\0"+ "\1\u0319\114\0\1\u031a\33\0\3\147\1\0\3\147\14\0"+ "\4\147\7\0\7\147\1\u031b\22\147\1\0\3\147\6\0"+ "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+ "\15\147\1\u031c\14\147\1\0\3\147\6\0\1\147\3\0"+ "\11\u0301\3\0\13\u0301\1\0\60\u0301\3\u0302\1\u0301\3\u0302"+ "\1\u031d\3\0\2\u02d8\6\u0301\3\u0302\1\u031e\7\u0301\32\u0302"+ "\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\3\u0303\1\u0301\3\u0303"+ "\1\u0301\3\0\10\u0301\3\u0303\1\147\7\u0301\32\u0303\1\u0301"+ "\3\u0303\6\u0301\1\u0303\3\u0301\10\u02da\1\u0304\3\0\1\u02a8"+ "\11\u02da\1\u0304\1\0\57\u02da\1\0\3\u0305\1\0\3\u0305"+ "\1\u031f\3\0\1\u0320\7\0\4\u0305\7\0\32\u0305\1\0"+ "\3\u0305\6\0\1\u0305\4\0\3\u02de\1\0\3\u02de\1\u0321"+ "\3\0\2\u02de\1\u02ae\1\0\1\u02de\1\u0307\4\u02de\1\u0321"+ "\1\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+ "\3\u0308\1\0\3\u0308\1\u0322\3\0\1\u02df\1\u02b1\1\u02ae"+ "\1\0\1\u0323\1\u02df\2\u02b1\2\u0308\1\u0324\1\u0308\7\0"+ "\32\u0308\1\0\3\u0308\6\0\1\u0308\44\0\1\u0325\45\0"+ "\4\u012e\1\u0326\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+ "\1\357\60\u012e\3\u030e\1\u016c\2\u012e\1\u030e\1\u012e\2\357"+ "\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e\2\u030e\3\u012e"+ "\1\u030e\1\u012e\1\u030e\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e"+ "\4\u030e\2\u012e\1\u030e\1\u012e\1\u030e\13\u012e\3\u0327\1\u016c"+ "\2\u012e\1\u0327\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+ "\1\357\13\u012e\2\u0327\3\u012e\1\u0327\1\u012e\1\u0327\1\u012e"+ "\1\u0327\2\u012e\1\u0327\1\u012e\4\u0327\2\u012e\1\u0327\1\u012e"+ "\1\u0327\12\u012e\1\357\3\u0328\3\357\1\u0328\3\357\1\76"+ "\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357"+ "\2\u0328\3\357\1\u0328\1\357\1\u0328\1\357\1\u0328\2\357"+ "\1\u0328\1\357\4\u0328\2\357\1\u0328\1\357\1\u0328\12\357"+ "\4\230\1\u0329\1\230\1\u0311\2\230\3\0\13\230\1\0"+ "\60\230\3\u0312\1\234\2\230\1\u0312\1\230\3\0\13\230"+ "\1\0\2\230\1\76\13\230\2\u0312\3\230\1\u0312\1\230"+ "\1\u0312\1\230\1\u0312\2\230\1\u0312\1\230\4\u0312\2\230"+ "\1\u0312\1\230\1\u0312\13\230\3\u032a\1\234\2\230\1\u032a"+ "\1\230\3\0\13\230\1\0\2\230\1\76\13\230\2\u032a"+ "\3\230\1\u032a\1\230\1\u032a\1\230\1\u032a\2\230\1\u032a"+ "\1\230\4\u032a\2\230\1\u032a\1\230\1\u032a\12\230\1\76"+ "\3\u032b\3\76\1\u032b\21\76\1\227\1\230\1\231\1\0"+ "\1\76\1\0\7\76\2\u032b\3\76\1\u032b\1\76\1\u032b"+ "\1\76\1\u032b\2\76\1\u032b\1\76\4\u032b\2\76\1\u032b"+ "\1\76\1\u032b\12\76\10\0\1\u0316\3\0\2\u0317\10\0"+ "\1\u0316\62\0\1\u02f7\2\0\2\u02f7\1\0\1\u0317\13\0"+ "\1\u02f7\1\0\1\u0317\10\0\25\u02f7\4\0\1\u02f7\1\0"+ "\3\u02f7\6\0\1\u02f7\4\0\3\u02ce\1\0\3\u02ce\1\u0318"+ "\3\0\1\u02cf\1\u02ce\1\u01f8\1\0\1\u02ce\1\u02f8\4\u02ce"+ "\1\u0318\1\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+ "\51\0\1\u032c\41\0\3\147\1\0\3\147\14\0\4\147"+ "\7\0\7\147\1\u032d\22\147\1\0\3\147\6\0\1\147"+ "\3\0\10\u0301\1\u031d\3\0\2\u02d8\10\u0301\1\u031d\1\0"+ "\57\u0301\1\0\3\u031e\1\0\3\u031e\1\u032e\3\0\2\u032f"+ "\6\0\4\u031e\7\0\32\u031e\1\0\3\u031e\6\0\1\u031e"+ "\13\0\1\u031f\3\0\1\u0320\11\0\1\u031f\62\0\1\u0305"+ "\2\0\2\u0305\1\0\1\u0320\13\0\1\u0305\1\0\1\u0320"+ "\10\0\25\u0305\4\0\1\u0305\1\0\3\u0305\6\0\1\u0305"+ "\4\0\3\u02b1\1\0\3\u02b1\1\u0322\3\0\1\u02df\1\u02b1"+ "\1\u02ae\1\0\1\u0323\1\u02df\4\u02b1\1\u0322\1\u02b1\7\0"+ "\32\u02b1\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0330\1\0"+ "\4\u0330\3\0\2\u0330\2\0\1\u0330\1\u0331\6\u0330\7\0"+ "\32\u0330\1\0\3\u0330\6\0\1\u0330\110\0\1\u0332\1\0"+ "\4\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+ "\1\357\2\u012e\1\357\55\u012e\3\u0333\1\u016c\2\u012e\1\u0333"+ "\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e"+ "\2\u0333\3\u012e\1\u0333\1\u012e\1\u0333\1\u012e\1\u0333\2\u012e"+ "\1\u0333\1\u012e\4\u0333\2\u012e\1\u0333\1\u012e\1\u0333\12\u012e"+ "\1\357\3\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d"+ "\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u0282\3\357"+ "\1\u0282\1\357\1\u0282\1\357\1\u0282\2\357\1\u0282\1\357"+ "\4\u0282\2\357\1\u0282\1\357\1\u0282\12\357\4\230\1\u0310"+ "\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230\1\76"+ "\55\230\3\u0334\1\234\2\230\1\u0334\1\230\3\0\13\230"+ "\1\0\2\230\1\76\13\230\2\u0334\3\230\1\u0334\1\230"+ "\1\u0334\1\230\1\u0334\2\230\1\u0334\1\230\4\u0334\2\230"+ "\1\u0334\1\230\1\u0334\12\230\1\76\3\u028b\3\76\1\u028b"+ "\21\76\1\227\1\230\1\231\1\0\1\76\1\0\7\76"+ "\2\u028b\3\76\1\u028b\1\76\1\u028b\1\76\1\u028b\2\76"+ "\1\u028b\1\76\4\u028b\2\76\1\u028b\1\76\1\u028b\12\76"+ "\10\0\1\u032e\3\0\2\u032f\10\0\1\u032e\62\0\1\u031e"+ "\2\0\2\u031e\1\0\1\u032f\13\0\1\u031e\1\0\1\u032f"+ "\10\0\25\u031e\4\0\1\u031e\1\0\3\u031e\6\0\1\u031e"+ "\4\0\3\u0330\1\0\4\u0330\3\0\2\u0330\2\0\1\u0330"+ "\1\u0335\6\u0330\7\0\32\u0330\1\0\3\u0330\6\0\1\u0330"+ "\4\0\1\u0330\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0331"+ "\3\0\2\u0330\2\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330"+ "\1\u0331\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336"+ "\6\0\1\u0336\22\0\1\u0337\67\0\1\u012e\3\u0284\1\u016c"+ "\2\u012e\1\u0284\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+ "\1\357\13\u012e\2\u0284\3\u012e\1\u0284\1\u012e\1\u0284\1\u012e"+ "\1\u0284\2\u012e\1\u0284\1\u012e\4\u0284\2\u012e\1\u0284\1\u012e"+ "\1\u0284\12\u012e\1\230\3\u028d\1\234\2\230\1\u028d\1\230"+ "\3\0\13\230\1\0\2\230\1\76\13\230\2\u028d\3\230"+ "\1\u028d\1\230\1\u028d\1\230\1\u028d\2\230\1\u028d\1\230"+ "\4\u028d\2\230\1\u028d\1\230\1\u028d\12\230\1\0\1\u0330"+ "\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0338\3\0\2\u0330"+ "\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330\1\u0338"+ "\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336\6\0"+ "\1\u0336\4\0\3\u0336\1\0\3\u0336\1\u0339\3\0\1\u0331"+ "\1\u0330\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\2\u0336\1\u033a"+ "\1\u0336\7\0\32\u0336\1\0\3\u0336\6\0\1\u0336\4\0"+ "\3\u0330\1\0\3\u0330\1\u0339\3\0\1\u0331\1\u0330\1\u02ae"+ "\1\0\1\u0330\1\u0335\4\u0330\1\u0339\1\u0330\7\0\32\u0330"+ "\1\0\3\u0330\6\0\1\u0330\3\0"; private static int [] zzUnpackTrans() { int [] result = new int[48777]; 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 <code>aState</code> */ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\1\15\0\2\1\1\11\4\1\1\11\2\1\1\11"+ "\15\1\2\11\4\1\1\11\2\1\2\11\1\1\1\11"+ "\2\1\7\11\4\1\2\11\1\1\1\11\3\1\1\11"+ "\1\1\1\11\3\1\2\11\1\1\1\11\3\1\1\11"+ "\1\1\1\11\1\1\1\11\1\1\1\11\2\1\3\0"+ "\2\11\1\0\1\11\1\0\2\1\1\0\15\1\3\0"+ "\1\11\3\1\2\0\1\11\1\1\1\11\4\1\5\11"+ "\1\0\1\1\2\0\1\11\1\1\3\0\1\11\1\1"+ "\10\0\1\11\4\1\6\11\3\0\1\11\5\0\1\1"+ "\1\0\1\1\1\11\1\1\1\11\2\1\1\11\35\1"+ "\3\0\6\1\1\0\1\11\1\0\1\1\6\0\2\11"+ "\1\0\1\1\4\0\1\11\1\0\1\1\1\11\1\1"+ "\1\11\3\0\42\1\3\0\2\1\1\0\1\11\1\1"+ "\14\0\1\11\1\1\3\0\46\1\2\11\1\0\2\1"+ "\1\0\1\1\13\0\1\1\5\0\11\1\1\0\31\1"+ "\1\11\2\1\7\0\2\1\10\0\1\1\1\11\3\0"+ "\12\1\1\0\17\1\1\0\7\1\6\0\2\1\3\0"+ "\1\1\6\0\1\1\1\11\4\0\13\1\4\0\22\1"+ "\1\11\6\0\1\1\6\0\1\1\13\0\10\1\3\0"+ "\15\1\1\0\2\1\1\0\5\1\4\0\2\11\2\1"+ "\4\0\2\1\7\0\1\1\1\11\1\0\12\1\1\0"+ "\1\1\1\0\7\1\2\0\1\1\1\0\2\1\2\0"+ "\1\11\2\0\1\1\2\0\2\1\4\0\1\1\2\0"+ "\2\1\7\0\4\1\1\0\1\1\1\0\1\1\1\0"+ "\3\1\2\0\11\1\1\0\1\1\3\0\1\1\1\0"+ "\2\1\3\0\1\11\1\0\4\1\3\0\4\1\3\0"+ "\1\1\1\11\1\0\4\1\3\0\2\1\2\0\10\1"+ "\12\0\3\1\5\0\3\1\1\0\1\1\1\11\1\0"+ "\6\1\3\0\10\1\2\0\2\11\4\0\1\1\3\0"+ "\2\1\1\11\1\1\1\0\1\1\1\11\1\0\5\1"+ "\1\0\2\1\1\0\1\1\3\0\1\1\2\0\1\1"+ "\1\11\2\1\10\0\1\11\3\1"; private static int [] zzUnpackAttribute() { int [] result = new int[826]; 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; /** number of newlines encountered up to the start of the matched text */ private int yyline; /** the number of characters up to the start of the matched text */ private int yychar; /** * the number of characters from the last newline up to the start of the * matched text */ private int yycolumn; /** * zzAtBOL == true <=> the scanner is currently at the beginning of a line */ private boolean zzAtBOL = true; /** zzAtEOF == true <=> the scanner is at the EOF */ private boolean zzAtEOF; /** denotes if the user-EOF-code has already been executed */ private boolean zzEOFDone; /** the stack of open (nested) input streams to read from */ private java.util.Stack zzStreams = new java.util.Stack(); /** * inner class used to store info for nested * input streams */ private static final class ZzFlexStreamInfo { java.io.Reader zzReader; int zzEndRead; int zzStartRead; int zzCurrentPos; int zzMarkedPos; int yyline; int yycolumn; char [] zzBuffer; boolean zzAtEOF; boolean zzEOFDone; /** sets all values stored in this class */ ZzFlexStreamInfo(java.io.Reader zzReader, int zzEndRead, int zzStartRead, int zzCurrentPos, int zzMarkedPos, char [] zzBuffer, boolean zzAtEOF, int yyline, int yycolumn) { this.zzReader = zzReader; this.zzEndRead = zzEndRead; this.zzStartRead = zzStartRead; this.zzCurrentPos = zzCurrentPos; this.zzMarkedPos = zzMarkedPos; this.zzBuffer = zzBuffer; this.zzAtEOF = zzAtEOF; this.zzEOFDone = zzEOFDone; this.yyline = yyline; this.yycolumn = yycolumn; } } /* user code: */ int balance = 0; int commentbalance = 0; int action_line = 0; int bufferSize = 16384; File file; Stack files = new Stack(); StringBuffer userCode = new StringBuffer(); String classCode; String initCode; String initThrow; String eofCode; String eofThrow; String lexThrow; String eofVal; String scanErrorException; String cupSymbol = "sym"; StringBuffer actionText = new StringBuffer(); StringBuffer string = new StringBuffer(); boolean charCount; boolean lineCount; boolean columnCount; boolean cupCompatible; boolean cupDebug; boolean isInteger; boolean isIntWrap; boolean isYYEOF; boolean notUnix; boolean isPublic; boolean isFinal; boolean isAbstract; boolean bolUsed; boolean standalone; boolean debugOption; boolean useRowMap = Options.gen_method == Options.PACK || Options.gen_method == Options.TABLE; boolean packed = Options.gen_method == Options.PACK; boolean caseless; boolean inclusive_states; boolean eofclose; String isImplementing; String isExtending; String className = "Yylex"; String functionName; String tokenType; String visibility = "public"; Vector /* String */ ctorArgs = new Vector(); Vector /* String */ ctorTypes = new Vector(); LexicalStates states = new LexicalStates(); Vector actions = new Vector(); private int nextState; boolean macroDefinition; Timer t = new Timer(); public int currentLine() { return yyline; } public void setFile(File file) { this.file = file; } private Symbol symbol(int type, Object value) { return new Symbol(type, yyline, yycolumn, value); } private Symbol symbol(int type) { return new Symbol(type, yyline, yycolumn); } // updates line and column count to the beginning of the first // non whitespace character in yytext, but leaves yyline+yycolumn // untouched private Symbol symbol_countUpdate(int type, Object value) { int lc = yyline; int cc = yycolumn; String text = yytext(); for (int i=0; i < text.length(); i++) { char c = text.charAt(i); if (c != '\n' && c != '\r' && c != ' ' && c != '\t' ) return new Symbol(type, lc, cc, value); if (c == '\n') { lc++; cc = 0; } else cc++; } return new Symbol(type, yyline, yycolumn, value); } private String makeMacroIdent() { String matched = yytext().trim(); return matched.substring(1, matched.length()-1).trim(); } public static String conc(Object a, Object b) { if (a == null && b == null) return null; if (a == null) return b.toString(); if (b == null) return a.toString(); return a.toString()+b.toString(); } public static String concExc(Object a, Object b) { if (a == null && b == null) return null; if (a == null) return b.toString(); if (b == null) return a.toString(); return a.toString()+", "+b.toString(); } /** * 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 LexScan(java.io.Reader in) { states.insert("YYINITIAL", true); 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 LexScan(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 < 1788) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); } return map; } /** * Refills the input buffer. * * @return <code>false</code>, iff there was new input. * * @exception java.io.IOException if any I/O-Error occurs */ private boolean zzRefill() throws java.io.IOException { /* first: make room (if you can) */ if (zzStartRead > 0) { System.arraycopy(zzBuffer, zzStartRead, zzBuffer, 0, zzEndRead-zzStartRead); /* translate stored positions */ zzEndRead-= zzStartRead; zzCurrentPos-= zzStartRead; zzMarkedPos-= zzStartRead; zzStartRead = 0; } /* is the buffer big enough? */ if (zzCurrentPos >= zzBuffer.length) { /* if not: blow it up */ char newBuffer[] = new char[zzCurrentPos*2]; System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); zzBuffer = newBuffer; } /* finally: fill the buffer with new input */ int numRead = zzReader.read(zzBuffer, zzEndRead, zzBuffer.length-zzEndRead); if (numRead > 0) { zzEndRead+= numRead; return false; } // unlikely but not impossible: read 0 characters, but not at end of stream if (numRead == 0) { int c = zzReader.read(); if (c == -1) { return true; } else { zzBuffer[zzEndRead++] = (char) c; return false; } } // numRead < 0) return true; } /** * 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(); } /** * Stores the current input stream on a stack, and * reads from a new stream. Lexical state, line, * char, and column counting remain untouched. * * The current input stream can be restored with * yypopstream (usually in an <<EOF>> action). * * @param reader the new input stream to read from * * @see #yypopStream() */ public final void yypushStream(java.io.Reader reader) { zzStreams.push( new ZzFlexStreamInfo(zzReader, zzEndRead, zzStartRead, zzCurrentPos, zzMarkedPos, zzBuffer, zzAtEOF, yyline, yycolumn) ); zzAtEOF = false; zzBuffer = new char[ZZ_BUFFERSIZE]; zzReader = reader; zzEndRead = zzStartRead = 0; zzCurrentPos = zzMarkedPos = 0; yyline = yycolumn = 0; } /** * Closes the current input stream and continues to * read from the one on top of the stream stack. * * @throws java.util.EmptyStackException * if there is no further stream to read from. * * @throws java.io.IOException * if there was an error in closing the stream. * * @see #yypushStream(java.io.Reader) */ public final void yypopStream() throws java.io.IOException { zzReader.close(); ZzFlexStreamInfo s = (ZzFlexStreamInfo) zzStreams.pop(); zzBuffer = s.zzBuffer; zzReader = s.zzReader; zzEndRead = s.zzEndRead; zzStartRead = s.zzStartRead; zzCurrentPos = s.zzCurrentPos; zzMarkedPos = s.zzMarkedPos ; zzAtEOF = s.zzAtEOF; zzEOFDone = s.zzEOFDone; yyline = s.yyline; yycolumn = s.yycolumn; } /** * Returns true iff there are still streams left * to read from on the stream stack. */ public final boolean yymoreStreams() { return !zzStreams.isEmpty(); } /** * 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 * <b>cannot</b> be reused (internal buffer is discarded and lost). * Lexical state is set to <tt>ZZ_INITIAL</tt>. * * @param reader the new input stream * * @see #yypushStream(java.io.Reader) * @see #yypopStream() */ public final void yyreset(java.io.Reader reader) { zzReader = reader; zzAtBOL = true; zzAtEOF = false; zzEOFDone = false; zzEndRead = zzStartRead = 0; zzCurrentPos = zzMarkedPos = 0; yyline = yychar = yycolumn = 0; zzLexicalState = YYINITIAL; } /** * Returns the current lexical state. */ public final int yystate() { return zzLexicalState; } /** * Enters a new lexical state * * @param newState the new lexical state */ public final void yybegin(int newState) { zzLexicalState = newState; } /** * Returns the text matched by the current regular expression. */ public final String yytext() { return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); } /** * Returns the character at position <tt>pos</tt> 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; } /** * Contains user EOF-code, which will be executed exactly once, * when the end of file is reached */ private void zzDoEOF() throws java.io.IOException { if (!zzEOFDone) { zzEOFDone = true; yyclose(); } } /** * 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 Symbol next_token() throws java.io.IOException { int zzInput; int zzAction; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; int [] zzAttrL = ZZ_ATTRIBUTE; while (true) { // cached fields: int zzCurrentPosL; int zzMarkedPosL = zzMarkedPos; int zzEndReadL = zzEndRead; char [] zzBufferL = zzBuffer; char [] zzCMapL = ZZ_CMAP; boolean zzR = false; for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; zzCurrentPosL++) { switch (zzBufferL[zzCurrentPosL]) { case '\u000B': case '\u000C': case '\u0085': case '\u2028': case '\u2029': yyline++; yycolumn = 0; zzR = false; break; case '\r': yyline++; yycolumn = 0; zzR = true; break; case '\n': if (zzR) zzR = false; else { yyline++; yycolumn = 0; } break; default: zzR = false; yycolumn++; } } if (zzR) { // peek one character ahead if it is \n (if we have counted one line too much) boolean zzPeek; if (zzMarkedPosL < zzEndReadL) zzPeek = zzBufferL[zzMarkedPosL] == '\n'; else if (zzAtEOF) zzPeek = false; else { boolean eof = zzRefill(); zzEndReadL = zzEndRead; zzMarkedPosL = zzMarkedPos; zzBufferL = zzBuffer; if (eof) zzPeek = false; else zzPeek = zzBufferL[zzMarkedPosL] == '\n'; } if (zzPeek) yyline--; } 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 118: { cupDebug = true; } case 147: break; case 122: { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); } case 148: break; case 113: { File f = new File(yytext().substring(9).trim()); if ( !f.canRead() ) throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); // check for cycle if (files.search(f) > 0) throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline); try { yypushStream( new FileReader(f) ); files.push(file); file = f; Out.println("Including \""+file+"\""); } catch (FileNotFoundException e) { throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); } } case 149: break; case 88: { return symbol(FULL); } case 150: break; case 92: { return symbol(ASCII); } case 151: break; case 21: { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); } case 152: break; case 142: { return symbol(UPPERCLASS); } case 153: break; case 34: { return symbol(COMMA); } case 154: break; case 61: { return symbol(CHAR,new Character('\f')); } case 155: break; case 111: { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); } case 156: break; case 104: { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); } case 157: break; case 143: { return symbol(LOWERCLASS); } case 158: break; case 72: { string.append('\r'); } case 159: break; case 43: { return symbol(HAT); } case 160: break; case 48: { yybegin(MACROS); ctorArgs.add(yytext().trim()); } case 161: break; case 1: { return symbol(EOF); } case 162: break; case 59: { return symbol(CHAR,new Character('\t')); } case 163: break; case 145: { eofclose = false; } case 164: break; case 103: { isPublic = true; } case 165: break; case 112: { actionText.setLength(0); yybegin(JAVA_CODE); Symbol s = symbol_countUpdate(EOFRULE, null); action_line = s.left+1; return s; } case 166: break; case 40: { balance++; return symbol(OPENCLASS); } case 167: break; case 11: { yybegin(REGEXP); } case 168: break; case 12: { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); } case 169: break; case 68: { string.append( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8)); } case 170: break; case 62: { return symbol(CHAR,new Character('\b')); } case 171: break; case 39: { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); } case 172: break; case 5: { states.insert(yytext(),inclusive_states); } case 173: break; case 70: { string.append('\n'); } case 174: break; case 10: { yybegin(REGEXP); return symbol(EQUALS); } case 175: break; case 146: { return symbol(JLETTERDIGITCLASS); } case 176: break; case 19: { return symbol(STAR); } case 177: break; case 42: { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); } case 178: break; case 116: { isAbstract = true; } case 179: break; case 75: { yypushback(1); yycolumn--; return symbol(CHAR, new Character(yytext().charAt(0))); } case 180: break; case 114: { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); } case 181: break; case 109: { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); } case 182: break; case 93: { packed = false; useRowMap = true; } case 183: break; case 87: { cupCompatible = true; isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); if (functionName == null) functionName = "next_token"; if (tokenType == null) tokenType = "java_cup.runtime.Symbol"; if (eofVal == null) eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; if (!Options.jlex) eofclose = true; } case 184: break; case 30: { bolUsed = true; return symbol(HAT); } case 185: break; case 4: { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); } case 186: break; case 35: { yybegin(REGEXP); return symbol(MORETHAN); } case 187: break; case 100: { packed = false; useRowMap = false; } case 188: break; case 119: { caseless = true; } case 189: break; case 38: { yybegin(nextState); return symbol(STRING, string.toString()); } case 190: break; case 76: { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); } case 191: break; case 13: { return symbol_countUpdate(RBRACE, null); } case 192: break; case 139: { scanErrorException = yytext().substring(11).trim(); } case 193: break; case 141: { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); } case 194: break; case 84: { return symbol(MACROUSE, yytext().substring(1,yytext().length()-1)); } case 195: break; case 2: { /* ignore */ } case 196: break; case 127: { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); } case 197: break; case 47: { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); } case 198: break; case 108: { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); } case 199: break; case 31: { actionText.append(yytext()); } case 200: break; case 83: { string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)); } case 201: break; case 107: { notUnix = true; } case 202: break; case 89: { lineCount = true; } case 203: break; case 136: { initThrow = concExc(initThrow,yytext().substring(11).trim()); } case 204: break; case 131: { standalone = true; isInteger = true; } case 205: break; case 52: { nextState = MACROS; yybegin(COMMENT); } case 206: break; case 25: { return symbol(TILDE); } case 207: break; case 37: { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } case 208: break; case 110: { className = yytext().substring(7).trim(); } case 209: break; case 9: { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } case 210: break; case 55: { nextState = REGEXPSTART; yybegin(COMMENT); } case 211: break; case 16: { return symbol(POINT); } case 212: break; case 73: { string.append('\f'); } case 213: break; case 65: { yybegin(REPEATEXP); return symbol(REPEAT, new Integer(yytext().trim().substring(1).trim())); } case 214: break; case 80: { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16))); } case 215: break; case 140: { initThrow = concExc(initThrow,string); yybegin(MACROS); } case 216: break; case 135: { eofThrow = concExc(eofThrow,string); yybegin(MACROS); } case 217: break; case 71: { string.append('\t'); } case 218: break; case 67: { string.append(yytext().charAt(1)); } case 219: break; case 7: { yybegin(MACROS); } case 220: break; case 98: { eofCode = conc(eofCode,string); yybegin(MACROS); } case 221: break; case 56: { return symbol(CHAR, new Character(yytext().charAt(1))); } case 222: break; case 28: { return symbol(PLUS); } case 223: break; case 101: { columnCount = true; } case 224: break; case 124: { isExtending = yytext().substring(9).trim(); } case 225: break; case 123: { eofVal = string.toString(); yybegin(MACROS); } case 226: break; case 36: { string.append(yytext()); } case 227: break; case 97: { return symbol(UNICODE); } case 228: break; case 74: { string.append('\b'); } case 229: break; case 24: { return symbol(BANG); } case 230: break; case 132: { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); } case 231: break; case 91: { packed = true; useRowMap = true; } case 232: break; case 26: { return symbol(OPENBRACKET); } case 233: break; case 60: { return symbol(CHAR,new Character('\r')); } case 234: break; case 94: { isFinal = true; } case 235: break; case 27: { return symbol(CLOSEBRACKET); } case 236: break; case 86: { isInteger = true; } case 237: break; case 20: { return symbol(LOOKAHEAD); } case 238: break; case 51: { commentbalance++; } case 239: break; case 49: { t.start(); yybegin(MACROS); macroDefinition = true; return symbol(USERCODE,userCode); } case 240: break; case 44: { return symbol(DASH); } case 241: break; case 138: { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); } case 242: break; case 96: { debugOption = true; } case 243: break; case 64: { nextState = REGEXP; yybegin(COMMENT); } case 244: break; case 32: { if (balance > 0) { balance--; actionText.append('}'); } else { yybegin(REGEXPSTART); Action a = new Action(actionText.toString(), action_line); actions.addElement(a); return symbol(ACTION, a); } } case 245: break; case 29: { return symbol(DOLLAR); } case 246: break; case 17: { yybegin(CHARCLASS); return symbol(OPENCLASS); } case 247: break; case 105: { initCode = conc(initCode,string); yybegin(MACROS); } case 248: break; case 69: { string.append('\"'); } case 249: break; case 137: { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); } case 250: break; case 126: { return symbol(LETTERCLASS); } case 251: break; case 102: { isInteger = true; if (eofVal == null) eofVal = "return 0;"; eofclose = true; } case 252: break; case 41: { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); } case 253: break; case 77: { string.setLength(0); yybegin(COPY); } case 254: break; case 8: { return symbol(IDENT, yytext()); } case 255: break; case 121: { return symbol(DIGITCLASS); } case 256: break; case 144: { lexThrow = concExc(lexThrow,string); yybegin(MACROS); } case 257: break; case 53: { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); } case 258: break; case 23: { return symbol(BAR); } case 259: break; case 45: { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); } case 260: break; case 117: { cupSymbol = yytext().substring(8).trim(); if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); } case 261: break; case 58: { return symbol(CHAR,new Character('\n')); } case 262: break; case 95: { isYYEOF = true; } case 263: break; case 14: { return symbol(CHAR, new Character(yytext().charAt(0))); } case 264: break; case 99: { tokenType = yytext().substring(6).trim(); } case 265: break; case 33: { balance++; actionText.append('{'); } case 266: break; case 128: { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); } case 267: break; case 63: { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); } case 268: break; case 81: { return symbol_countUpdate(MACROUSE, makeMacroIdent()); } case 269: break; case 15: { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); } case 270: break; case 125: { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); } case 271: break; case 90: { charCount = true; } case 272: break; case 130: { visibility = "private"; Skeleton.makePrivate(); } case 273: break; case 134: { return symbol(JLETTERCLASS); } case 274: break; case 22: { yybegin(REGEXPSTART); return symbol(LBRACE); } case 275: break; case 115: { eofclose = true; } case 276: break; case 66: // lookahead expression with fixed lookahead length yypushback(1); { if (macroDefinition) { yybegin(EATWSPNL); return symbol(BAR); } else { yybegin(REGEXPSTART); return symbol(NOACTION); } } case 277: break; case 82: // lookahead expression with fixed lookahead length yypushback(2); { if (macroDefinition) { yybegin(EATWSPNL); return symbol(BAR); } else { yybegin(REGEXPSTART); return symbol(NOACTION); } } case 278: break; case 46: { yybegin(REGEXP); return symbol(RBRACE); } case 279: break; case 78: { inclusive_states = false; yybegin(STATELIST); } case 280: break; case 120: { bufferSize = Integer.parseInt(yytext().substring(8).trim()); } case 281: break; case 106: { isIntWrap = true; } case 282: break; case 133: { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); } case 283: break; case 3: { userCode.append(yytext()); } case 284: break; case 54: { macroDefinition = false; yybegin(REGEXPSTART); return symbol(DELIMITER); } case 285: break; case 129: { functionName = yytext().substring(10).trim(); } case 286: break; case 85: { classCode = conc(classCode,string); yybegin(MACROS); } case 287: break; case 18: { return symbol(QUESTION); } case 288: break; case 50: { if (commentbalance > 0) commentbalance--; else yybegin(nextState); } case 289: break; case 79: { inclusive_states = true; yybegin(STATELIST); } case 290: break; case 57: { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8))); } case 291: break; case 6: { } case 292: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; zzDoEOF(); switch (zzLexicalState) { case STRING_CONTENT: { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } case 827: break; case MACROS: { if ( yymoreStreams() ) { file = (File) files.pop(); yypopStream(); } else throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } case 828: break; case STATELIST: { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } case 829: break; case CHARCLASS: { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } case 830: break; case JAVA_CODE: { throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); } case 831: break; case REPEATEXP: { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } case 832: break; case COMMENT: { throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); } case 833: break; case STATES: { throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); } case 834: break; case COPY: { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } case 835: break; default: { if ( yymoreStreams() ) { file = (File) files.pop(); yypopStream(); } else return symbol(EOF); } } } else { zzScanError(ZZ_NO_MATCH); } } } } /** * Converts an int token code into the name of the * token by reflection on the cup symbol class/interface sym * * This code was contributed by Karl Meissner <meissnersd@yahoo.com> */ private String getTokenName(int token) { try { java.lang.reflect.Field [] classFields = sym.class.getFields(); for (int i = 0; i < classFields.length; i++) { if (classFields[i].getInt(null) == token) { return classFields[i].getName(); } } } catch (Exception e) { e.printStackTrace(System.err); } return "UNKNOWN TOKEN"; } /** * Same as next_token but also prints the token to standard out * for debugging. * * This code was contributed by Karl Meissner <meissnersd@yahoo.com> */ public Symbol debug_next_token() throws java.io.IOException { java_cup.runtime.Symbol s = next_token(); System.out.println( "line:" + (yyline+1) + " col:" + (yycolumn+1) + " --"+ yytext() + "--" + getTokenName(s.sym) + "--"); return s; } /** * Runs the scanner on input files. * * This main method is the debugging routine for the scanner. * It prints debugging information about each returned token to * System.out until the end of file is reached, or an error occured. * * @param argv the command line, contains the filenames to run * the scanner on. */ public static void main(String argv[]) { if (argv.length == 0) { System.out.println("Usage : java LexScan <inputfile>"); } else { for (int i = 0; i < argv.length; i++) { LexScan scanner = null; try { scanner = new LexScan( new java.io.FileReader(argv[i]) ); while ( !scanner.zzAtEOF ) scanner.debug_next_token(); } catch (java.io.FileNotFoundException e) { System.out.println("File not found : \""+argv[i]+"\""); } catch (java.io.IOException e) { System.out.println("IO error scanning file \""+argv[i]+"\""); System.out.println(e); } catch (Exception e) { System.out.println("Unexpected exception:"); e.printStackTrace(); } } } } }