/* Generated By:JJTree&JavaCC: Do not edit this line. DDLParserTokenManager.java */
/*******************************************************************************
 * Copyright (c) 2011 Oracle. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Mike Norman - June 10 2011, created DDL parser package
 ******************************************************************************/
package org.eclipse.persistence.tools.oracleddl.parser;
//javase imports
import java.io.InputStream;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
//metadata imports
import org.eclipse.persistence.tools.oracleddl.metadata.ArgumentType;
import org.eclipse.persistence.tools.oracleddl.metadata.ArgumentTypeDirection;
import org.eclipse.persistence.tools.oracleddl.metadata.BlobType;
import org.eclipse.persistence.tools.oracleddl.metadata.CharType;
import org.eclipse.persistence.tools.oracleddl.metadata.ClobType;
import org.eclipse.persistence.tools.oracleddl.metadata.CompositeDatabaseType;
import org.eclipse.persistence.tools.oracleddl.metadata.DatabaseType;
import org.eclipse.persistence.tools.oracleddl.metadata.DecimalType;
import org.eclipse.persistence.tools.oracleddl.metadata.DoubleType;
import org.eclipse.persistence.tools.oracleddl.metadata.FieldType;
import org.eclipse.persistence.tools.oracleddl.metadata.FloatType;
import org.eclipse.persistence.tools.oracleddl.metadata.FunctionType;
import org.eclipse.persistence.tools.oracleddl.metadata.IntervalDayToSecond;
import org.eclipse.persistence.tools.oracleddl.metadata.IntervalYearToMonth;
import org.eclipse.persistence.tools.oracleddl.metadata.LongType;
import org.eclipse.persistence.tools.oracleddl.metadata.LongRawType;
import org.eclipse.persistence.tools.oracleddl.metadata.NCharType;
import org.eclipse.persistence.tools.oracleddl.metadata.NClobType;
import org.eclipse.persistence.tools.oracleddl.metadata.NumericType;
import org.eclipse.persistence.tools.oracleddl.metadata.NVarChar2Type;
import org.eclipse.persistence.tools.oracleddl.metadata.ObjectType;
import org.eclipse.persistence.tools.oracleddl.metadata.ObjectTableType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLCollectionType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLCursorType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLPackageType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLRecordType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLSubType;
import org.eclipse.persistence.tools.oracleddl.metadata.ProcedureType;
import org.eclipse.persistence.tools.oracleddl.metadata.RawType;
import org.eclipse.persistence.tools.oracleddl.metadata.RealType;
import org.eclipse.persistence.tools.oracleddl.metadata.ROWTYPEType;
import org.eclipse.persistence.tools.oracleddl.metadata.TableType;
import org.eclipse.persistence.tools.oracleddl.metadata.TimeStampType;
import org.eclipse.persistence.tools.oracleddl.metadata.TYPEType;
import org.eclipse.persistence.tools.oracleddl.metadata.URowIdType;
import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedSizedType;
import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedType;
import org.eclipse.persistence.tools.oracleddl.metadata.VarCharType;
import org.eclipse.persistence.tools.oracleddl.metadata.VarChar2Type;
import org.eclipse.persistence.tools.oracleddl.metadata.VArrayType;
import org.eclipse.persistence.tools.oracleddl.util.DatabaseTypesRepository;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BFILE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_FLOAT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_DOUBLE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BOOLEAN_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.DATE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.MLSLABEL_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.NATURAL_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.PLS_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.POSITIVE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.ROWID_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIGN_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_DOUBLE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_FLOAT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SMALLINT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SYS_REFCURSOR_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.TIME_TYPE;

/** Token Manager. */
@SuppressWarnings("all")
public class DDLParserTokenManager implements DDLParserConstants
{

  /** Debug output. */
  public  java.io.PrintStream debugStream = System.out;
  /** Set debug output. */
  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
private int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 9:
         jjmatchedKind = 2;
         return jjMoveNfa_0(5, 0);
      case 10:
         jjmatchedKind = 3;
         return jjMoveNfa_0(5, 0);
      case 12:
         jjmatchedKind = 5;
         return jjMoveNfa_0(5, 0);
      case 13:
         jjmatchedKind = 4;
         return jjMoveNfa_0(5, 0);
      case 32:
         jjmatchedKind = 1;
         return jjMoveNfa_0(5, 0);
      case 33:
         return jjMoveStringLiteralDfa1_0(0x8000000L, 0x0L, 0x0L, 0x0L);
      case 35:
         jjmatchedKind = 30;
         return jjMoveNfa_0(5, 0);
      case 36:
         jjmatchedKind = 17;
         return jjMoveNfa_0(5, 0);
      case 37:
         jjmatchedKind = 18;
         return jjMoveStringLiteralDfa1_0(0x60000000000L, 0x0L, 0x0L, 0x0L);
      case 39:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x4000000010000000L, 0x0L, 0x0L);
      case 40:
         jjmatchedKind = 28;
         return jjMoveStringLiteralDfa1_0(0x400000L, 0x0L, 0x0L, 0x0L);
      case 41:
         jjmatchedKind = 11;
         return jjMoveNfa_0(5, 0);
      case 42:
         jjmatchedKind = 9;
         return jjMoveNfa_0(5, 0);
      case 43:
         jjmatchedKind = 29;
         return jjMoveNfa_0(5, 0);
      case 44:
         jjmatchedKind = 14;
         return jjMoveNfa_0(5, 0);
      case 45:
         jjmatchedKind = 25;
         return jjMoveNfa_0(5, 0);
      case 46:
         jjmatchedKind = 15;
         return jjMoveStringLiteralDfa1_0(0x10000L, 0x0L, 0x0L, 0x0L);
      case 47:
         jjmatchedKind = 33;
         return jjMoveNfa_0(5, 0);
      case 58:
         jjmatchedKind = 13;
         return jjMoveStringLiteralDfa1_0(0x100L, 0x0L, 0x0L, 0x0L);
      case 59:
         jjmatchedKind = 32;
         return jjMoveNfa_0(5, 0);
      case 60:
         jjmatchedKind = 23;
         return jjMoveStringLiteralDfa1_0(0x5000000L, 0x0L, 0x0L, 0x0L);
      case 61:
         jjmatchedKind = 19;
         return jjMoveNfa_0(5, 0);
      case 62:
         jjmatchedKind = 20;
         return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
      case 63:
         jjmatchedKind = 31;
         return jjMoveNfa_0(5, 0);
      case 64:
         jjmatchedKind = 10;
         return jjMoveNfa_0(5, 0);
      case 65:
         return jjMoveStringLiteralDfa1_0(0x798000000000L, 0x8000000000000000L, 0x3L, 0x0L);
      case 66:
         return jjMoveStringLiteralDfa1_0(0x3800000000000L, 0x0L, 0x1fcL, 0x0L);
      case 67:
         return jjMoveStringLiteralDfa1_0(0x1ffc000000000000L, 0x0L, 0x1fe00L, 0x0L);
      case 68:
         return jjMoveStringLiteralDfa1_0(0xe000000000000000L, 0x3L, 0x1fe0000L, 0x0L);
      case 69:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3cL, 0x6000000L, 0x0L);
      case 70:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3c0L, 0x38000000L, 0x0L);
      case 71:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1c00L, 0x40000000L, 0x0L);
      case 72:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000L, 0x0L, 0x0L);
      case 73:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7fc000L, 0xf80000000L, 0x0L);
      case 75:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1000000000L, 0x0L);
      case 76:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1800000L, 0x6000000000L, 0x0L);
      case 77:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x6000000L, 0x18000000000L, 0x0L);
      case 78:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xe8000000L, 0x3fe0000000000L, 0x0L);
      case 79:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3f00000000L, 0x7c000000000000L, 0x0L);
      case 80:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xc000000000L, 0xff80000000000000L, 0x0L);
      case 82:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x30000000000L, 0x0L, 0x1fffL);
      case 83:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xfc0000000000L, 0x0L, 0x7fe000L);
      case 84:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1f000000000000L, 0x0L, 0x7800000L);
      case 85:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xe0000000000000L, 0x0L, 0x8000000L);
      case 86:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x700000000000000L, 0x0L, 0xf0000000L);
      case 87:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3800000000000000L, 0x0L, 0x300000000L);
      case 89:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x400000000L);
      case 90:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x800000000L);
      case 97:
         return jjMoveStringLiteralDfa1_0(0x798000000000L, 0x8000000000000000L, 0x3L, 0x0L);
      case 98:
         return jjMoveStringLiteralDfa1_0(0x3800000000000L, 0x0L, 0x1fcL, 0x0L);
      case 99:
         return jjMoveStringLiteralDfa1_0(0x1ffc000000000000L, 0x0L, 0x1fe00L, 0x0L);
      case 100:
         return jjMoveStringLiteralDfa1_0(0xe000000000000000L, 0x3L, 0x1fe0000L, 0x0L);
      case 101:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3cL, 0x6000000L, 0x0L);
      case 102:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3c0L, 0x38000000L, 0x0L);
      case 103:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1c00L, 0x40000000L, 0x0L);
      case 104:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000L, 0x0L, 0x0L);
      case 105:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7fc000L, 0xf80000000L, 0x0L);
      case 107:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1000000000L, 0x0L);
      case 108:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1800000L, 0x6000000000L, 0x0L);
      case 109:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x6000000L, 0x18000000000L, 0x0L);
      case 110:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xe8000000L, 0x3fe0000000000L, 0x0L);
      case 111:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3f00000000L, 0x7c000000000000L, 0x0L);
      case 112:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xc000000000L, 0xff80000000000000L, 0x0L);
      case 114:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x30000000000L, 0x0L, 0x1fffL);
      case 115:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xfc0000000000L, 0x0L, 0x7fe000L);
      case 116:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1f000000000000L, 0x0L, 0x7800000L);
      case 117:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xe0000000000000L, 0x0L, 0x8000000L);
      case 118:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x700000000000000L, 0x0L, 0xf0000000L);
      case 119:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3800000000000000L, 0x0L, 0x300000000L);
      case 121:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x400000000L);
      case 122:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x800000000L);
      case 124:
         return jjMoveStringLiteralDfa1_0(0x1000L, 0x0L, 0x0L, 0x0L);
      case 126:
         jjmatchedKind = 34;
         return jjMoveNfa_0(5, 0);
      default :
         return jjMoveNfa_0(5, 0);
   }
}
private int jjMoveStringLiteralDfa1_0(long active0, long active1, long active2, long active3)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 0);
   }
   switch(curChar)
   {
      case 43:
         return jjMoveStringLiteralDfa2_0(active0, 0x400000L, active1, 0L, active2, 0L, active3, 0L);
      case 46:
         if ((active0 & 0x10000L) != 0L)
         {
            jjmatchedKind = 16;
            jjmatchedPos = 1;
         }
         break;
      case 61:
         if ((active0 & 0x100L) != 0L)
         {
            jjmatchedKind = 8;
            jjmatchedPos = 1;
         }
         else if ((active0 & 0x200000L) != 0L)
         {
            jjmatchedKind = 21;
            jjmatchedPos = 1;
         }
         else if ((active0 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 24;
            jjmatchedPos = 1;
         }
         else if ((active0 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 27;
            jjmatchedPos = 1;
         }
         break;
      case 62:
         if ((active0 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 26;
            jjmatchedPos = 1;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0x103000000002000L, active2, 0x180060000060000L, active3, 0xf0000003L);
      case 66:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4000000000000L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x180000000000L, active3, 0L);
      case 68:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4000L, active2, 0L, active3, 0L);
      case 69:
         return jjMoveStringLiteralDfa2_0(active0, 0xe001800000000000L, active1, 0x70000000040L, active2, 0x1000f80000L, active3, 0x40080e1fcL);
      case 70:
         if ((active1 & 0x8000L) != 0L)
         {
            jjmatchedKind = 79;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 96;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0x1804080000000000L, active2, 0xe00L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2600100002800001L, active2, 0x208000008000038L, active3, 0x30f0000L);
      case 76:
         return jjMoveStringLiteralDfa2_0(active0, 0x30018000000000L, active1, 0x4L, active2, 0x400008050001040L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x100000L);
      case 78:
         if ((active1 & 0x10000L) != 0L)
         {
            jjmatchedKind = 80;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 97;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000L, active1, 0x600000103e0008L, active2, 0xf82000000L, active3, 0x300000600L);
      case 79:
         if ((active1 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x3c0000000000000L, active1, 0x6d000480L, active2, 0x80021602100e080L, active3, 0x800001800L);
      case 80:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x80000400000000L, active2, 0L, active3, 0L);
      case 81:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000000000L, active2, 0L, active3, 0L);
      case 82:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 99;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0xc00020000000000L, active1, 0x8000005000001902L, active2, 0xf010000000000000L, active3, 0xc000000L);
      case 83:
         if ((active0 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 44;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x400000L) != 0L)
         {
            jjmatchedKind = 86;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 84:
         if ((active0 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 46;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0x400000000000L, active2, 0L, active3, 0x200000L);
      case 85:
         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000000L, active1, 0x808080000200L, active2, 0x20c00000010003L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000000L, active2, 0x43000000000000L, active3, 0L);
      case 88:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x30L, active2, 0x4000000L, active3, 0L);
      case 89:
         if ((active0 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 49;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4010000000000000L, active2, 0x100L, active3, 0x400000L);
      case 97:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0x103000000002000L, active2, 0x180060000060000L, active3, 0xf0000003L);
      case 98:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4000000000000L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x180000000000L, active3, 0L);
      case 100:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4000L, active2, 0L, active3, 0L);
      case 101:
         return jjMoveStringLiteralDfa2_0(active0, 0xe001800000000000L, active1, 0x70000000040L, active2, 0x1000f80000L, active3, 0x40080e1fcL);
      case 102:
         if ((active1 & 0x8000L) != 0L)
         {
            jjmatchedKind = 79;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 96;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4L, active3, 0L);
      case 104:
         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0x1804080000000000L, active2, 0xe00L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2600100002800001L, active2, 0x208000008000038L, active3, 0x30f0000L);
      case 108:
         return jjMoveStringLiteralDfa2_0(active0, 0x30018000000000L, active1, 0x4L, active2, 0x400008050001040L, active3, 0L);
      case 109:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x100000L);
      case 110:
         if ((active1 & 0x10000L) != 0L)
         {
            jjmatchedKind = 80;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 97;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000L, active1, 0x600000103e0008L, active2, 0xf82000000L, active3, 0x300000600L);
      case 111:
         if ((active1 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x3c0000000000000L, active1, 0x6d000480L, active2, 0x80021602100e080L, active3, 0x800001800L);
      case 112:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x80000400000000L, active2, 0L, active3, 0L);
      case 113:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000000000L, active2, 0L, active3, 0L);
      case 114:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 99;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0xc00020000000000L, active1, 0x8000005000001902L, active2, 0xf010000000000000L, active3, 0xc000000L);
      case 115:
         if ((active0 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 44;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x400000L) != 0L)
         {
            jjmatchedKind = 86;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 116:
         if ((active0 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 46;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0x400000000000L, active2, 0L, active3, 0x200000L);
      case 117:
         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000000L, active1, 0x808080000200L, active2, 0x20c00000010003L, active3, 0L);
      case 118:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000000L, active2, 0x43000000000000L, active3, 0L);
      case 120:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x30L, active2, 0x4000000L, active3, 0L);
      case 121:
         if ((active0 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 49;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4010000000000000L, active2, 0x100L, active3, 0x400000L);
      case 124:
         if ((active0 & 0x1000L) != 0L)
         {
            jjmatchedKind = 12;
            jjmatchedPos = 1;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 1);
}
private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 1);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 1);
   }
   switch(curChar)
   {
      case 41:
         if ((active0 & 0x400000L) != 0L)
         {
            jjmatchedKind = 22;
            jjmatchedPos = 2;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa3_0(active0, 0x400000000000000L, active1, 0x480000000800L, active2, 0x1003000002000e00L, active3, 0x400100004L);
      case 66:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x3808000000000L, active2, 0L, active3, 0L);
      case 67:
         if ((active0 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 45;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x80000L) != 0L)
         {
            jjmatchedKind = 147;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000000L, active1, 0x9000030L, active2, 0x80202004100000L, active3, 0x2008L);
      case 68:
         if ((active0 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x8L) != 0L)
         {
            jjmatchedKind = 67;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 179;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x80001004060000L, active2, 0L, active3, 0x100000200L);
      case 69:
         return jjMoveStringLiteralDfa3_0(active0, 0x808000000000000L, active1, 0x5e04002000004000L, active2, 0x6040000000000000L, active3, 0L);
      case 70:
         if ((active3 & 0x10L) != 0L)
         {
            jjmatchedKind = 196;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000000L, active1, 0L, active2, 0x200000L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0L, active2, 0x10000000000000L, active3, 0x10000L);
      case 72:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x80000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x60000000000000L, active2, 0x8000000000000004L, active3, 0L);
      case 74:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x4000000000000L, active3, 0L);
      case 75:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x800000L, active2, 0L, active3, 0L);
      case 76:
         if ((active0 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 39;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 109;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0xc0000000000000L, active1, 0x100040080000000L, active2, 0x100080400000L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0L, active2, 0xc00000002000L, active3, 0x38e0000L);
      case 78:
         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0x2000200L, active2, 0x1400800c038L, active3, 0x800000001L);
      case 79:
         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x4010001102L, active2, 0x500010c0L, active3, 0x8000000L);
      case 80:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x10000000000000L, active2, 0x200000000000000L, active3, 0x200000420L);
      case 82:
         if ((active1 & 0x80L) != 0L)
         {
            jjmatchedKind = 71;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x1000000000000000L, active1, 0x8000000000000000L, active2, 0x100000020010000L, active3, 0xf0204000L);
      case 83:
         return jjMoveStringLiteralDfa3_0(active0, 0x8004000000000000L, active1, 0x10000080005L, active2, 0xc00008100000000L, active3, 0x4000c0L);
      case 84:
         if ((active1 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 93;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 161;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 181;
            jjmatchedPos = 2;
         }
         else if ((active3 & 0x8000L) != 0L)
         {
            jjmatchedKind = 207;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000000L, active1, 0x2000000400300440L, active2, 0x60c00820103L, active3, 0x100L);
      case 85:
         return jjMoveStringLiteralDfa3_0(active0, 0x30000000000000L, active1, 0L, active2, 0x1000000L, active3, 0x4000000L);
      case 86:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20000002000L, active2, 0L, active3, 0L);
      case 87:
         if ((active3 & 0x2L) != 0L)
         {
            jjmatchedKind = 193;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000000L, active2, 0L, active3, 0x1800L);
      case 89:
         if ((active2 & 0x40000L) != 0L)
         {
            jjmatchedKind = 146;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 164;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 90:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x100000000000L, active2, 0L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa3_0(active0, 0x400000000000000L, active1, 0x480000000800L, active2, 0x1003000002000e00L, active3, 0x400100004L);
      case 98:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x3808000000000L, active2, 0L, active3, 0L);
      case 99:
         if ((active0 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 45;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x80000L) != 0L)
         {
            jjmatchedKind = 147;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000000L, active1, 0x9000030L, active2, 0x80202004100000L, active3, 0x2008L);
      case 100:
         if ((active0 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x8L) != 0L)
         {
            jjmatchedKind = 67;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 179;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x80001004060000L, active2, 0L, active3, 0x100000200L);
      case 101:
         return jjMoveStringLiteralDfa3_0(active0, 0x808000000000000L, active1, 0x5e04002000004000L, active2, 0x6040000000000000L, active3, 0L);
      case 102:
         if ((active3 & 0x10L) != 0L)
         {
            jjmatchedKind = 196;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000000L, active1, 0L, active2, 0x200000L, active3, 0L);
      case 103:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0L, active2, 0x10000000000000L, active3, 0x10000L);
      case 104:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x80000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x60000000000000L, active2, 0x8000000000000004L, active3, 0L);
      case 106:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x4000000000000L, active3, 0L);
      case 107:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x800000L, active2, 0L, active3, 0L);
      case 108:
         if ((active0 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 39;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 109;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0xc0000000000000L, active1, 0x100040080000000L, active2, 0x100080400000L, active3, 0L);
      case 109:
         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0L, active2, 0xc00000002000L, active3, 0x38e0000L);
      case 110:
         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0x2000200L, active2, 0x1400800c038L, active3, 0x800000001L);
      case 111:
         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x4010001102L, active2, 0x500010c0L, active3, 0x8000000L);
      case 112:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x10000000000000L, active2, 0x200000000000000L, active3, 0x200000420L);
      case 114:
         if ((active1 & 0x80L) != 0L)
         {
            jjmatchedKind = 71;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x1000000000000000L, active1, 0x8000000000000000L, active2, 0x100000020010000L, active3, 0xf0204000L);
      case 115:
         return jjMoveStringLiteralDfa3_0(active0, 0x8004000000000000L, active1, 0x10000080005L, active2, 0xc00008100000000L, active3, 0x4000c0L);
      case 116:
         if ((active1 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 93;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 161;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 181;
            jjmatchedPos = 2;
         }
         else if ((active3 & 0x8000L) != 0L)
         {
            jjmatchedKind = 207;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000000L, active1, 0x2000000400300440L, active2, 0x60c00820103L, active3, 0x100L);
      case 117:
         return jjMoveStringLiteralDfa3_0(active0, 0x30000000000000L, active1, 0L, active2, 0x1000000L, active3, 0x4000000L);
      case 118:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x20000002000L, active2, 0L, active3, 0L);
      case 119:
         if ((active3 & 0x2L) != 0L)
         {
            jjmatchedKind = 193;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000000L, active2, 0L, active3, 0x1800L);
      case 121:
         if ((active2 & 0x40000L) != 0L)
         {
            jjmatchedKind = 146;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 164;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 122:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x100000000000L, active2, 0L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 2);
}
private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 2);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 2);
   }
   switch(curChar)
   {
      case 39:
         if ((active1 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 92;
            jjmatchedPos = 3;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa4_0(active0, 0x4840000000000000L, active1, 0x8081000040000000L, active2, 0x110082018000038L, active3, 0L);
      case 66:
         if ((active2 & 0x40L) != 0L)
         {
            jjmatchedKind = 134;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x1000L) != 0L)
         {
            jjmatchedKind = 140;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x400043000000L, active3, 0L);
      case 67:
         if ((active0 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 63;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x4000000240L, active2, 0x2000000020000000L, active3, 0x30000000L);
      case 69:
         if ((active0 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 50;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x4L) != 0L)
         {
            jjmatchedKind = 66;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x800000L) != 0L)
         {
            jjmatchedKind = 87;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 90;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 108;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 116;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x100L) != 0L)
         {
            jjmatchedKind = 136;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x20000L) != 0L)
         {
            jjmatchedKind = 145;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 216;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 227;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x410001e0010L, active2, 0x204800c04c00000L, active3, 0x2000000L);
      case 71:
         if ((active2 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 166;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1000000000000000L, active3, 0x1L);
      case 72:
         if ((active1 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 125;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L, active1, 0x400002000L, active2, 0x800020080300000L, active3, 0x204800L);
      case 75:
         if ((active1 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 88;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0L);
      case 76:
         if ((active1 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 95;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x4L) != 0L)
         {
            jjmatchedKind = 194;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000000000L, active1, 0x2008000000020L, active2, 0x8000000084L, active3, 0x100020L);
      case 77:
         if ((active1 & 0x100L) != 0L)
         {
            jjmatchedKind = 72;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x8000000000002000L, active3, 0L);
      case 78:
         if ((active1 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 114;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 123;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0x4800L, active2, 0L, active3, 0x10000L);
      case 79:
         if ((active1 & 0x400L) != 0L)
         {
            jjmatchedKind = 74;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x200000L) != 0L)
         {
            jjmatchedKind = 85;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20030008000000L, active2, 0x300000000002L, active3, 0x2008L);
      case 80:
         if ((active1 & 0x2L) != 0L)
         {
            jjmatchedKind = 65;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x100040000000000L, active1, 0L, active2, 0L, active3, 0x8e0000L);
      case 81:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40000000000000L, active2, 0L, active3, 0L);
      case 82:
         if ((active2 & 0x200L) != 0L)
         {
            jjmatchedKind = 137;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 226;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1000482000000000L, active2, 0x43000000010c00L, active3, 0x40000000L);
      case 83:
         if ((active3 & 0x200L) != 0L)
         {
            jjmatchedKind = 201;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x400L) != 0L)
         {
            jjmatchedKind = 202;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x1000L) != 0L)
         {
            jjmatchedKind = 204;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 224;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 225;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x1430000000000000L, active1, 0x4000000000000000L, active2, 0x400000000000c000L, active3, 0x4000000L);
      case 84:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000000001L, active2, 0x10100000000L, active3, 0x40L);
      case 85:
         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x100000002001000L, active2, 0x40000000000L, active3, 0x180L);
      case 87:
         if ((active1 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 121;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x1020000000000L, active1, 0x400000000000000L, active2, 0L, active3, 0x8000000L);
      case 89:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x80000000L);
      case 95:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x400000000000000L, active3, 0x400000L);
      case 97:
         return jjMoveStringLiteralDfa4_0(active0, 0x4840000000000000L, active1, 0x8081000040000000L, active2, 0x110082018000038L, active3, 0L);
      case 98:
         if ((active2 & 0x40L) != 0L)
         {
            jjmatchedKind = 134;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x1000L) != 0L)
         {
            jjmatchedKind = 140;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x400043000000L, active3, 0L);
      case 99:
         if ((active0 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 63;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L, active1, 0x4000000240L, active2, 0x2000000020000000L, active3, 0x30000000L);
      case 101:
         if ((active0 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 50;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x4L) != 0L)
         {
            jjmatchedKind = 66;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x800000L) != 0L)
         {
            jjmatchedKind = 87;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 90;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 108;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 116;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x100L) != 0L)
         {
            jjmatchedKind = 136;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x20000L) != 0L)
         {
            jjmatchedKind = 145;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 216;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 227;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x410001e0010L, active2, 0x204800c04c00000L, active3, 0x2000000L);
      case 103:
         if ((active2 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 166;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1000000000000000L, active3, 0x1L);
      case 104:
         if ((active1 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 125;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L, active1, 0x400002000L, active2, 0x800020080300000L, active3, 0x204800L);
      case 107:
         if ((active1 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 88;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0L);
      case 108:
         if ((active1 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 95;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x4L) != 0L)
         {
            jjmatchedKind = 194;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000000000L, active1, 0x2008000000020L, active2, 0x8000000084L, active3, 0x100020L);
      case 109:
         if ((active1 & 0x100L) != 0L)
         {
            jjmatchedKind = 72;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x8000000000002000L, active3, 0L);
      case 110:
         if ((active1 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 114;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 123;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0x4800L, active2, 0L, active3, 0x10000L);
      case 111:
         if ((active1 & 0x400L) != 0L)
         {
            jjmatchedKind = 74;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x200000L) != 0L)
         {
            jjmatchedKind = 85;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20030008000000L, active2, 0x300000000002L, active3, 0x2008L);
      case 112:
         if ((active1 & 0x2L) != 0L)
         {
            jjmatchedKind = 65;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x100040000000000L, active1, 0L, active2, 0L, active3, 0x8e0000L);
      case 113:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40000000000000L, active2, 0L, active3, 0L);
      case 114:
         if ((active2 & 0x200L) != 0L)
         {
            jjmatchedKind = 137;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 226;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1000482000000000L, active2, 0x43000000010c00L, active3, 0x40000000L);
      case 115:
         if ((active3 & 0x200L) != 0L)
         {
            jjmatchedKind = 201;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x400L) != 0L)
         {
            jjmatchedKind = 202;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x1000L) != 0L)
         {
            jjmatchedKind = 204;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 224;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 225;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x1430000000000000L, active1, 0x4000000000000000L, active2, 0x400000000000c000L, active3, 0x4000000L);
      case 116:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000000001L, active2, 0x10100000000L, active3, 0x40L);
      case 117:
         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x100000002001000L, active2, 0x40000000000L, active3, 0x180L);
      case 119:
         if ((active1 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 121;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x1020000000000L, active1, 0x400000000000000L, active2, 0L, active3, 0x8000000L);
      case 121:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x80000000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 3);
}
private int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 3);
   }
   switch(curChar)
   {
      case 39:
         if ((active1 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 126;
            jjmatchedPos = 4;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0L, active2, 0x8080008140000400L, active3, 0x40004020L);
      case 66:
         if ((active2 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 172;
            jjmatchedPos = 4;
         }
         break;
      case 67:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000L, active2, 0x7000000000000L, active3, 0L);
      case 68:
         if ((active3 & 0x800L) != 0L)
         {
            jjmatchedKind = 203;
            jjmatchedPos = 4;
         }
         break;
      case 69:
         if ((active0 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 42;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 107;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 113;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 124;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x4L) != 0L)
         {
            jjmatchedKind = 130;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 157;
            jjmatchedPos = 4;
         }
         else if ((active3 & 0x1L) != 0L)
         {
            jjmatchedKind = 192;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x201000000000000L, active1, 0x100004000000000L, active2, 0x4000400000010080L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x40000000000000L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x400000000L, active3, 0L);
      case 72:
         if ((active0 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 58;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x40L) != 0L)
         {
            jjmatchedKind = 70;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 168;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x30000000L);
      case 73:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8040000001L, active2, 0x2400000000002001L, active3, 0x88000000L);
      case 75:
         if ((active0 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 51;
            jjmatchedPos = 4;
         }
         break;
      case 76:
         if ((active2 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 155;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 165;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x22000000000L, active2, 0x300000003000000L, active3, 0x1e0080L);
      case 77:
         return jjMoveStringLiteralDfa5_0(active0, 0x80000000000000L, active1, 0x8000000L, active2, 0x1000000000100000L, active3, 0L);
      case 78:
         if ((active0 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 47;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 117;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000L, active2, 0x10000080200002L, active3, 0x202000L);
      case 79:
         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000000L, active1, 0x400000000L, active2, 0x20000000000L, active3, 0x800000L);
      case 80:
         if ((active1 & 0x1000L) != 0L)
         {
            jjmatchedKind = 76;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10L, active2, 0x200004000000L, active3, 0L);
      case 82:
         if ((active0 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 40;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 100;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 171;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x100000000000000L, active1, 0x180000L, active2, 0x840800800038L, active3, 0x400148L);
      case 83:
         if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 89;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 122;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x800L, active3, 0x2000000L);
      case 84:
         if ((active1 & 0x800L) != 0L)
         {
            jjmatchedKind = 75;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 110;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 156;
            jjmatchedPos = 4;
         }
         else if ((active3 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 218;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x830020000000000L, active1, 0x80000000004200L, active2, 0x80000000040c000L, active3, 0x10000L);
      case 85:
         return jjMoveStringLiteralDfa5_0(active0, 0x4040000000000000L, active1, 0x41010000000020L, active2, 0L, active3, 0L);
      case 88:
         if ((active1 & 0x20000L) != 0L)
         {
            jjmatchedKind = 81;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000L, active2, 0L, active3, 0L);
      case 89:
         if ((active1 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 127;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000L, active2, 0L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0L, active2, 0x8080008140000400L, active3, 0x40004020L);
      case 98:
         if ((active2 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 172;
            jjmatchedPos = 4;
         }
         break;
      case 99:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000000000L, active2, 0x7000000000000L, active3, 0L);
      case 100:
         if ((active3 & 0x800L) != 0L)
         {
            jjmatchedKind = 203;
            jjmatchedPos = 4;
         }
         break;
      case 101:
         if ((active0 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 42;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 107;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 113;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 124;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x4L) != 0L)
         {
            jjmatchedKind = 130;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 157;
            jjmatchedPos = 4;
         }
         else if ((active3 & 0x1L) != 0L)
         {
            jjmatchedKind = 192;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x201000000000000L, active1, 0x100004000000000L, active2, 0x4000400000010080L, active3, 0L);
      case 102:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x40000000000000L, active3, 0L);
      case 103:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x400000000L, active3, 0L);
      case 104:
         if ((active0 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 58;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x40L) != 0L)
         {
            jjmatchedKind = 70;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 168;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x30000000L);
      case 105:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8040000001L, active2, 0x2400000000002001L, active3, 0x88000000L);
      case 107:
         if ((active0 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 51;
            jjmatchedPos = 4;
         }
         break;
      case 108:
         if ((active2 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 155;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 165;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x22000000000L, active2, 0x300000003000000L, active3, 0x1e0080L);
      case 109:
         return jjMoveStringLiteralDfa5_0(active0, 0x80000000000000L, active1, 0x8000000L, active2, 0x1000000000100000L, active3, 0L);
      case 110:
         if ((active0 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 47;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 117;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000L, active2, 0x10000080200002L, active3, 0x202000L);
      case 111:
         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000000L, active1, 0x400000000L, active2, 0x20000000000L, active3, 0x800000L);
      case 112:
         if ((active1 & 0x1000L) != 0L)
         {
            jjmatchedKind = 76;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x10L, active2, 0x200004000000L, active3, 0L);
      case 114:
         if ((active0 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 40;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 100;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 171;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x100000000000000L, active1, 0x180000L, active2, 0x840800800038L, active3, 0x400148L);
      case 115:
         if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 89;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 122;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x800L, active3, 0x2000000L);
      case 116:
         if ((active1 & 0x800L) != 0L)
         {
            jjmatchedKind = 75;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 110;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 156;
            jjmatchedPos = 4;
         }
         else if ((active3 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 218;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x830020000000000L, active1, 0x80000000004200L, active2, 0x80000000040c000L, active3, 0x10000L);
      case 117:
         return jjMoveStringLiteralDfa5_0(active0, 0x4040000000000000L, active1, 0x41010000000020L, active2, 0L, active3, 0L);
      case 120:
         if ((active1 & 0x20000L) != 0L)
         {
            jjmatchedKind = 81;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40000L, active2, 0L, active3, 0L);
      case 121:
         if ((active1 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 127;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000000L, active2, 0L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 4);
}
private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 4);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 4);
   }
   switch(curChar)
   {
      case 65:
         if ((active2 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 188;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000000000L, active2, 0x40000104080L, active3, 0x30000000L);
      case 66:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x8000000000L, active3, 0L);
      case 67:
         if ((active1 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 103;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000L, active1, 0L, active2, 0x400L, active3, 0x20L);
      case 68:
         if ((active2 & 0x1L) != 0L)
         {
            jjmatchedKind = 128;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x8L) != 0L)
         {
            jjmatchedKind = 195;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x2000L) != 0L)
         {
            jjmatchedKind = 205;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 219;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000L, active2, 0L, active3, 0L);
      case 69:
         if ((active0 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 59;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 105;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 118;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 119;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x400000L) != 0L)
         {
            jjmatchedKind = 150;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 152;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 153;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 159;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x131000000000000L, active1, 0x40000L, active2, 0x400200800L, active3, 0x4e0000L);
      case 71:
         if ((active1 & 0x2000L) != 0L)
         {
            jjmatchedKind = 77;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x200000L) != 0L)
         {
            jjmatchedKind = 213;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x3000000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4200L, active2, 0xa10800000000000L, active3, 0x100040L);
      case 76:
         if ((active2 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 158;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000000L, active1, 0L, active2, 0x140000000000000L, active3, 0x4000L);
      case 77:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 78:
         if ((active1 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 98;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x100L) != 0L)
         {
            jjmatchedKind = 200;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x1L, active2, 0x400020100010000L, active3, 0x80000000L);
      case 79:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x2L, active3, 0L);
      case 80:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800008000000L, active2, 0L, active3, 0L);
      case 82:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 60;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 174;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x2000000000000000L, active1, 0x10000000000L, active2, 0xc000000000008000L, active3, 0x800000L);
      case 83:
         if ((active1 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 120;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100020L, active2, 0x2000000000000000L, active3, 0L);
      case 84:
         if ((active1 & 0x80000L) != 0L)
         {
            jjmatchedKind = 83;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 94;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 106;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x2000L) != 0L)
         {
            jjmatchedKind = 141;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 178;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x40000000000000L, active1, 0x1000000000010L, active2, 0x4000000L, active3, 0x2000080L);
      case 86:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x800000000L, active3, 0L);
      case 89:
         if ((active2 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 173;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 222;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000L, active1, 0L, active2, 0x38L, active3, 0x10000L);
      case 97:
         if ((active2 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 188;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000000000L, active2, 0x40000104080L, active3, 0x30000000L);
      case 98:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x8000000000L, active3, 0L);
      case 99:
         if ((active1 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 103;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000L, active1, 0L, active2, 0x400L, active3, 0x20L);
      case 100:
         if ((active2 & 0x1L) != 0L)
         {
            jjmatchedKind = 128;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x8L) != 0L)
         {
            jjmatchedKind = 195;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x2000L) != 0L)
         {
            jjmatchedKind = 205;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 219;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000L, active2, 0L, active3, 0L);
      case 101:
         if ((active0 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 59;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 105;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 118;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 119;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x400000L) != 0L)
         {
            jjmatchedKind = 150;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 152;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 153;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 159;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x131000000000000L, active1, 0x40000L, active2, 0x400200800L, active3, 0x4e0000L);
      case 103:
         if ((active1 & 0x2000L) != 0L)
         {
            jjmatchedKind = 77;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x200000L) != 0L)
         {
            jjmatchedKind = 213;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0L);
      case 104:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x3000000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4200L, active2, 0xa10800000000000L, active3, 0x100040L);
      case 108:
         if ((active2 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 158;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000000L, active1, 0L, active2, 0x140000000000000L, active3, 0x4000L);
      case 109:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 110:
         if ((active1 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 98;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x100L) != 0L)
         {
            jjmatchedKind = 200;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x1L, active2, 0x400020100010000L, active3, 0x80000000L);
      case 111:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x2L, active3, 0L);
      case 112:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800008000000L, active2, 0L, active3, 0L);
      case 114:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 60;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 174;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x2000000000000000L, active1, 0x10000000000L, active2, 0xc000000000008000L, active3, 0x800000L);
      case 115:
         if ((active1 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 120;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x100020L, active2, 0x2000000000000000L, active3, 0L);
      case 116:
         if ((active1 & 0x80000L) != 0L)
         {
            jjmatchedKind = 83;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 94;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 106;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x2000L) != 0L)
         {
            jjmatchedKind = 141;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 178;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x40000000000000L, active1, 0x1000000000010L, active2, 0x4000000L, active3, 0x2000080L);
      case 118:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x800000000L, active3, 0L);
      case 121:
         if ((active2 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 173;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 222;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000L, active1, 0L, active2, 0x38L, active3, 0x10000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 5);
}
private int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 5);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 5);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x3020800008000L, active3, 0x2800000L);
      case 67:
         if ((active2 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 175;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000000001L, active2, 0L, active3, 0x40L);
      case 69:
         if ((active0 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 61;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 111;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 183;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x20L) != 0L)
         {
            jjmatchedKind = 197;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100000L, active2, 0x100008000000000L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000L, active2, 0L, active3, 0x400000L);
      case 71:
         if ((active3 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 223;
            jjmatchedPos = 6;
         }
         break;
      case 72:
         if ((active0 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 54;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 112;
            jjmatchedPos = 6;
         }
         break;
      case 73:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x30L, active2, 0x2000000004800000L, active3, 0L);
      case 76:
         if ((active2 & 0x100000L) != 0L)
         {
            jjmatchedKind = 148;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 170;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000L);
      case 77:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x2L, active3, 0L);
      case 78:
         if ((active0 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 48;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80L) != 0L)
         {
            jjmatchedKind = 135;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x200000000004000L, active3, 0x100000L);
      case 79:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x200L, active2, 0x40000000000000L, active3, 0L);
      case 80:
         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000L, active1, 0x2000000000L, active2, 0L, active3, 0x10000L);
      case 82:
         if ((active0 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 53;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x200000L) != 0L)
         {
            jjmatchedKind = 149;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 162;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 221;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x10000000000000L, active1, 0x8000000L, active2, 0L, active3, 0x10000000L);
      case 83:
         if ((active0 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 55;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x40000L) != 0L)
         {
            jjmatchedKind = 82;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x100000000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 84:
         if ((active0 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 57;
            jjmatchedPos = 6;
         }
         else if ((active0 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 62;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x800L) != 0L)
         {
            jjmatchedKind = 139;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x400000100010400L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000000000L, active2, 0L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x4800000000000000L, active3, 0L);
      case 89:
         if ((active2 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 191;
            jjmatchedPos = 6;
         }
         break;
      case 90:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x38L, active3, 0xe0080L);
      case 97:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x3020800008000L, active3, 0x2800000L);
      case 99:
         if ((active2 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 175;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000000001L, active2, 0L, active3, 0x40L);
      case 101:
         if ((active0 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 61;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 111;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 183;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x20L) != 0L)
         {
            jjmatchedKind = 197;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x100000L, active2, 0x100008000000000L, active3, 0L);
      case 102:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000L, active2, 0L, active3, 0x400000L);
      case 103:
         if ((active3 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 223;
            jjmatchedPos = 6;
         }
         break;
      case 104:
         if ((active0 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 54;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 112;
            jjmatchedPos = 6;
         }
         break;
      case 105:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x30L, active2, 0x2000000004800000L, active3, 0L);
      case 108:
         if ((active2 & 0x100000L) != 0L)
         {
            jjmatchedKind = 148;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 170;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000L);
      case 109:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x2L, active3, 0L);
      case 110:
         if ((active0 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 48;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80L) != 0L)
         {
            jjmatchedKind = 135;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x200000000004000L, active3, 0x100000L);
      case 111:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x200L, active2, 0x40000000000000L, active3, 0L);
      case 112:
         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000L, active1, 0x2000000000L, active2, 0L, active3, 0x10000L);
      case 114:
         if ((active0 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 53;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x200000L) != 0L)
         {
            jjmatchedKind = 149;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 162;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 221;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x10000000000000L, active1, 0x8000000L, active2, 0L, active3, 0x10000000L);
      case 115:
         if ((active0 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 55;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x40000L) != 0L)
         {
            jjmatchedKind = 82;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x100000000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 116:
         if ((active0 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 57;
            jjmatchedPos = 6;
         }
         else if ((active0 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 62;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x800L) != 0L)
         {
            jjmatchedKind = 139;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x400000100010400L, active3, 0L);
      case 117:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4000000000L, active2, 0L, active3, 0L);
      case 118:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x4800000000000000L, active3, 0L);
      case 121:
         if ((active2 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 191;
            jjmatchedPos = 6;
         }
         break;
      case 122:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 6);
}
private int jjMoveStringLiteralDfa7_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 6);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 6);
   }
   switch(curChar)
   {
      case 50:
         if ((active3 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 220;
            jjmatchedPos = 7;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x100000L, active2, 0L, active3, 0x400080L);
      case 68:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x20000L);
      case 69:
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 41;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 104;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 187;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 190;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x10000L) != 0L)
         {
            jjmatchedKind = 208;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x8000000L, active2, 0x600000000000400L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10L, active3, 0x40000L);
      case 73:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000L, active2, 0x100008020L, active3, 0x80000L);
      case 76:
         if ((active2 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 163;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 167;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 169;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x100000000000000L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x2000000L);
      case 78:
         if ((active1 & 0x200L) != 0L)
         {
            jjmatchedKind = 73;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10L, active2, 0x2000000004000002L, active3, 0L);
      case 82:
         if ((active2 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 177;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000000000L, active2, 0x1000000000000L, active3, 0x800000L);
      case 83:
         if ((active0 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 52;
            jjmatchedPos = 7;
         }
         else if ((active0 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 56;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 101;
            jjmatchedPos = 7;
         }
         break;
      case 84:
         if ((active1 & 0x1L) != 0L)
         {
            jjmatchedKind = 64;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x4000L) != 0L)
         {
            jjmatchedKind = 142;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x100000L) != 0L)
         {
            jjmatchedKind = 212;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x40L);
      case 86:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20L, active2, 0L, active3, 0L);
      case 87:
         if ((active2 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 182;
            jjmatchedPos = 7;
         }
         break;
      case 89:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000L);
      case 95:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10000L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x100000L, active2, 0L, active3, 0x400080L);
      case 100:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x20000L);
      case 101:
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 41;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 104;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 187;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 190;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x10000L) != 0L)
         {
            jjmatchedKind = 208;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x8000000L, active2, 0x600000000000400L, active3, 0L);
      case 102:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10L, active3, 0x40000L);
      case 105:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000L, active2, 0x100008020L, active3, 0x80000L);
      case 108:
         if ((active2 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 163;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 167;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 169;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x100000000000000L, active3, 0L);
      case 109:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x2000000L);
      case 110:
         if ((active1 & 0x200L) != 0L)
         {
            jjmatchedKind = 73;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10L, active2, 0x2000000004000002L, active3, 0L);
      case 114:
         if ((active2 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 177;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4000000000L, active2, 0x1000000000000L, active3, 0x800000L);
      case 115:
         if ((active0 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 52;
            jjmatchedPos = 7;
         }
         else if ((active0 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 56;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 101;
            jjmatchedPos = 7;
         }
         break;
      case 116:
         if ((active1 & 0x1L) != 0L)
         {
            jjmatchedKind = 64;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x4000L) != 0L)
         {
            jjmatchedKind = 142;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x100000L) != 0L)
         {
            jjmatchedKind = 212;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x40L);
      case 118:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20L, active2, 0L, active3, 0L);
      case 119:
         if ((active2 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 182;
            jjmatchedPos = 7;
         }
         break;
      case 121:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 7);
}
private int jjMoveStringLiteralDfa8_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 7);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 7);
   }
   switch(curChar)
   {
      case 50:
         if ((active2 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 176;
            jjmatchedPos = 8;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x100000000L, active3, 0x80L);
      case 68:
         if ((active2 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 185;
            jjmatchedPos = 8;
         }
         break;
      case 69:
         if ((active1 & 0x20L) != 0L)
         {
            jjmatchedKind = 69;
            jjmatchedPos = 8;
         }
         else if ((active1 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 102;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active1, 0x4000L, active2, 0L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x400000000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x800000L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x10L, active3, 0x40000L);
      case 78:
         if ((active1 & 0x10L) != 0L)
         {
            jjmatchedKind = 68;
            jjmatchedPos = 8;
         }
         else if ((active2 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 189;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x4008020L, active3, 0x80000L);
      case 79:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x8L, active3, 0x20000L);
      case 80:
         if ((active3 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 217;
            jjmatchedPos = 8;
         }
         break;
      case 82:
         if ((active2 & 0x400L) != 0L)
         {
            jjmatchedKind = 138;
            jjmatchedPos = 8;
         }
         break;
      case 83:
         return jjMoveStringLiteralDfa9_0(active1, 0x8000000L, active2, 0L, active3, 0L);
      case 84:
         if ((active1 & 0x100000L) != 0L)
         {
            jjmatchedKind = 84;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x10002L, active3, 0x400000L);
      case 89:
         if ((active3 & 0x800000L) != 0L)
         {
            jjmatchedKind = 215;
            jjmatchedPos = 8;
         }
         break;
      case 95:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x100000000000000L, active3, 0x4040L);
      case 97:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x100000000L, active3, 0x80L);
      case 100:
         if ((active2 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 185;
            jjmatchedPos = 8;
         }
         break;
      case 101:
         if ((active1 & 0x20L) != 0L)
         {
            jjmatchedKind = 69;
            jjmatchedPos = 8;
         }
         else if ((active1 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 102;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active1, 0x4000L, active2, 0L, active3, 0L);
      case 103:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x400000000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x800000L, active3, 0L);
      case 108:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x10L, active3, 0x40000L);
      case 110:
         if ((active1 & 0x10L) != 0L)
         {
            jjmatchedKind = 68;
            jjmatchedPos = 8;
         }
         else if ((active2 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 189;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x4008020L, active3, 0x80000L);
      case 111:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x8L, active3, 0x20000L);
      case 112:
         if ((active3 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 217;
            jjmatchedPos = 8;
         }
         break;
      case 114:
         if ((active2 & 0x400L) != 0L)
         {
            jjmatchedKind = 138;
            jjmatchedPos = 8;
         }
         break;
      case 115:
         return jjMoveStringLiteralDfa9_0(active1, 0x8000000L, active2, 0L, active3, 0L);
      case 116:
         if ((active1 & 0x100000L) != 0L)
         {
            jjmatchedKind = 84;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 117:
         return jjMoveStringLiteralDfa9_0(active1, 0L, active2, 0x10002L, active3, 0x400000L);
      case 121:
         if ((active3 & 0x800000L) != 0L)
         {
            jjmatchedKind = 215;
            jjmatchedPos = 8;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 8);
}
private int jjMoveStringLiteralDfa9_0(long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 8);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 8);
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x100000000L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0L, active3, 0x80L);
      case 68:
         if ((active1 & 0x4000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 9;
         }
         break;
      case 69:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x500000000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x10L, active3, 0x40000L);
      case 82:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0L, active3, 0x404040L);
      case 83:
         if ((active1 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 91;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x810002L, active3, 0L);
      case 84:
         if ((active2 & 0x8000L) != 0L)
         {
            jjmatchedKind = 143;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x20L, active3, 0x80000L);
      case 85:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x8L, active3, 0x20000L);
      case 95:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x4000000L, active3, 0L);
      case 98:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x100000000L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0L, active3, 0x80L);
      case 100:
         if ((active1 & 0x4000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 9;
         }
         break;
      case 101:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x500000000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x10L, active3, 0x40000L);
      case 114:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0L, active3, 0x404040L);
      case 115:
         if ((active1 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 91;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x810002L, active3, 0L);
      case 116:
         if ((active2 & 0x8000L) != 0L)
         {
            jjmatchedKind = 143;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x20L, active3, 0x80000L);
      case 117:
         return jjMoveStringLiteralDfa10_0(active1, 0L, active2, 0x8L, active3, 0x20000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 9);
}
private int jjMoveStringLiteralDfa10_0(long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 9);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 9);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa11_0(active2, 0x10L, active3, 0x40000L);
      case 66:
         return jjMoveStringLiteralDfa11_0(active2, 0x8L, active3, 0x20000L);
      case 69:
         return jjMoveStringLiteralDfa11_0(active2, 0x10020L, active3, 0x84040L);
      case 72:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x80L);
      case 73:
         return jjMoveStringLiteralDfa11_0(active2, 0x4000000L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa11_0(active2, 0x100000000L, active3, 0L);
      case 78:
         return jjMoveStringLiteralDfa11_0(active2, 0x100000000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa11_0(active2, 0x10000000000000L, active3, 0L);
      case 82:
         if ((active2 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 186;
            jjmatchedPos = 10;
         }
         break;
      case 83:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x400000L);
      case 84:
         return jjMoveStringLiteralDfa11_0(active2, 0x800000L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa11_0(active2, 0x2L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa11_0(active2, 0x10L, active3, 0x40000L);
      case 98:
         return jjMoveStringLiteralDfa11_0(active2, 0x8L, active3, 0x20000L);
      case 101:
         return jjMoveStringLiteralDfa11_0(active2, 0x10020L, active3, 0x84040L);
      case 104:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x80L);
      case 105:
         return jjMoveStringLiteralDfa11_0(active2, 0x4000000L, active3, 0L);
      case 108:
         return jjMoveStringLiteralDfa11_0(active2, 0x100000000L, active3, 0L);
      case 110:
         return jjMoveStringLiteralDfa11_0(active2, 0x100000000000000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa11_0(active2, 0x10000000000000L, active3, 0L);
      case 114:
         if ((active2 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 186;
            jjmatchedPos = 10;
         }
         break;
      case 115:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x400000L);
      case 116:
         return jjMoveStringLiteralDfa11_0(active2, 0x800000L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 10);
}
private int jjMoveStringLiteralDfa11_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 10);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 10);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa12_0(active2, 0x100000000000000L, active3, 0L);
      case 69:
         if ((active2 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 160;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x80L) != 0L)
         {
            jjmatchedKind = 199;
            jjmatchedPos = 11;
         }
         break;
      case 70:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x40L);
      case 71:
         return jjMoveStringLiteralDfa12_0(active2, 0x20L, active3, 0x80000L);
      case 73:
         return jjMoveStringLiteralDfa12_0(active2, 0x800000L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa12_0(active2, 0x8L, active3, 0x20000L);
      case 78:
         if ((active2 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 180;
            jjmatchedPos = 11;
         }
         return jjMoveStringLiteralDfa12_0(active2, 0x4000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x400000L);
      case 82:
         if ((active2 & 0x10000L) != 0L)
         {
            jjmatchedKind = 144;
            jjmatchedPos = 11;
         }
         break;
      case 84:
         if ((active2 & 0x10L) != 0L)
         {
            jjmatchedKind = 132;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x40000L) != 0L)
         {
            jjmatchedKind = 210;
            jjmatchedPos = 11;
         }
         return jjMoveStringLiteralDfa12_0(active2, 0x2L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x4000L);
      case 97:
         return jjMoveStringLiteralDfa12_0(active2, 0x100000000000000L, active3, 0L);
      case 101:
         if ((active2 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 160;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x80L) != 0L)
         {
            jjmatchedKind = 199;
            jjmatchedPos = 11;
         }
         break;
      case 102:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x40L);
      case 103:
         return jjMoveStringLiteralDfa12_0(active2, 0x20L, active3, 0x80000L);
      case 105:
         return jjMoveStringLiteralDfa12_0(active2, 0x800000L, active3, 0L);
      case 108:
         return jjMoveStringLiteralDfa12_0(active2, 0x8L, active3, 0x20000L);
      case 110:
         if ((active2 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 180;
            jjmatchedPos = 11;
         }
         return jjMoveStringLiteralDfa12_0(active2, 0x4000000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x400000L);
      case 114:
         if ((active2 & 0x10000L) != 0L)
         {
            jjmatchedKind = 144;
            jjmatchedPos = 11;
         }
         break;
      case 116:
         if ((active2 & 0x10L) != 0L)
         {
            jjmatchedKind = 132;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x40000L) != 0L)
         {
            jjmatchedKind = 210;
            jjmatchedPos = 11;
         }
         return jjMoveStringLiteralDfa12_0(active2, 0x2L, active3, 0L);
      case 117:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x4000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 11);
}
private int jjMoveStringLiteralDfa12_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 11);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 11);
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa13_0(active2, 0x100000000000000L, active3, 0L);
      case 67:
         if ((active2 & 0x800000L) != 0L)
         {
            jjmatchedKind = 151;
            jjmatchedPos = 12;
         }
         break;
      case 69:
         if ((active2 & 0x8L) != 0L)
         {
            jjmatchedKind = 131;
            jjmatchedPos = 12;
         }
         else if ((active3 & 0x20000L) != 0L)
         {
            jjmatchedKind = 209;
            jjmatchedPos = 12;
         }
         return jjMoveStringLiteralDfa13_0(active2, 0x20L, active3, 0x80040L);
      case 73:
         return jjMoveStringLiteralDfa13_0(active2, 0x4000000L, active3, 0L);
      case 82:
         if ((active3 & 0x400000L) != 0L)
         {
            jjmatchedKind = 214;
            jjmatchedPos = 12;
         }
         return jjMoveStringLiteralDfa13_0(active2, 0x2L, active3, 0L);
      case 83:
         return jjMoveStringLiteralDfa13_0(active2, 0L, active3, 0x4000L);
      case 98:
         return jjMoveStringLiteralDfa13_0(active2, 0x100000000000000L, active3, 0L);
      case 99:
         if ((active2 & 0x800000L) != 0L)
         {
            jjmatchedKind = 151;
            jjmatchedPos = 12;
         }
         break;
      case 101:
         if ((active2 & 0x8L) != 0L)
         {
            jjmatchedKind = 131;
            jjmatchedPos = 12;
         }
         else if ((active3 & 0x20000L) != 0L)
         {
            jjmatchedKind = 209;
            jjmatchedPos = 12;
         }
         return jjMoveStringLiteralDfa13_0(active2, 0x20L, active3, 0x80040L);
      case 105:
         return jjMoveStringLiteralDfa13_0(active2, 0x4000000L, active3, 0L);
      case 114:
         if ((active3 & 0x400000L) != 0L)
         {
            jjmatchedKind = 214;
            jjmatchedPos = 12;
         }
         return jjMoveStringLiteralDfa13_0(active2, 0x2L, active3, 0L);
      case 115:
         return jjMoveStringLiteralDfa13_0(active2, 0L, active3, 0x4000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 12);
}
private int jjMoveStringLiteralDfa13_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 12);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 12);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa14_0(active2, 0x2L, active3, 0x4000L);
      case 76:
         return jjMoveStringLiteralDfa14_0(active2, 0x100000000000000L, active3, 0L);
      case 82:
         if ((active2 & 0x20L) != 0L)
         {
            jjmatchedKind = 133;
            jjmatchedPos = 13;
         }
         else if ((active3 & 0x80000L) != 0L)
         {
            jjmatchedKind = 211;
            jjmatchedPos = 13;
         }
         return jjMoveStringLiteralDfa14_0(active2, 0L, active3, 0x40L);
      case 84:
         if ((active2 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 154;
            jjmatchedPos = 13;
         }
         break;
      case 97:
         return jjMoveStringLiteralDfa14_0(active2, 0x2L, active3, 0x4000L);
      case 108:
         return jjMoveStringLiteralDfa14_0(active2, 0x100000000000000L, active3, 0L);
      case 114:
         if ((active2 & 0x20L) != 0L)
         {
            jjmatchedKind = 133;
            jjmatchedPos = 13;
         }
         else if ((active3 & 0x80000L) != 0L)
         {
            jjmatchedKind = 211;
            jjmatchedPos = 13;
         }
         return jjMoveStringLiteralDfa14_0(active2, 0L, active3, 0x40L);
      case 116:
         if ((active2 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 154;
            jjmatchedPos = 13;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 13);
}
private int jjMoveStringLiteralDfa14_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 13);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 13);
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa15_0(active2, 0L, active3, 0x4000L);
      case 69:
         if ((active2 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 184;
            jjmatchedPos = 14;
         }
         return jjMoveStringLiteralDfa15_0(active2, 0L, active3, 0x40L);
      case 78:
         return jjMoveStringLiteralDfa15_0(active2, 0x2L, active3, 0L);
      case 98:
         return jjMoveStringLiteralDfa15_0(active2, 0L, active3, 0x4000L);
      case 101:
         if ((active2 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 184;
            jjmatchedPos = 14;
         }
         return jjMoveStringLiteralDfa15_0(active2, 0L, active3, 0x40L);
      case 110:
         return jjMoveStringLiteralDfa15_0(active2, 0x2L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 14);
}
private int jjMoveStringLiteralDfa15_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 14);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 14);
   }
   switch(curChar)
   {
      case 76:
         return jjMoveStringLiteralDfa16_0(active2, 0L, active3, 0x4000L);
      case 78:
         return jjMoveStringLiteralDfa16_0(active2, 0L, active3, 0x40L);
      case 83:
         return jjMoveStringLiteralDfa16_0(active2, 0x2L, active3, 0L);
      case 108:
         return jjMoveStringLiteralDfa16_0(active2, 0L, active3, 0x4000L);
      case 110:
         return jjMoveStringLiteralDfa16_0(active2, 0L, active3, 0x40L);
      case 115:
         return jjMoveStringLiteralDfa16_0(active2, 0x2L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 15);
}
private int jjMoveStringLiteralDfa16_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 15);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 15);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa17_0(active2, 0x2L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa17_0(active2, 0L, active3, 0x40L);
      case 69:
         if ((active3 & 0x4000L) != 0L)
         {
            jjmatchedKind = 206;
            jjmatchedPos = 16;
         }
         break;
      case 97:
         return jjMoveStringLiteralDfa17_0(active2, 0x2L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa17_0(active2, 0L, active3, 0x40L);
      case 101:
         if ((active3 & 0x4000L) != 0L)
         {
            jjmatchedKind = 206;
            jjmatchedPos = 16;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 16);
}
private int jjMoveStringLiteralDfa17_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 16);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 16);
   }
   switch(curChar)
   {
      case 67:
         return jjMoveStringLiteralDfa18_0(active2, 0x2L, active3, 0L);
      case 69:
         return jjMoveStringLiteralDfa18_0(active2, 0L, active3, 0x40L);
      case 99:
         return jjMoveStringLiteralDfa18_0(active2, 0x2L, active3, 0L);
      case 101:
         return jjMoveStringLiteralDfa18_0(active2, 0L, active3, 0x40L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 17);
}
private int jjMoveStringLiteralDfa18_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 17);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 17);
   }
   switch(curChar)
   {
      case 83:
         if ((active3 & 0x40L) != 0L)
         {
            jjmatchedKind = 198;
            jjmatchedPos = 18;
         }
         break;
      case 84:
         return jjMoveStringLiteralDfa19_0(active2, 0x2L, active3, 0L);
      case 115:
         if ((active3 & 0x40L) != 0L)
         {
            jjmatchedKind = 198;
            jjmatchedPos = 18;
         }
         break;
      case 116:
         return jjMoveStringLiteralDfa19_0(active2, 0x2L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 18);
}
private int jjMoveStringLiteralDfa19_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 18);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 18);
   }
   switch(curChar)
   {
      case 73:
         return jjMoveStringLiteralDfa20_0(active2, 0x2L);
      case 105:
         return jjMoveStringLiteralDfa20_0(active2, 0x2L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 19);
}
private int jjMoveStringLiteralDfa20_0(long old2, long active2)
{
   if (((active2 &= old2)) == 0L)
      return jjMoveNfa_0(5, 19);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 19);
   }
   switch(curChar)
   {
      case 79:
         return jjMoveStringLiteralDfa21_0(active2, 0x2L);
      case 111:
         return jjMoveStringLiteralDfa21_0(active2, 0x2L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 20);
}
private int jjMoveStringLiteralDfa21_0(long old2, long active2)
{
   if (((active2 &= old2)) == 0L)
      return jjMoveNfa_0(5, 20);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 20);
   }
   switch(curChar)
   {
      case 78:
         if ((active2 & 0x2L) != 0L)
         {
            jjmatchedKind = 129;
            jjmatchedPos = 21;
         }
         break;
      case 110:
         if ((active2 & 0x2L) != 0L)
         {
            jjmatchedKind = 129;
            jjmatchedPos = 21;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 21);
}
static final long[] jjbitVec0 = {
   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
};
static final long[] jjbitVec2 = {
   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
};
private int jjMoveNfa_0(int startState, int curPos)
{
   int strKind = jjmatchedKind;
   int strPos = jjmatchedPos;
   int seenUpto;
   input_stream.backup(seenUpto = curPos + 1);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { throw new Error("Internal Error"); }
   curPos = 0;
   int startsAt = 0;
   jjnewStateCnt = 71;
   int i = 1;
   jjstateSet[0] = startState;
   int kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         do
         {
            switch(jjstateSet[--i])
            {
               case 5:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 35)
                        kind = 35;
                     jjCheckNAddStates(0, 6);
                  }
                  else if (curChar == 46)
                     jjCheckNAddTwoStates(51, 61);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(48, 49);
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(43, 44);
                  else if (curChar == 58)
                     jjAddStates(7, 9);
                  else if (curChar == 47)
                     jjstateSet[jjnewStateCnt++] = 6;
                  else if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 0:
                  if (curChar == 45)
                     jjCheckNAddStates(10, 12);
                  break;
               case 1:
                  if ((0xffffffffffffdbffL & l) != 0L)
                     jjCheckNAddStates(10, 12);
                  break;
               case 2:
                  if ((0x2400L & l) != 0L && kind > 6)
                     kind = 6;
                  break;
               case 3:
                  if (curChar == 10 && kind > 6)
                     kind = 6;
                  break;
               case 4:
                  if (curChar == 13)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 6:
                  if (curChar == 42)
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 7:
                  if ((0xfffffbffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 8:
                  if (curChar == 42)
                     jjCheckNAddStates(13, 15);
                  break;
               case 9:
                  if ((0xffff7bffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 10:
                  if ((0xfffffbffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 11:
                  if (curChar == 47 && kind > 7)
                     kind = 7;
                  break;
               case 12:
                  if (curChar == 47)
                     jjstateSet[jjnewStateCnt++] = 6;
                  break;
               case 14:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 228)
                     kind = 228;
                  jjstateSet[jjnewStateCnt++] = 14;
                  break;
               case 15:
                  if (curChar == 58)
                     jjAddStates(7, 9);
                  break;
               case 17:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjAddStates(16, 17);
                  break;
               case 18:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 19;
                  break;
               case 20:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjstateSet[jjnewStateCnt++] = 20;
                  break;
               case 21:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddStates(18, 24);
                  break;
               case 22:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(22);
                  break;
               case 23:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(23, 24);
                  break;
               case 24:
                  if (curChar == 46)
                     jjCheckNAdd(25);
                  break;
               case 25:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(25);
                  break;
               case 26:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(26, 27);
                  break;
               case 28:
                  if ((0x280000000000L & l) != 0L)
                     jjAddStates(25, 26);
                  break;
               case 29:
                  if (curChar == 46)
                     jjCheckNAdd(30);
                  break;
               case 30:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(30);
                  break;
               case 31:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddStates(27, 29);
                  break;
               case 32:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(32);
                  break;
               case 33:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(33, 34);
                  break;
               case 34:
                  if (curChar == 46)
                     jjCheckNAdd(35);
                  break;
               case 35:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(35);
                  break;
               case 36:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddStates(30, 32);
                  break;
               case 37:
                  if (curChar == 46)
                     jjCheckNAdd(38);
                  break;
               case 38:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(38, 27);
                  break;
               case 39:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(40, 41);
                  break;
               case 40:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(40);
                  break;
               case 41:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(41, 27);
                  break;
               case 42:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 43:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 44:
                  if (curChar != 39)
                     break;
                  if (kind > 232)
                     kind = 232;
                  jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 45:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 46:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 47:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(48, 49);
                  break;
               case 48:
                  if ((0xfffffffbffffdbffL & l) != 0L)
                     jjCheckNAddTwoStates(48, 49);
                  break;
               case 49:
                  if (curChar == 34 && kind > 233)
                     kind = 233;
                  break;
               case 50:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(51, 61);
                  break;
               case 51:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(51, 52);
                  break;
               case 53:
                  if ((0x280000000000L & l) != 0L)
                     jjAddStates(33, 34);
                  break;
               case 54:
                  if (curChar == 46)
                     jjCheckNAdd(55);
                  break;
               case 55:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(55);
                  break;
               case 56:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddStates(35, 37);
                  break;
               case 57:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(57);
                  break;
               case 58:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(58, 59);
                  break;
               case 59:
                  if (curChar == 46)
                     jjCheckNAdd(60);
                  break;
               case 60:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(60);
                  break;
               case 61:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(61);
                  break;
               case 62:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddStates(0, 6);
                  break;
               case 63:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(63, 52);
                  break;
               case 64:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddStates(38, 40);
                  break;
               case 65:
                  if (curChar == 46)
                     jjCheckNAdd(66);
                  break;
               case 66:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(66, 52);
                  break;
               case 67:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(67, 68);
                  break;
               case 68:
                  if (curChar == 46)
                     jjCheckNAdd(69);
                  break;
               case 69:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(69);
                  break;
               case 70:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(70);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 5:
               case 13:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 228)
                     kind = 228;
                  jjCheckNAddTwoStates(13, 14);
                  break;
               case 1:
                  jjAddStates(10, 12);
                  break;
               case 7:
                  jjCheckNAddTwoStates(7, 8);
                  break;
               case 9:
               case 10:
                  jjCheckNAddTwoStates(10, 8);
                  break;
               case 14:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 228)
                     kind = 228;
                  jjCheckNAdd(14);
                  break;
               case 16:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddStates(41, 43);
                  break;
               case 17:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(17, 18);
                  break;
               case 19:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAddTwoStates(19, 20);
                  break;
               case 20:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 231)
                     kind = 231;
                  jjCheckNAdd(20);
                  break;
               case 27:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(44, 46);
                  break;
               case 43:
                  jjCheckNAddTwoStates(43, 44);
                  break;
               case 46:
                  jjCheckNAddTwoStates(46, 44);
                  break;
               case 48:
                  jjAddStates(47, 48);
                  break;
               case 52:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(49, 51);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int hiByte = (int)(curChar >> 8);
         int i1 = hiByte >> 6;
         long l1 = 1L << (hiByte & 077);
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjAddStates(10, 12);
                  break;
               case 7:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 9:
               case 10:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 43:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 46:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 48:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjAddStates(47, 48);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 71 - (jjnewStateCnt = startsAt)))
         break;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { break; }
   }
   if (jjmatchedPos > strPos)
      return curPos;

   int toRet = Math.max(curPos, seenUpto);

   if (curPos < toRet)
      for (i = toRet - Math.min(curPos, seenUpto); i-- > 0; )
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { throw new Error("Internal Error : Please send a bug report."); }

   if (jjmatchedPos < strPos)
   {
      jjmatchedKind = strKind;
      jjmatchedPos = strPos;
   }
   else if (jjmatchedPos == strPos && jjmatchedKind > strKind)
      jjmatchedKind = strKind;

   return toRet;
}
static final int[] jjnextStates = {
   63, 64, 65, 52, 67, 68, 70, 16, 21, 39, 1, 2, 4, 8, 9, 11, 
   17, 18, 22, 23, 24, 26, 36, 37, 27, 29, 31, 32, 33, 34, 36, 37, 
   27, 54, 56, 57, 58, 59, 64, 65, 52, 16, 17, 18, 28, 29, 31, 48, 
   49, 53, 54, 56, 
};
private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
{
   switch(hiByte)
   {
      case 0:
         return ((jjbitVec2[i2] & l2) != 0L);
      default :
         if ((jjbitVec0[i1] & l1) != 0L)
            return true;
         return false;
   }
}

/** Token literal values. */
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, "\72\75", "\52", "\100", "\51", 
"\174\174", "\72", "\54", "\56", "\56\56", "\44", "\45", "\75", "\76", "\76\75", 
"\50\53\51", "\74", "\74\75", "\55", "\74\76", "\41\75", "\50", "\53", "\43", "\77", "\73", 
"\57", "\176", null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, };

/** Lexer state names. */
public static final String[] lexStateNames = {
   "DEFAULT",
};
static final long[] jjtoToken = {
   0xffffff8fffffff01L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x39fffffffffL, 
};
static final long[] jjtoSkip = {
   0xfeL, 0x0L, 0x0L, 0x0L, 
};
protected JavaCharStream input_stream;
private final int[] jjrounds = new int[71];
private final int[] jjstateSet = new int[142];
protected char curChar;
/** Constructor. */
public DDLParserTokenManager(JavaCharStream stream){
   if (JavaCharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}

/** Constructor. */
public DDLParserTokenManager(JavaCharStream stream, int lexState){
   this(stream);
   SwitchTo(lexState);
}

/** Reinitialise parser. */
public void ReInit(JavaCharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 71; i-- > 0;)
      jjrounds[i] = 0x80000000;
}

/** Reinitialise parser. */
public void ReInit(JavaCharStream stream, int lexState)
{
   ReInit(stream);
   SwitchTo(lexState);
}

/** Switch to specified lex state. */
public void SwitchTo(int lexState)
{
   if (lexState >= 1 || lexState < 0)
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
   else
      curLexState = lexState;
}

protected Token jjFillToken()
{
   final Token t;
   final String curTokenImage;
   final int beginLine;
   final int endLine;
   final int beginColumn;
   final int endColumn;
   String im = jjstrLiteralImages[jjmatchedKind];
   curTokenImage = (im == null) ? input_stream.GetImage() : im;
   beginLine = input_stream.getBeginLine();
   beginColumn = input_stream.getBeginColumn();
   endLine = input_stream.getEndLine();
   endColumn = input_stream.getEndColumn();
   t = Token.newToken(jjmatchedKind, curTokenImage);

   t.beginLine = beginLine;
   t.endLine = endLine;
   t.beginColumn = beginColumn;
   t.endColumn = endColumn;

   return t;
}

int curLexState = 0;
int defaultLexState = 0;
int jjnewStateCnt;
int jjround;
int jjmatchedPos;
int jjmatchedKind;

/** Get the next Token. */
public Token getNextToken() 
{
  Token matchedToken;
  int curPos = 0;

  EOFLoop :
  for (;;)
  {
   try
   {
      curChar = input_stream.BeginToken();
   }
   catch(java.io.IOException e)
   {
      jjmatchedKind = 0;
      matchedToken = jjFillToken();
      return matchedToken;
   }

   jjmatchedKind = 0x7fffffff;
   jjmatchedPos = 0;
   curPos = jjMoveStringLiteralDfa0_0();
   if (jjmatchedKind != 0x7fffffff)
   {
      if (jjmatchedPos + 1 < curPos)
         input_stream.backup(curPos - jjmatchedPos - 1);
      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
      {
         matchedToken = jjFillToken();
         return matchedToken;
      }
      else
      {
         continue EOFLoop;
      }
   }
   int error_line = input_stream.getEndLine();
   int error_column = input_stream.getEndColumn();
   String error_after = null;
   boolean EOFSeen = false;
   try { input_stream.readChar(); input_stream.backup(1); }
   catch (java.io.IOException e1) {
      EOFSeen = true;
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
      if (curChar == '\n' || curChar == '\r') {
         error_line++;
         error_column = 0;
      }
      else
         error_column++;
   }
   if (!EOFSeen) {
      input_stream.backup(1);
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
   }
   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
  }
}

private void jjCheckNAdd(int state)
{
   if (jjrounds[state] != jjround)
   {
      jjstateSet[jjnewStateCnt++] = state;
      jjrounds[state] = jjround;
   }
}
private void jjAddStates(int start, int end)
{
   do {
      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
   } while (start++ != end);
}
private void jjCheckNAddTwoStates(int state1, int state2)
{
   jjCheckNAdd(state1);
   jjCheckNAdd(state2);
}

private void jjCheckNAddStates(int start, int end)
{
   do {
      jjCheckNAdd(jjnextStates[start]);
   } while (start++ != end);
}

}
