/* Generated By:JJTree&JavaCC: Do not edit this line. XPathTokenManager.java */
package org.apache.xpath.parser;

import java.util.Stack;


public class XPathTokenManager implements XPathConstants
{
  private java.util.Vector stateStack = new java.util.Vector();
  private void pushState() {
    stateStack.addElement(new Integer(curLexState));
  }
  private void pushState(int state) {
    stateStack.addElement(new Integer(state));
  }
  private void popState() {
    if(stateStack.size() == 0)
    {
      printLinePos();
    }

    int nextState = ((Integer)stateStack.lastElement()).intValue();

    stateStack.setSize(stateStack.size() - 1);
    SwitchTo(nextState);
  }

  public void printLinePos()
  {
    System.err.println("Line: "+input_stream.getEndLine());
  }

private final int jjMoveStringLiteralDfa0_15()
{
   return jjMoveNfa_15(0, 0);
}
private final void jjCheckNAdd(int state)
{
   if (jjrounds[state] != jjround)
   {
      jjstateSet[jjnewStateCnt++] = state;
      jjrounds[state] = jjround;
   }
}
private final void jjAddStates(int start, int end)
{
   do {
      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
   } while (start++ != end);
}
private final void jjCheckNAddTwoStates(int state1, int state2)
{
   jjCheckNAdd(state1);
   jjCheckNAdd(state2);
}
private final void jjCheckNAddStates(int start, int end)
{
   do {
      jjCheckNAdd(jjnextStates[start]);
   } while (start++ != end);
}
private final void jjCheckNAddStates(int start)
{
   jjCheckNAdd(jjnextStates[start]);
   jjCheckNAdd(jjnextStates[start + 1]);
}
static final long[] jjbitVec0 = {
   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x7fffffffffffffffL
};
static final long[] jjbitVec2 = {
   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
};
static final long[] jjbitVec3 = {
   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x3fffffffffffffffL
};
private final int jjMoveNfa_15(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0xffffffff00002600L & l) != 0L)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_10(int pos, long active0, long active1)
{
   switch (pos)
   {
      default :
         return -1;
   }
}
private final int jjStartNfa_10(int pos, long active0, long active1)
{
   return jjMoveNfa_10(jjStopStringLiteralDfa_10(pos, active0, active1), pos + 1);
}
private final int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private final int jjStartNfaWithStates_10(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_10(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_10()
{
   switch(curChar)
   {
      case 123:
         return jjStopAtPos(0, 119);
      default :
         return jjMoveNfa_10(0, 0);
   }
}
private final int jjMoveNfa_10(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0x100002600L & l) == 0L)
                     break;
                  kind = 4;
                  jjstateSet[jjnewStateCnt++] = 0;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_16()
{
   return jjMoveNfa_16(0, 0);
}
private final int jjMoveNfa_16(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0xffffffff00002600L & l) != 0L)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_3(int pos, long active0, long active1)
{
   switch (pos)
   {
      case 0:
         if ((active0 & 0x10000000000000L) != 0L)
            return 8;
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_3(int pos, long active0, long active1)
{
   return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_3(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_3(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_3()
{
   switch(curChar)
   {
      case 36:
         return jjStopAtPos(0, 113);
      case 40:
         return jjStopAtPos(0, 79);
      case 41:
         return jjStopAtPos(0, 83);
      case 42:
         return jjStartNfaWithStates_3(0, 52, 8);
      case 46:
         jjmatchedKind = 108;
         return jjMoveStringLiteralDfa1_3(0x0L, 0x200000000000L);
      case 47:
         jjmatchedKind = 55;
         return jjMoveStringLiteralDfa1_3(0x100000000000000L, 0x0L);
      case 64:
         return jjStopAtPos(0, 80);
      default :
         return jjMoveNfa_3(6, 0);
   }
}
private final int jjMoveStringLiteralDfa1_3(long active0, long active1)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_3(0, active0, active1);
      return 1;
   }
   switch(curChar)
   {
      case 46:
         if ((active1 & 0x200000000000L) != 0L)
            return jjStopAtPos(1, 109);
         break;
      case 47:
         if ((active0 & 0x100000000000000L) != 0L)
            return jjStopAtPos(1, 56);
         break;
      default :
         break;
   }
   return jjStartNfa_3(0, active0, active1);
}
static final long[] jjbitVec4 = {
   0x0L, 0xffffffffffffc000L, 0xfffff0007fffffffL, 0x7fffffL
};
static final long[] jjbitVec5 = {
   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
};
static final long[] jjbitVec6 = {
   0x7ff3ffffffffffffL, 0x7ffffffffffffdfeL, 0xffffffffffffffffL, 0xfc31ffffffffe00fL
};
static final long[] jjbitVec7 = {
   0xffffffL, 0xffffffffffff0000L, 0xf80001ffffffffffL, 0x3L
};
static final long[] jjbitVec8 = {
   0x0L, 0x0L, 0xfffffffbffffd740L, 0xffffd547f7fffL
};
static final long[] jjbitVec9 = {
   0xffffffffffffdffeL, 0xffffffffdffeffffL, 0xffffffffffff0003L, 0x33fcfffffff199fL
};
static final long[] jjbitVec10 = {
   0xfffe000000000000L, 0xfffffffe027fffffL, 0x7fL, 0x707ffffff0000L
};
static final long[] jjbitVec11 = {
   0x7fffffe00000000L, 0xfffe0000000007feL, 0x7cffffffffffffffL, 0x60002f7fffL
};
static final long[] jjbitVec12 = {
   0x23ffffffffffffe0L, 0x3ff000000L, 0x3c5fdfffff99fe0L, 0x30003b0000000L
};
static final long[] jjbitVec13 = {
   0x36dfdfffff987e0L, 0x1c00005e000000L, 0x23edfdfffffbafe0L, 0x100000000L
};
static final long[] jjbitVec14 = {
   0x23cdfdfffff99fe0L, 0x3b0000000L, 0x3bfc718d63dc7e0L, 0x0L
};
static final long[] jjbitVec15 = {
   0x3effdfffffddfe0L, 0x300000000L, 0x3effdfffffddfe0L, 0x340000000L
};
static final long[] jjbitVec16 = {
   0x3fffdfffffddfe0L, 0x300000000L, 0x0L, 0x0L
};
static final long[] jjbitVec17 = {
   0xd7ffffffffffeL, 0x3fL, 0x200d6caefef02596L, 0x1fL
};
static final long[] jjbitVec18 = {
   0x0L, 0x3fffffffeffL, 0x0L, 0x0L
};
static final long[] jjbitVec19 = {
   0x0L, 0x0L, 0xffffffff00000000L, 0x7fffffffff003fL
};
static final long[] jjbitVec20 = {
   0x500000000007daedL, 0x2c62ab82315001L, 0xf580c90040000000L, 0x201080000000007L
};
static final long[] jjbitVec21 = {
   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffff0fffffffL, 0x3ffffffffffffffL
};
static final long[] jjbitVec22 = {
   0xffffffff3f3fffffL, 0x3fffffffaaff3f3fL, 0x5fdfffffffffffffL, 0x1fdc1fff0fcf1fdcL
};
static final long[] jjbitVec23 = {
   0x4c4000000000L, 0x0L, 0x7L, 0x0L
};
static final long[] jjbitVec24 = {
   0x3fe00000080L, 0xfffffffffffffffeL, 0xfffffffe001fffffL, 0x7ffffffffffffffL
};
static final long[] jjbitVec25 = {
   0x1fffffffffe0L, 0x0L, 0x0L, 0x0L
};
static final long[] jjbitVec26 = {
   0xffffffffffffffffL, 0xffffffffffffffffL, 0x3fffffffffL, 0x0L
};
static final long[] jjbitVec27 = {
   0xffffffffffffffffL, 0xffffffffffffffffL, 0xfffffffffL, 0x0L
};
static final long[] jjbitVec28 = {
   0x0L, 0x0L, 0x80000000000000L, 0xff7fffffff7fffffL
};
static final long[] jjbitVec29 = {
   0xffffffL, 0xffffffffffff0000L, 0xf80001ffffffffffL, 0x30003L
};
static final long[] jjbitVec30 = {
   0xffffffffffffffffL, 0x30000003fL, 0xfffffffbffffd7c0L, 0xffffd547f7fffL
};
static final long[] jjbitVec31 = {
   0xffffffffffffdffeL, 0xffffffffdffeffffL, 0xffffffffffff007bL, 0x33fcfffffff199fL
};
static final long[] jjbitVec32 = {
   0xfffe000000000000L, 0xfffffffe027fffffL, 0xbbfffffbfffe007fL, 0x707ffffff0016L
};
static final long[] jjbitVec33 = {
   0x7fffffe00000000L, 0xffff03ff0007ffffL, 0x7cffffffffffffffL, 0x3ff3dffffef7fffL
};
static final long[] jjbitVec34 = {
   0xf3ffffffffffffeeL, 0xffcfff1e3fffL, 0xd3c5fdfffff99feeL, 0x3ffcfb080399fL
};
static final long[] jjbitVec35 = {
   0xd36dfdfffff987e4L, 0x1fffc05e003987L, 0xf3edfdfffffbafeeL, 0xffc100003bbfL
};
static final long[] jjbitVec36 = {
   0xf3cdfdfffff99feeL, 0xffc3b0c0398fL, 0xc3bfc718d63dc7ecL, 0xff8000803dc7L
};
static final long[] jjbitVec37 = {
   0xc3effdfffffddfeeL, 0xffc300603ddfL, 0xc3effdfffffddfecL, 0xffc340603ddfL
};
static final long[] jjbitVec38 = {
   0xc3fffdfffffddfecL, 0xffc300803dcfL, 0x0L, 0x0L
};
static final long[] jjbitVec39 = {
   0x7ff7ffffffffffeL, 0x3ff7fffL, 0x3bff6caefef02596L, 0x3ff3f5fL
};
static final long[] jjbitVec40 = {
   0xc2a003ff03000000L, 0xfffe03fffffffeffL, 0x2fe3ffffebf0fdfL, 0x0L
};
static final long[] jjbitVec41 = {
   0x0L, 0x0L, 0x0L, 0x21fff0000L
};
static final long[] jjbitVec42 = {
   0x3efffe000000a0L, 0xfffffffffffffffeL, 0xfffffffe661fffffL, 0x77ffffffffffffffL
};
private final int jjMoveNfa_3(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 227;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((0x100002600L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAddTwoStates(18, 19);
                  }
                  else if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 8;
                  break;
               case 1:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(0, 1);
                  break;
               case 2:
                  if (curChar == 58 && kind > 9)
                     kind = 9;
                  break;
               case 3:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               case 7:
                  if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 8;
                  break;
               case 8:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 9;
                  break;
               case 10:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjstateSet[jjnewStateCnt++] = 10;
                  break;
               case 12:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(2, 3);
                  break;
               case 13:
                  if (curChar == 40 && kind > 102)
                     kind = 102;
                  break;
               case 17:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAddTwoStates(18, 19);
                  break;
               case 18:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(18);
                  break;
               case 19:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(19);
                  break;
               case 22:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(4, 5);
                  break;
               case 23:
                  if (curChar == 58 && kind > 5)
                     kind = 5;
                  break;
               case 24:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 23;
                  break;
               case 29:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(6, 7);
                  break;
               case 30:
                  if (curChar == 40 && kind > 101)
                     kind = 101;
                  break;
               case 38:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(8, 9);
                  break;
               case 39:
                  if (curChar == 58 && kind > 6)
                     kind = 6;
                  break;
               case 40:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 39;
                  break;
               case 50:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(10, 11);
                  break;
               case 51:
                  if (curChar == 58 && kind > 10)
                     kind = 10;
                  break;
               case 52:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 51;
                  break;
               case 56:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 55;
                  break;
               case 59:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 58;
                  break;
               case 71:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(12, 13);
                  break;
               case 72:
                  if (curChar == 58 && kind > 7)
                     kind = 7;
                  break;
               case 73:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 72;
                  break;
               case 79:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(14, 15);
                  break;
               case 80:
                  if (curChar == 58 && kind > 13)
                     kind = 13;
                  break;
               case 81:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 80;
                  break;
               case 88:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 87;
                  break;
               case 98:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(16, 17);
                  break;
               case 99:
                  if (curChar == 58 && kind > 15)
                     kind = 15;
                  break;
               case 100:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 99;
                  break;
               case 109:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(18, 19);
                  break;
               case 110:
                  if (curChar == 40 && kind > 103)
                     kind = 103;
                  break;
               case 121:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 120;
                  break;
               case 133:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(20, 21);
                  break;
               case 134:
                  if (curChar == 58 && kind > 8)
                     kind = 8;
                  break;
               case 135:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 134;
                  break;
               case 144:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(22, 23);
                  break;
               case 145:
                  if (curChar == 58 && kind > 11)
                     kind = 11;
                  break;
               case 146:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 145;
                  break;
               case 154:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(24, 25);
                  break;
               case 155:
                  if (curChar == 58 && kind > 17)
                     kind = 17;
                  break;
               case 156:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 155;
                  break;
               case 160:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 159;
                  break;
               case 163:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 162;
                  break;
               case 173:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(26, 27);
                  break;
               case 174:
                  if (curChar == 58 && kind > 12)
                     kind = 12;
                  break;
               case 175:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 174;
                  break;
               case 182:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 181;
                  break;
               case 192:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(28, 29);
                  break;
               case 193:
                  if (curChar == 58 && kind > 14)
                     kind = 14;
                  break;
               case 194:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 193;
                  break;
               case 204:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(30, 31);
                  break;
               case 205:
                  if (curChar == 58 && kind > 16)
                     kind = 16;
                  break;
               case 206:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 205;
                  break;
               case 215:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(32, 33);
                  break;
               case 216:
                  if (curChar == 40 && kind > 100)
                     kind = 100;
                  break;
               case 220:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjAddStates(34, 35);
                  break;
               case 221:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 222;
                  break;
               case 222:
                  if (curChar == 42 && kind > 53)
                     kind = 53;
                  break;
               case 223:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjAddStates(36, 37);
                  break;
               case 224:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 225;
                  break;
               case 226:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjstateSet[jjnewStateCnt++] = 226;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAddStates(38, 42);
                  }
                  if (curChar == 110)
                     jjAddStates(43, 44);
                  else if (curChar == 102)
                     jjAddStates(45, 46);
                  else if (curChar == 97)
                     jjAddStates(47, 49);
                  else if (curChar == 112)
                     jjAddStates(50, 53);
                  else if (curChar == 100)
                     jjAddStates(54, 55);
                  else if (curChar == 99)
                     jjAddStates(56, 57);
                  else if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 15;
                  else if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 5;
                  break;
               case 0:
                  if (curChar == 102)
                     jjAddStates(0, 1);
                  break;
               case 4:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 5:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 4;
                  break;
               case 9:
               case 10:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(10);
                  break;
               case 11:
                  if (curChar == 116)
                     jjAddStates(2, 3);
                  break;
               case 14:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 11;
                  break;
               case 15:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 14;
                  break;
               case 16:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 20:
                  if (curChar == 99)
                     jjAddStates(56, 57);
                  break;
               case 21:
                  if (curChar == 100)
                     jjAddStates(4, 5);
                  break;
               case 25:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 21;
                  break;
               case 26:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 25;
                  break;
               case 27:
                  if (curChar == 104)
                     jjstateSet[jjnewStateCnt++] = 26;
                  break;
               case 28:
                  if (curChar == 116)
                     jjAddStates(6, 7);
                  break;
               case 31:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 28;
                  break;
               case 32:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 31;
                  break;
               case 33:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 32;
                  break;
               case 34:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 33;
                  break;
               case 35:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 34;
                  break;
               case 36:
                  if (curChar == 100)
                     jjAddStates(54, 55);
                  break;
               case 37:
                  if (curChar == 116)
                     jjAddStates(8, 9);
                  break;
               case 41:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 37;
                  break;
               case 42:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 41;
                  break;
               case 43:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 42;
                  break;
               case 44:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 43;
                  break;
               case 45:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 44;
                  break;
               case 46:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 47:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 46;
                  break;
               case 48:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 47;
                  break;
               case 49:
                  if (curChar == 102)
                     jjAddStates(10, 11);
                  break;
               case 53:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 49;
                  break;
               case 54:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 53;
                  break;
               case 55:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 54;
                  break;
               case 57:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 56;
                  break;
               case 58:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 57;
                  break;
               case 60:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 59;
                  break;
               case 61:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 60;
                  break;
               case 62:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 61;
                  break;
               case 63:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 62;
                  break;
               case 64:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 63;
                  break;
               case 65:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 64;
                  break;
               case 66:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 65;
                  break;
               case 67:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 66;
                  break;
               case 68:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 67;
                  break;
               case 69:
                  if (curChar == 112)
                     jjAddStates(50, 53);
                  break;
               case 70:
                  if (curChar == 116)
                     jjAddStates(12, 13);
                  break;
               case 74:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 70;
                  break;
               case 75:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 74;
                  break;
               case 76:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 75;
                  break;
               case 77:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 76;
                  break;
               case 78:
                  if (curChar == 103)
                     jjAddStates(14, 15);
                  break;
               case 82:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 78;
                  break;
               case 83:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 82;
                  break;
               case 84:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 83;
                  break;
               case 85:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 84;
                  break;
               case 86:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 85;
                  break;
               case 87:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 86;
                  break;
               case 89:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 88;
                  break;
               case 90:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 89;
                  break;
               case 91:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 90;
                  break;
               case 92:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 91;
                  break;
               case 93:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 92;
                  break;
               case 94:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 93;
                  break;
               case 95:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 94;
                  break;
               case 96:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 95;
                  break;
               case 97:
                  if (curChar == 103)
                     jjAddStates(16, 17);
                  break;
               case 101:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 97;
                  break;
               case 102:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 101;
                  break;
               case 103:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 102;
                  break;
               case 104:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 103;
                  break;
               case 105:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 104;
                  break;
               case 106:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 105;
                  break;
               case 107:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 106;
                  break;
               case 108:
                  if (curChar == 110)
                     jjAddStates(18, 19);
                  break;
               case 111:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 108;
                  break;
               case 112:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 111;
                  break;
               case 113:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 112;
                  break;
               case 114:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 113;
                  break;
               case 115:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 114;
                  break;
               case 116:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 115;
                  break;
               case 117:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 116;
                  break;
               case 118:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 117;
                  break;
               case 119:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 118;
                  break;
               case 120:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 119;
                  break;
               case 122:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 121;
                  break;
               case 123:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 122;
                  break;
               case 124:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 123;
                  break;
               case 125:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 124;
                  break;
               case 126:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 125;
                  break;
               case 127:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 126;
                  break;
               case 128:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 127;
                  break;
               case 129:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 128;
                  break;
               case 130:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 129;
                  break;
               case 131:
                  if (curChar == 97)
                     jjAddStates(47, 49);
                  break;
               case 132:
                  if (curChar == 101)
                     jjAddStates(20, 21);
                  break;
               case 136:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 132;
                  break;
               case 137:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 136;
                  break;
               case 138:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 137;
                  break;
               case 139:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 138;
                  break;
               case 140:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 139;
                  break;
               case 141:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 140;
                  break;
               case 142:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 141;
                  break;
               case 143:
                  if (curChar == 114)
                     jjAddStates(22, 23);
                  break;
               case 147:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 143;
                  break;
               case 148:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 147;
                  break;
               case 149:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 148;
                  break;
               case 150:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 149;
                  break;
               case 151:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 150;
                  break;
               case 152:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 151;
                  break;
               case 153:
                  if (curChar == 102)
                     jjAddStates(24, 25);
                  break;
               case 157:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 153;
                  break;
               case 158:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 157;
                  break;
               case 159:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 158;
                  break;
               case 161:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 160;
                  break;
               case 162:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 161;
                  break;
               case 164:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 163;
                  break;
               case 165:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 164;
                  break;
               case 166:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 165;
                  break;
               case 167:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 166;
                  break;
               case 168:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 167;
                  break;
               case 169:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 168;
                  break;
               case 170:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 169;
                  break;
               case 171:
                  if (curChar == 102)
                     jjAddStates(45, 46);
                  break;
               case 172:
                  if (curChar == 103)
                     jjAddStates(26, 27);
                  break;
               case 176:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 172;
                  break;
               case 177:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 176;
                  break;
               case 178:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 177;
                  break;
               case 179:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 178;
                  break;
               case 180:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 179;
                  break;
               case 181:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 180;
                  break;
               case 183:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 182;
                  break;
               case 184:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 183;
                  break;
               case 185:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 184;
                  break;
               case 186:
                  if (curChar == 119)
                     jjstateSet[jjnewStateCnt++] = 185;
                  break;
               case 187:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 186;
                  break;
               case 188:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 187;
                  break;
               case 189:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 188;
                  break;
               case 190:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 189;
                  break;
               case 191:
                  if (curChar == 103)
                     jjAddStates(28, 29);
                  break;
               case 195:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 191;
                  break;
               case 196:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 195;
                  break;
               case 197:
                  if (curChar == 119)
                     jjstateSet[jjnewStateCnt++] = 196;
                  break;
               case 198:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 197;
                  break;
               case 199:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 198;
                  break;
               case 200:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 199;
                  break;
               case 201:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 200;
                  break;
               case 202:
                  if (curChar == 110)
                     jjAddStates(43, 44);
                  break;
               case 203:
                  if (curChar == 101)
                     jjAddStates(30, 31);
                  break;
               case 207:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 203;
                  break;
               case 208:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 207;
                  break;
               case 209:
                  if (curChar == 112)
                     jjstateSet[jjnewStateCnt++] = 208;
                  break;
               case 210:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 209;
                  break;
               case 211:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 210;
                  break;
               case 212:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 211;
                  break;
               case 213:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 212;
                  break;
               case 214:
                  if (curChar == 101)
                     jjAddStates(32, 33);
                  break;
               case 217:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 214;
                  break;
               case 218:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 217;
                  break;
               case 219:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(38, 42);
                  break;
               case 220:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(220, 221);
                  break;
               case 223:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(223, 224);
                  break;
               case 225:
               case 226:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(226);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(38, 42);
                  break;
               case 9:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(10);
                  break;
               case 10:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(10);
                  break;
               case 220:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(220, 221);
                  break;
               case 223:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(223, 224);
                  break;
               case 225:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(226);
                  break;
               case 226:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(226);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 227 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_6(int pos, long active0, long active1)
{
   switch (pos)
   {
      case 0:
         if ((active0 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 115;
            return 10;
         }
         if ((active0 & 0x1003000000000L) != 0L || (active1 & 0xec0000000L) != 0L)
         {
            jjmatchedKind = 115;
            return 27;
         }
         return -1;
      case 1:
         if ((active0 & 0x1003000000000L) != 0L || (active1 & 0xec0000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 1;
            return 27;
         }
         if ((active0 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 1;
            return 9;
         }
         return -1;
      case 2:
         if ((active0 & 0x1007000000000L) != 0L || (active1 & 0xec0000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 2;
            return 27;
         }
         return -1;
      case 3:
         if ((active0 & 0x1001000000000L) != 0L || (active1 & 0x200000000L) != 0L)
            return 27;
         if ((active0 & 0x6000000000L) != 0L || (active1 & 0xcc0000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 3;
            return 27;
         }
         return -1;
      case 4:
         if ((active0 & 0x6000000000L) != 0L || (active1 & 0xcc0000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 4;
            return 27;
         }
         return -1;
      case 5:
         if ((active0 & 0x6000000000L) != 0L || (active1 & 0xcc0000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 5;
            return 27;
         }
         return -1;
      case 6:
         if ((active0 & 0x4000000000L) != 0L || (active1 & 0x880000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 6;
            return 27;
         }
         if ((active0 & 0x2000000000L) != 0L || (active1 & 0x440000000L) != 0L)
            return 27;
         return -1;
      case 7:
         if ((active1 & 0x80000000L) != 0L)
            return 27;
         if ((active0 & 0x4000000000L) != 0L || (active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 7;
            return 27;
         }
         return -1;
      case 8:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 8;
            return 27;
         }
         if ((active0 & 0x4000000000L) != 0L)
            return 27;
         return -1;
      case 9:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 9;
            return 27;
         }
         return -1;
      case 10:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 10;
            return 27;
         }
         return -1;
      case 11:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 11;
            return 27;
         }
         return -1;
      case 12:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 12;
            return 27;
         }
         return -1;
      case 13:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 13;
            return 27;
         }
         return -1;
      case 14:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 14;
            return 27;
         }
         return -1;
      case 15:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 15;
            return 27;
         }
         return -1;
      case 16:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 16;
            return 27;
         }
         return -1;
      case 17:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 17;
            return 27;
         }
         return -1;
      case 18:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 18;
            return 27;
         }
         return -1;
      case 19:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 19;
            return 27;
         }
         return -1;
      case 20:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 20;
            return 27;
         }
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_6(int pos, long active0, long active1)
{
   return jjMoveNfa_6(jjStopStringLiteralDfa_6(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_6(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_6(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_6()
{
   switch(curChar)
   {
      case 36:
         return jjStopAtPos(0, 113);
      case 41:
         return jjStopAtPos(0, 83);
      case 46:
         jjmatchedKind = 108;
         return jjMoveStringLiteralDfa1_6(0x0L, 0x200000000000L);
      case 97:
         return jjMoveStringLiteralDfa1_6(0x4000000000L, 0x0L);
      case 99:
         return jjMoveStringLiteralDfa1_6(0x0L, 0x40000000L);
      case 100:
         return jjMoveStringLiteralDfa1_6(0x0L, 0x80000000L);
      case 101:
         return jjMoveStringLiteralDfa1_6(0x2000000000L, 0x0L);
      case 105:
         return jjMoveStringLiteralDfa1_6(0x1000000000L, 0x0L);
      case 110:
         return jjMoveStringLiteralDfa1_6(0x1000000000000L, 0x0L);
      case 112:
         return jjMoveStringLiteralDfa1_6(0x0L, 0x800000000L);
      case 116:
         return jjMoveStringLiteralDfa1_6(0x0L, 0x200000000L);
      case 117:
         return jjMoveStringLiteralDfa1_6(0x0L, 0x400000000L);
      default :
         return jjMoveNfa_6(11, 0);
   }
}
private final int jjMoveStringLiteralDfa1_6(long active0, long active1)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(0, active0, active1);
      return 1;
   }
   switch(curChar)
   {
      case 46:
         if ((active1 & 0x200000000000L) != 0L)
            return jjStopAtPos(1, 109);
         break;
      case 101:
         return jjMoveStringLiteralDfa2_6(active0, 0L, active1, 0x200000000L);
      case 108:
         return jjMoveStringLiteralDfa2_6(active0, 0x2000000000L, active1, 0L);
      case 110:
         return jjMoveStringLiteralDfa2_6(active0, 0L, active1, 0x400000000L);
      case 111:
         return jjMoveStringLiteralDfa2_6(active0, 0x1000000000000L, active1, 0xc0000000L);
      case 114:
         return jjMoveStringLiteralDfa2_6(active0, 0L, active1, 0x800000000L);
      case 116:
         return jjMoveStringLiteralDfa2_6(active0, 0x5000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_6(0, active0, active1);
}
private final int jjMoveStringLiteralDfa2_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(0, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(1, active0, active1);
      return 2;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa3_6(active0, 0L, active1, 0x80000000L);
      case 100:
         return jjMoveStringLiteralDfa3_6(active0, 0x1000000000000L, active1, 0L);
      case 101:
         return jjMoveStringLiteralDfa3_6(active0, 0x3000000000L, active1, 0L);
      case 109:
         return jjMoveStringLiteralDfa3_6(active0, 0L, active1, 0x40000000L);
      case 111:
         return jjMoveStringLiteralDfa3_6(active0, 0L, active1, 0x800000000L);
      case 116:
         return jjMoveStringLiteralDfa3_6(active0, 0x4000000000L, active1, 0x400000000L);
      case 120:
         return jjMoveStringLiteralDfa3_6(active0, 0L, active1, 0x200000000L);
      default :
         break;
   }
   return jjStartNfa_6(1, active0, active1);
}
private final int jjMoveStringLiteralDfa3_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(1, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(2, active0, active1);
      return 3;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa4_6(active0, 0L, active1, 0x800000000L);
      case 101:
         if ((active0 & 0x1000000000000L) != 0L)
            return jjStartNfaWithStates_6(3, 48, 27);
         break;
      case 109:
         if ((active0 & 0x1000000000L) != 0L)
            return jjStartNfaWithStates_6(3, 36, 27);
         return jjMoveStringLiteralDfa4_6(active0, 0x2000000000L, active1, 0x40000000L);
      case 114:
         return jjMoveStringLiteralDfa4_6(active0, 0x4000000000L, active1, 0L);
      case 116:
         if ((active1 & 0x200000000L) != 0L)
            return jjStartNfaWithStates_6(3, 97, 27);
         break;
      case 117:
         return jjMoveStringLiteralDfa4_6(active0, 0L, active1, 0x80000000L);
      case 121:
         return jjMoveStringLiteralDfa4_6(active0, 0L, active1, 0x400000000L);
      default :
         break;
   }
   return jjStartNfa_6(2, active0, active1);
}
private final int jjMoveStringLiteralDfa4_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(2, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(3, active0, active1);
      return 4;
   }
   switch(curChar)
   {
      case 101:
         return jjMoveStringLiteralDfa5_6(active0, 0x2000000000L, active1, 0x840000000L);
      case 105:
         return jjMoveStringLiteralDfa5_6(active0, 0x4000000000L, active1, 0L);
      case 109:
         return jjMoveStringLiteralDfa5_6(active0, 0L, active1, 0x80000000L);
      case 112:
         return jjMoveStringLiteralDfa5_6(active0, 0L, active1, 0x400000000L);
      default :
         break;
   }
   return jjStartNfa_6(3, active0, active1);
}
private final int jjMoveStringLiteralDfa5_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(3, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(4, active0, active1);
      return 5;
   }
   switch(curChar)
   {
      case 98:
         return jjMoveStringLiteralDfa6_6(active0, 0x4000000000L, active1, 0L);
      case 101:
         return jjMoveStringLiteralDfa6_6(active0, 0L, active1, 0x480000000L);
      case 110:
         return jjMoveStringLiteralDfa6_6(active0, 0x2000000000L, active1, 0x40000000L);
      case 115:
         return jjMoveStringLiteralDfa6_6(active0, 0L, active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(4, active0, active1);
}
private final int jjMoveStringLiteralDfa6_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(4, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(5, active0, active1);
      return 6;
   }
   switch(curChar)
   {
      case 100:
         if ((active1 & 0x400000000L) != 0L)
            return jjStartNfaWithStates_6(6, 98, 27);
         break;
      case 110:
         return jjMoveStringLiteralDfa7_6(active0, 0L, active1, 0x80000000L);
      case 115:
         return jjMoveStringLiteralDfa7_6(active0, 0L, active1, 0x800000000L);
      case 116:
         if ((active0 & 0x2000000000L) != 0L)
            return jjStartNfaWithStates_6(6, 37, 27);
         else if ((active1 & 0x40000000L) != 0L)
            return jjStartNfaWithStates_6(6, 94, 27);
         break;
      case 117:
         return jjMoveStringLiteralDfa7_6(active0, 0x4000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_6(5, active0, active1);
}
private final int jjMoveStringLiteralDfa7_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(5, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(6, active0, active1);
      return 7;
   }
   switch(curChar)
   {
      case 105:
         return jjMoveStringLiteralDfa8_6(active0, 0L, active1, 0x800000000L);
      case 116:
         if ((active1 & 0x80000000L) != 0L)
            return jjStartNfaWithStates_6(7, 95, 27);
         return jjMoveStringLiteralDfa8_6(active0, 0x4000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_6(6, active0, active1);
}
private final int jjMoveStringLiteralDfa8_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(6, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(7, active0, active1);
      return 8;
   }
   switch(curChar)
   {
      case 101:
         if ((active0 & 0x4000000000L) != 0L)
            return jjStartNfaWithStates_6(8, 38, 27);
         break;
      case 110:
         return jjMoveStringLiteralDfa9_6(active0, 0L, active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(7, active0, active1);
}
private final int jjMoveStringLiteralDfa9_6(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_6(7, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(8, 0L, active1);
      return 9;
   }
   switch(curChar)
   {
      case 103:
         return jjMoveStringLiteralDfa10_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(8, 0L, active1);
}
private final int jjMoveStringLiteralDfa10_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(8, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(9, 0L, active1);
      return 10;
   }
   switch(curChar)
   {
      case 45:
         return jjMoveStringLiteralDfa11_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(9, 0L, active1);
}
private final int jjMoveStringLiteralDfa11_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(9, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(10, 0L, active1);
      return 11;
   }
   switch(curChar)
   {
      case 105:
         return jjMoveStringLiteralDfa12_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(10, 0L, active1);
}
private final int jjMoveStringLiteralDfa12_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(10, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(11, 0L, active1);
      return 12;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa13_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(11, 0L, active1);
}
private final int jjMoveStringLiteralDfa13_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(11, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(12, 0L, active1);
      return 13;
   }
   switch(curChar)
   {
      case 115:
         return jjMoveStringLiteralDfa14_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(12, 0L, active1);
}
private final int jjMoveStringLiteralDfa14_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(12, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(13, 0L, active1);
      return 14;
   }
   switch(curChar)
   {
      case 116:
         return jjMoveStringLiteralDfa15_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(13, 0L, active1);
}
private final int jjMoveStringLiteralDfa15_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(13, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(14, 0L, active1);
      return 15;
   }
   switch(curChar)
   {
      case 114:
         return jjMoveStringLiteralDfa16_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(14, 0L, active1);
}
private final int jjMoveStringLiteralDfa16_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(14, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(15, 0L, active1);
      return 16;
   }
   switch(curChar)
   {
      case 117:
         return jjMoveStringLiteralDfa17_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(15, 0L, active1);
}
private final int jjMoveStringLiteralDfa17_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(15, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(16, 0L, active1);
      return 17;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa18_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(16, 0L, active1);
}
private final int jjMoveStringLiteralDfa18_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(16, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(17, 0L, active1);
      return 18;
   }
   switch(curChar)
   {
      case 116:
         return jjMoveStringLiteralDfa19_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(17, 0L, active1);
}
private final int jjMoveStringLiteralDfa19_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(17, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(18, 0L, active1);
      return 19;
   }
   switch(curChar)
   {
      case 105:
         return jjMoveStringLiteralDfa20_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(18, 0L, active1);
}
private final int jjMoveStringLiteralDfa20_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(18, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(19, 0L, active1);
      return 20;
   }
   switch(curChar)
   {
      case 111:
         return jjMoveStringLiteralDfa21_6(active1, 0x800000000L);
      default :
         break;
   }
   return jjStartNfa_6(19, 0L, active1);
}
private final int jjMoveStringLiteralDfa21_6(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_6(19, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_6(20, 0L, active1);
      return 21;
   }
   switch(curChar)
   {
      case 110:
         if ((active1 & 0x800000000L) != 0L)
            return jjStartNfaWithStates_6(21, 99, 27);
         break;
      default :
         break;
   }
   return jjStartNfa_6(20, 0L, active1);
}
private final int jjMoveNfa_6(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 27;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 9:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 25;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 22;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 11:
                  if ((0x100002600L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAddTwoStates(17, 18);
                  }
                  else if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 13;
                  break;
               case 27:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 25;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 22;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 10:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 25;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 22;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 1:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(58, 59);
                  break;
               case 12:
                  if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 13;
                  break;
               case 13:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 14;
                  break;
               case 15:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 16:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAddTwoStates(17, 18);
                  break;
               case 17:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(17);
                  break;
               case 18:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(18);
                  break;
               case 20:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 21:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 22;
                  break;
               case 22:
                  if (curChar == 42 && kind > 53)
                     kind = 53;
                  break;
               case 23:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  break;
               case 24:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 25;
                  break;
               case 26:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(26);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 9:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 8;
                  break;
               case 11:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAddStates(60, 64);
                  }
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 10;
                  break;
               case 27:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 10:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 9;
                  break;
               case 0:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 1;
                  break;
               case 2:
                  if (curChar == 101 && kind > 46)
                     kind = 46;
                  break;
               case 3:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               case 4:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 5:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 4;
                  break;
               case 6:
                  if (curChar == 118)
                     jjstateSet[jjnewStateCnt++] = 5;
                  break;
               case 7:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 8:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 7;
                  break;
               case 14:
               case 15:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(15);
                  break;
               case 19:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(60, 64);
                  break;
               case 20:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 23:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  break;
               case 25:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(26);
                  break;
               case 26:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(26);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 9:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  break;
               case 11:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(60, 64);
                  break;
               case 27:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  break;
               case 10:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(26);
                  }
                  break;
               case 14:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(15);
                  break;
               case 15:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(15);
                  break;
               case 20:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(20, 21);
                  break;
               case 23:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  break;
               case 25:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(26);
                  break;
               case 26:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(26);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 27 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_1(int pos, long active0, long active1)
{
   switch (pos)
   {
      default :
         return -1;
   }
}
private final int jjStartNfa_1(int pos, long active0, long active1)
{
   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_1(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_1(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_1()
{
   switch(curChar)
   {
      case 123:
         return jjStartNfaWithStates_1(0, 119, 5);
      default :
         return jjMoveNfa_1(6, 0);
   }
}
private final int jjMoveNfa_1(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 8;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((0xffffffff00002600L & l) != 0L && kind > 121)
                     kind = 121;
                  break;
               case 0:
                  if (curChar == 45)
                     jjCheckNAddTwoStates(1, 4);
                  break;
               case 1:
                  jjCheckNAddTwoStates(1, 4);
                  break;
               case 3:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               case 4:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 5:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if (kind > 121)
                     kind = 121;
                  if (curChar == 123)
                     jjstateSet[jjnewStateCnt++] = 5;
                  break;
               case 1:
                  if ((0xdfffffffffffffffL & l) != 0L)
                     jjAddStates(65, 66);
                  break;
               case 2:
                  if (curChar == 125 && kind > 1)
                     kind = 1;
                  break;
               case 7:
                  if (kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               case 1:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(65, 66);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 8 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_2(int pos, long active0, long active1)
{
   switch (pos)
   {
      case 0:
         if ((active0 & 0x800000L) != 0L)
            return 19;
         if ((active0 & 0x5000000041200000L) != 0L)
         {
            jjmatchedKind = 115;
            return 9;
         }
         if ((active0 & 0x100000L) != 0L)
         {
            jjmatchedKind = 115;
            return 48;
         }
         if ((active0 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            return 26;
         }
         if ((active0 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 115;
            return 38;
         }
         if ((active1 & 0x300000000000L) != 0L)
            return 81;
         if ((active0 & 0x40000L) != 0L)
         {
            jjmatchedKind = 115;
            return 11;
         }
         if ((active0 & 0x8002ac480000L) != 0L || (active1 & 0x20001f0L) != 0L)
         {
            jjmatchedKind = 115;
            return 82;
         }
         if ((active0 & 0x110000000L) != 0L || (active1 & 0x8L) != 0L)
         {
            jjmatchedKind = 115;
            return 33;
         }
         return -1;
      case 1:
         if ((active0 & 0x41000000L) != 0L)
            return 8;
         if ((active0 & 0x400000000L) != 0L)
         {
            if (jjmatchedPos != 1)
            {
               jjmatchedKind = 115;
               jjmatchedPos = 1;
            }
            return 35;
         }
         if ((active0 & 0x5000000020040000L) != 0L || (active1 & 0x1f8L) != 0L)
            return 82;
         if ((active0 & 0x80039e780000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            if (jjmatchedPos != 1)
            {
               jjmatchedKind = 115;
               jjmatchedPos = 1;
            }
            return 82;
         }
         return -1;
      case 2:
         if ((active0 & 0x40008007de200000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 2;
            return 82;
         }
         if ((active0 & 0x580000L) != 0L)
            return 82;
         return -1;
      case 3:
         if ((active0 & 0x800018200000L) != 0L)
            return 82;
         if ((active0 & 0x40000007c6000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 3;
            return 82;
         }
         return -1;
      case 4:
         if ((active0 & 0x4000000080000000L) != 0L)
            return 82;
         if ((active0 & 0x746000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 4;
            return 82;
         }
         return -1;
      case 5:
         if ((active0 & 0x104000000L) != 0L)
            return 82;
         if ((active0 & 0x642000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 5;
            return 82;
         }
         return -1;
      case 6:
         if ((active0 & 0x400000000L) != 0L)
            return 82;
         if ((active0 & 0x242000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 6;
            return 82;
         }
         return -1;
      case 7:
         if ((active0 & 0x200000000L) != 0L || (active1 & 0x2000000L) != 0L)
            return 82;
         if ((active0 & 0x42000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 7;
            return 82;
         }
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_2(int pos, long active0, long active1)
{
   return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_2(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_2(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_2()
{
   switch(curChar)
   {
      case 33:
         return jjMoveStringLiteralDfa1_2(0x2000000000000000L, 0x0L);
      case 36:
         return jjStopAtPos(0, 113);
      case 40:
         return jjStopAtPos(0, 79);
      case 41:
         return jjStopAtPos(0, 83);
      case 42:
         return jjStartNfaWithStates_2(0, 23, 19);
      case 43:
         return jjStopAtPos(0, 76);
      case 44:
         return jjStopAtPos(0, 105);
      case 45:
         return jjStopAtPos(0, 75);
      case 46:
         jjmatchedKind = 108;
         return jjMoveStringLiteralDfa1_2(0x0L, 0x200000000000L);
      case 47:
         jjmatchedKind = 57;
         return jjMoveStringLiteralDfa1_2(0x400000000000000L, 0x0L);
      case 60:
         jjmatchedKind = 73;
         return jjMoveStringLiteralDfa1_2(0x8000000000000000L, 0x1L);
      case 61:
         return jjStopAtPos(0, 59);
      case 62:
         jjmatchedKind = 74;
         return jjMoveStringLiteralDfa1_2(0x0L, 0x6L);
      case 63:
         return jjStopAtPos(0, 77);
      case 91:
         return jjStopAtPos(0, 81);
      case 93:
         return jjStopAtPos(0, 82);
      case 97:
         return jjMoveStringLiteralDfa1_2(0x80000L, 0x0L);
      case 100:
         return jjMoveStringLiteralDfa1_2(0x100000L, 0x0L);
      case 101:
         return jjMoveStringLiteralDfa1_2(0x110000000L, 0x8L);
      case 102:
         return jjMoveStringLiteralDfa1_2(0x400000000L, 0x0L);
      case 103:
         return jjMoveStringLiteralDfa1_2(0x0L, 0x60L);
      case 105:
         return jjMoveStringLiteralDfa1_2(0x5000000041200000L, 0x0L);
      case 108:
         return jjMoveStringLiteralDfa1_2(0x0L, 0x180L);
      case 109:
         return jjMoveStringLiteralDfa1_2(0x400000L, 0x0L);
      case 110:
         return jjMoveStringLiteralDfa1_2(0x0L, 0x10L);
      case 111:
         return jjMoveStringLiteralDfa1_2(0x40000L, 0x0L);
      case 112:
         return jjMoveStringLiteralDfa1_2(0x200000000L, 0x0L);
      case 114:
         return jjMoveStringLiteralDfa1_2(0x4000000L, 0x0L);
      case 115:
         return jjMoveStringLiteralDfa1_2(0x2000000L, 0x0L);
      case 116:
         return jjMoveStringLiteralDfa1_2(0x800028000000L, 0x0L);
      case 117:
         return jjMoveStringLiteralDfa1_2(0x80000000L, 0x0L);
      case 118:
         return jjMoveStringLiteralDfa1_2(0x0L, 0x2000000L);
      case 124:
         return jjStopAtPos(0, 78);
      case 125:
         return jjStopAtPos(0, 120);
      default :
         return jjMoveNfa_2(10, 0);
   }
}
private final int jjMoveStringLiteralDfa1_2(long active0, long active1)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(0, active0, active1);
      return 1;
   }
   switch(curChar)
   {
      case 46:
         if ((active1 & 0x200000000000L) != 0L)
            return jjStopAtPos(1, 109);
         break;
      case 47:
         if ((active0 & 0x400000000000000L) != 0L)
            return jjStopAtPos(1, 58);
         break;
      case 60:
         if ((active1 & 0x1L) != 0L)
            return jjStopAtPos(1, 64);
         break;
      case 61:
         if ((active0 & 0x2000000000000000L) != 0L)
            return jjStopAtPos(1, 61);
         else if ((active0 & 0x8000000000000000L) != 0L)
            return jjStopAtPos(1, 63);
         else if ((active1 & 0x2L) != 0L)
            return jjStopAtPos(1, 65);
         break;
      case 62:
         if ((active1 & 0x4L) != 0L)
            return jjStopAtPos(1, 66);
         break;
      case 97:
         return jjMoveStringLiteralDfa2_2(active0, 0x2000000L, active1, 0x2000000L);
      case 100:
         return jjMoveStringLiteralDfa2_2(active0, 0x200000L, active1, 0L);
      case 101:
         if ((active1 & 0x10L) != 0L)
            return jjStartNfaWithStates_2(1, 68, 82);
         else if ((active1 & 0x40L) != 0L)
            return jjStartNfaWithStates_2(1, 70, 82);
         else if ((active1 & 0x100L) != 0L)
            return jjStartNfaWithStates_2(1, 72, 82);
         return jjMoveStringLiteralDfa2_2(active0, 0x4000000L, active1, 0L);
      case 104:
         return jjMoveStringLiteralDfa2_2(active0, 0x8000000L, active1, 0L);
      case 105:
         return jjMoveStringLiteralDfa2_2(active0, 0x100000L, active1, 0L);
      case 108:
         return jjMoveStringLiteralDfa2_2(active0, 0x10000000L, active1, 0L);
      case 110:
         if ((active0 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 24;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_2(active0, 0xc0080000L, active1, 0L);
      case 111:
         if ((active0 & 0x20000000L) != 0L)
            return jjStartNfaWithStates_2(1, 29, 82);
         return jjMoveStringLiteralDfa2_2(active0, 0x400400000L, active1, 0L);
      case 113:
         if ((active1 & 0x8L) != 0L)
            return jjStartNfaWithStates_2(1, 67, 82);
         break;
      case 114:
         if ((active0 & 0x40000L) != 0L)
            return jjStartNfaWithStates_2(1, 18, 82);
         return jjMoveStringLiteralDfa2_2(active0, 0x200000000L, active1, 0L);
      case 115:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 60;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_2(active0, 0x4000000000000000L, active1, 0L);
      case 116:
         if ((active1 & 0x20L) != 0L)
            return jjStartNfaWithStates_2(1, 69, 82);
         else if ((active1 & 0x80L) != 0L)
            return jjStartNfaWithStates_2(1, 71, 82);
         break;
      case 120:
         return jjMoveStringLiteralDfa2_2(active0, 0x100000000L, active1, 0L);
      case 121:
         return jjMoveStringLiteralDfa2_2(active0, 0x800000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_2(0, active0, active1);
}
private final int jjMoveStringLiteralDfa2_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(0, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(1, active0, active1);
      return 2;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa3_2(active0, 0x100000000L, active1, 0L);
      case 100:
         if ((active0 & 0x80000L) != 0L)
            return jjStartNfaWithStates_2(2, 19, 82);
         else if ((active0 & 0x400000L) != 0L)
            return jjStartNfaWithStates_2(2, 22, 82);
         break;
      case 101:
         return jjMoveStringLiteralDfa3_2(active0, 0x208000000L, active1, 0L);
      case 105:
         return jjMoveStringLiteralDfa3_2(active0, 0x80200000L, active1, 0L);
      case 108:
         return jjMoveStringLiteralDfa3_2(active0, 0x400000000L, active1, 0x2000000L);
      case 110:
         return jjMoveStringLiteralDfa3_2(active0, 0x4000000000000000L, active1, 0L);
      case 112:
         return jjMoveStringLiteralDfa3_2(active0, 0x800000000000L, active1, 0L);
      case 115:
         return jjMoveStringLiteralDfa3_2(active0, 0x10000000L, active1, 0L);
      case 116:
         return jjMoveStringLiteralDfa3_2(active0, 0x46000000L, active1, 0L);
      case 118:
         if ((active0 & 0x100000L) != 0L)
            return jjStartNfaWithStates_2(2, 20, 82);
         break;
      default :
         break;
   }
   return jjStartNfa_2(1, active0, active1);
}
private final int jjMoveStringLiteralDfa3_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(1, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(2, active0, active1);
      return 3;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa4_2(active0, 0x200000000L, active1, 0L);
      case 101:
         if ((active0 & 0x10000000L) != 0L)
            return jjStartNfaWithStates_2(3, 28, 82);
         else if ((active0 & 0x800000000000L) != 0L)
            return jjStartNfaWithStates_2(3, 47, 82);
         return jjMoveStringLiteralDfa4_2(active0, 0x140000000L, active1, 0L);
      case 105:
         return jjMoveStringLiteralDfa4_2(active0, 0x2000000L, active1, 0x2000000L);
      case 108:
         return jjMoveStringLiteralDfa4_2(active0, 0x400000000L, active1, 0L);
      case 110:
         if ((active0 & 0x8000000L) != 0L)
            return jjStartNfaWithStates_2(3, 27, 82);
         break;
      case 111:
         return jjMoveStringLiteralDfa4_2(active0, 0x4000000080000000L, active1, 0L);
      case 117:
         return jjMoveStringLiteralDfa4_2(active0, 0x4000000L, active1, 0L);
      case 118:
         if ((active0 & 0x200000L) != 0L)
            return jjStartNfaWithStates_2(3, 21, 82);
         break;
      default :
         break;
   }
   return jjStartNfa_2(2, active0, active1);
}
private final int jjMoveStringLiteralDfa4_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(2, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(3, active0, active1);
      return 4;
   }
   switch(curChar)
   {
      case 100:
         return jjMoveStringLiteralDfa5_2(active0, 0L, active1, 0x2000000L);
      case 101:
         return jjMoveStringLiteralDfa5_2(active0, 0x200000000L, active1, 0L);
      case 110:
         if ((active0 & 0x80000000L) != 0L)
            return jjStartNfaWithStates_2(4, 31, 82);
         break;
      case 111:
         return jjMoveStringLiteralDfa5_2(active0, 0x400000000L, active1, 0L);
      case 112:
         return jjMoveStringLiteralDfa5_2(active0, 0x100000000L, active1, 0L);
      case 114:
         return jjMoveStringLiteralDfa5_2(active0, 0x44000000L, active1, 0L);
      case 115:
         return jjMoveStringLiteralDfa5_2(active0, 0x2000000L, active1, 0L);
      case 116:
         if ((active0 & 0x4000000000000000L) != 0L)
            return jjStartNfaWithStates_2(4, 62, 82);
         break;
      default :
         break;
   }
   return jjStartNfa_2(3, active0, active1);
}
private final int jjMoveStringLiteralDfa5_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(3, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(4, active0, active1);
      return 5;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa6_2(active0, 0L, active1, 0x2000000L);
      case 100:
         return jjMoveStringLiteralDfa6_2(active0, 0x200000000L, active1, 0L);
      case 102:
         return jjMoveStringLiteralDfa6_2(active0, 0x2000000L, active1, 0L);
      case 110:
         if ((active0 & 0x4000000L) != 0L)
            return jjStartNfaWithStates_2(5, 26, 82);
         break;
      case 115:
         return jjMoveStringLiteralDfa6_2(active0, 0x40000000L, active1, 0L);
      case 116:
         if ((active0 & 0x100000000L) != 0L)
            return jjStartNfaWithStates_2(5, 32, 82);
         break;
      case 119:
         return jjMoveStringLiteralDfa6_2(active0, 0x400000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_2(4, active0, active1);
}
private final int jjMoveStringLiteralDfa6_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(4, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(5, active0, active1);
      return 6;
   }
   switch(curChar)
   {
      case 101:
         return jjMoveStringLiteralDfa7_2(active0, 0x240000000L, active1, 0L);
      case 105:
         return jjMoveStringLiteralDfa7_2(active0, 0x2000000L, active1, 0L);
      case 115:
         if ((active0 & 0x400000000L) != 0L)
            return jjStartNfaWithStates_2(6, 34, 82);
         break;
      case 116:
         return jjMoveStringLiteralDfa7_2(active0, 0L, active1, 0x2000000L);
      default :
         break;
   }
   return jjStartNfa_2(5, active0, active1);
}
private final int jjMoveStringLiteralDfa7_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(5, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(6, active0, active1);
      return 7;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa8_2(active0, 0x40000000L, active1, 0L);
      case 101:
         if ((active1 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_2(7, 89, 82);
         return jjMoveStringLiteralDfa8_2(active0, 0x2000000L, active1, 0L);
      case 115:
         if ((active0 & 0x200000000L) != 0L)
            return jjStartNfaWithStates_2(7, 33, 82);
         break;
      default :
         break;
   }
   return jjStartNfa_2(6, active0, active1);
}
private final int jjMoveStringLiteralDfa8_2(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_2(6, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_2(7, active0, 0L);
      return 8;
   }
   switch(curChar)
   {
      case 115:
         if ((active0 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_2(8, 25, 82);
         break;
      case 116:
         if ((active0 & 0x40000000L) != 0L)
            return jjStartNfaWithStates_2(8, 30, 82);
         break;
      default :
         break;
   }
   return jjStartNfa_2(7, active0, 0L);
}
private final int jjMoveNfa_2(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 81;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 38:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 9:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 11:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 33:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 10:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 91)
                        kind = 91;
                     jjCheckNAddStates(67, 72);
                  }
                  else if ((0x100002600L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAddTwoStates(57, 58);
                  }
                  else if (curChar == 46)
                     jjCheckNAddTwoStates(79, 80);
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(54, 55);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(51, 52);
                  else if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 19;
                  break;
               case 35:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 81:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(80, 75);
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 92)
                        kind = 92;
                     jjCheckNAdd(79);
                  }
                  break;
               case 82:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 8:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 48:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 26:
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 1:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(0, 1);
                  break;
               case 12:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(73, 74);
                  break;
               case 18:
                  if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 19;
                  break;
               case 19:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 20;
                  break;
               case 21:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjstateSet[jjnewStateCnt++] = 21;
                  break;
               case 23:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(75, 76);
                  break;
               case 24:
                  if (curChar == 36 && kind > 84)
                     kind = 84;
                  break;
               case 29:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(6, 7);
                  break;
               case 30:
                  if (curChar == 36 && kind > 85)
                     kind = 85;
                  break;
               case 36:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(77, 78);
                  break;
               case 37:
                  if (curChar == 36 && kind > 86)
                     kind = 86;
                  break;
               case 41:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(79, 80);
                  break;
               case 50:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(51, 52);
                  break;
               case 51:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(51, 52);
                  break;
               case 52:
                  if (curChar != 34)
                     break;
                  if (kind > 106)
                     kind = 106;
                  jjstateSet[jjnewStateCnt++] = 50;
                  break;
               case 53:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(54, 55);
                  break;
               case 54:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(54, 55);
                  break;
               case 55:
                  if (curChar != 39)
                     break;
                  if (kind > 106)
                     kind = 106;
                  jjstateSet[jjnewStateCnt++] = 53;
                  break;
               case 56:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAddTwoStates(57, 58);
                  break;
               case 57:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(57);
                  break;
               case 58:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(58);
                  break;
               case 60:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 61:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 62;
                  break;
               case 62:
                  if (curChar == 42 && kind > 53)
                     kind = 53;
                  break;
               case 63:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  break;
               case 64:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 65;
                  break;
               case 66:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(66);
                  break;
               case 67:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 91)
                     kind = 91;
                  jjCheckNAddStates(67, 72);
                  break;
               case 68:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 91)
                     kind = 91;
                  jjCheckNAdd(68);
                  break;
               case 69:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(69, 70);
                  break;
               case 70:
                  if (curChar != 46)
                     break;
                  if (kind > 92)
                     kind = 92;
                  jjCheckNAdd(71);
                  break;
               case 71:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 92)
                     kind = 92;
                  jjCheckNAdd(71);
                  break;
               case 72:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(81, 83);
                  break;
               case 73:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(74, 75);
                  break;
               case 74:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(74, 75);
                  break;
               case 76:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(77);
                  break;
               case 77:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 93)
                     kind = 93;
                  jjCheckNAdd(77);
                  break;
               case 78:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(79, 80);
                  break;
               case 79:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 92)
                     kind = 92;
                  jjCheckNAdd(79);
                  break;
               case 80:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(80, 75);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 38:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 35;
                  break;
               case 9:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 8;
                  break;
               case 11:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 12;
                  break;
               case 33:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 118)
                     jjstateSet[jjnewStateCnt++] = 32;
                  break;
               case 10:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAddStates(84, 88);
                  }
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 48;
                  else if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 38;
                  else if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 33;
                  else if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 26;
                  else if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 11;
                  else if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 9;
                  break;
               case 35:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 114)
                     jjAddStates(77, 78);
                  break;
               case 82:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 8:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 7;
                  break;
               case 48:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 47;
                  break;
               case 26:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 25;
                  break;
               case 0:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 1;
                  break;
               case 2:
                  if (curChar == 102 && kind > 35)
                     kind = 35;
                  break;
               case 3:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               case 4:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 5:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 4;
                  break;
               case 6:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 5;
                  break;
               case 7:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 6;
                  break;
               case 13:
                  if (curChar == 101 && kind > 45)
                     kind = 45;
                  break;
               case 14:
                  if (curChar == 112)
                     jjstateSet[jjnewStateCnt++] = 13;
                  break;
               case 15:
                  if (curChar == 121)
                     jjstateSet[jjnewStateCnt++] = 14;
                  break;
               case 16:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 17:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 11;
                  break;
               case 20:
               case 21:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(21);
                  break;
               case 22:
                  if (curChar == 101)
                     jjAddStates(75, 76);
                  break;
               case 25:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 22;
                  break;
               case 27:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 26;
                  break;
               case 28:
                  if (curChar == 121)
                     jjAddStates(6, 7);
                  break;
               case 31:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 28;
                  break;
               case 32:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 31;
                  break;
               case 34:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 33;
                  break;
               case 39:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 38;
                  break;
               case 40:
                  if (curChar == 116)
                     jjAddStates(79, 80);
                  break;
               case 42:
                  if (curChar == 123 && kind > 96)
                     kind = 96;
                  break;
               case 43:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 40;
                  break;
               case 44:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 43;
                  break;
               case 45:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 44;
                  break;
               case 46:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 47:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 46;
                  break;
               case 49:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 48;
                  break;
               case 51:
                  jjAddStates(89, 90);
                  break;
               case 54:
                  jjAddStates(91, 92);
                  break;
               case 59:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(84, 88);
                  break;
               case 60:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 63:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  break;
               case 65:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(66);
                  break;
               case 66:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(66);
                  break;
               case 75:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(93, 94);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 38:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 9:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 11:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 33:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 10:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(84, 88);
                  break;
               case 35:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 82:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 8:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 48:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 26:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(66);
                  }
                  break;
               case 20:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(21);
                  break;
               case 21:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(21);
                  break;
               case 51:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(89, 90);
                  break;
               case 54:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(91, 92);
                  break;
               case 60:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(60, 61);
                  break;
               case 63:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(63, 64);
                  break;
               case 65:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(66);
                  break;
               case 66:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(66);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 81 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_14()
{
   return jjMoveNfa_14(0, 0);
}
private final int jjMoveNfa_14(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0xffffffff00002600L & l) != 0L)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_8()
{
   return jjMoveNfa_8(6, 0);
}
private final int jjMoveNfa_8(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 9;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((0x100002600L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAddTwoStates(7, 8);
                  }
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(4, 5);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 0:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 1:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 2:
                  if (curChar != 34)
                     break;
                  if (kind > 106)
                     kind = 106;
                  jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 3:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(4, 5);
                  break;
               case 4:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(4, 5);
                  break;
               case 5:
                  if (curChar != 39)
                     break;
                  if (kind > 106)
                     kind = 106;
                  jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 7:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(7);
                  break;
               case 8:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(8);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  jjAddStates(95, 96);
                  break;
               case 4:
                  jjAddStates(97, 98);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(95, 96);
                  break;
               case 4:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(97, 98);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_11()
{
   return jjMoveNfa_11(0, 0);
}
private final int jjMoveNfa_11(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 5;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjAddStates(95, 96);
                  break;
               case 2:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 4:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 114)
                     kind = 114;
                  jjstateSet[jjnewStateCnt++] = 4;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 114)
                     kind = 114;
                  jjCheckNAddStates(99, 101);
                  break;
               case 1:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 3:
               case 4:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 114)
                     kind = 114;
                  jjCheckNAdd(4);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 114)
                     kind = 114;
                  jjCheckNAddStates(99, 101);
                  break;
               case 1:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 3:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 114)
                     kind = 114;
                  jjCheckNAdd(4);
                  break;
               case 4:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 114)
                     kind = 114;
                  jjCheckNAdd(4);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 5 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_9(int pos, long active0, long active1)
{
   switch (pos)
   {
      default :
         return -1;
   }
}
private final int jjStartNfa_9(int pos, long active0, long active1)
{
   return jjMoveNfa_9(jjStopStringLiteralDfa_9(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_9(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_9(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_9()
{
   switch(curChar)
   {
      case 123:
         return jjStopAtPos(0, 119);
      default :
         return jjMoveNfa_9(0, 0);
   }
}
private final int jjMoveNfa_9(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0x100002600L & l) == 0L)
                     break;
                  kind = 4;
                  jjstateSet[jjnewStateCnt++] = 0;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_17()
{
   return jjMoveNfa_17(0, 0);
}
private final int jjMoveNfa_17(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0xffffffff00002600L & l) != 0L)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_4()
{
   return jjMoveNfa_4(6, 0);
}
private final int jjMoveNfa_4(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 9;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 6:
                  if ((0x100002600L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAddTwoStates(7, 8);
                  }
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(4, 5);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 0:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 1:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 2:
                  if (curChar != 34)
                     break;
                  if (kind > 107)
                     kind = 107;
                  jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 3:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(4, 5);
                  break;
               case 4:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(4, 5);
                  break;
               case 5:
                  if (curChar != 39)
                     break;
                  if (kind > 107)
                     kind = 107;
                  jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 7:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(7);
                  break;
               case 8:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(8);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  jjAddStates(95, 96);
                  break;
               case 4:
                  jjAddStates(97, 98);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(95, 96);
                  break;
               case 4:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(97, 98);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_5()
{
   return jjMoveNfa_5(0, 0);
}
private final int jjMoveNfa_5(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0x100002600L & l) == 0L)
                     break;
                  kind = 2;
                  jjstateSet[jjnewStateCnt++] = 0;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1)
{
   switch (pos)
   {
      case 0:
         if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            return 386;
         }
         if ((active0 & 0x10000000000000L) != 0L)
            return 15;
         if ((active0 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 115;
            return 330;
         }
         if ((active1 & 0x300000000000L) != 0L)
            return 387;
         return -1;
      case 1:
         if ((active0 & 0x2000000000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 1;
            return 386;
         }
         return -1;
      case 2:
         if ((active0 & 0x2000000000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 2;
            return 386;
         }
         return -1;
      case 3:
         if ((active0 & 0x2000000000000L) != 0L || (active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 3;
            return 386;
         }
         return -1;
      case 4:
         if ((active0 & 0x2000000000000L) != 0L)
            return 386;
         if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 4;
            return 386;
         }
         return -1;
      case 5:
         if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 5;
            return 386;
         }
         return -1;
      case 6:
         if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 6;
            return 386;
         }
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_0(int pos, long active0, long active1)
{
   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_0(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_0(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 36:
         return jjStopAtPos(0, 113);
      case 40:
         return jjStopAtPos(0, 79);
      case 41:
         return jjStopAtPos(0, 83);
      case 42:
         return jjStartNfaWithStates_0(0, 52, 15);
      case 43:
         return jjStopAtPos(0, 76);
      case 44:
         return jjStopAtPos(0, 105);
      case 45:
         return jjStopAtPos(0, 75);
      case 46:
         jjmatchedKind = 108;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x200000000000L);
      case 47:
         jjmatchedKind = 55;
         return jjMoveStringLiteralDfa1_0(0x100000000000000L, 0x0L);
      case 64:
         return jjStopAtPos(0, 80);
      case 91:
         return jjStopAtPos(0, 81);
      case 93:
         return jjStopAtPos(0, 82);
      case 101:
         return jjMoveStringLiteralDfa1_0(0x2000000000000L, 0x0L);
      case 118:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000000L);
      case 125:
         return jjStopAtPos(0, 120);
      default :
         return jjMoveNfa_0(6, 0);
   }
}
private final int jjMoveStringLiteralDfa1_0(long active0, long active1)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(0, active0, active1);
      return 1;
   }
   switch(curChar)
   {
      case 46:
         if ((active1 & 0x200000000000L) != 0L)
            return jjStopAtPos(1, 109);
         break;
      case 47:
         if ((active0 & 0x100000000000000L) != 0L)
            return jjStopAtPos(1, 56);
         break;
      case 97:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000L);
      case 109:
         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_0(0, active0, active1);
}
private final int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_0(0, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(1, active0, active1);
      return 2;
   }
   switch(curChar)
   {
      case 108:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2000000L);
      case 112:
         return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_0(1, active0, active1);
}
private final int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_0(1, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(2, active0, active1);
      return 3;
   }
   switch(curChar)
   {
      case 105:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x2000000L);
      case 116:
         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_0(2, active0, active1);
}
private final int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_0(2, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(3, active0, active1);
      return 4;
   }
   switch(curChar)
   {
      case 100:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000000L);
      case 121:
         if ((active0 & 0x2000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 49, 386);
         break;
      default :
         break;
   }
   return jjStartNfa_0(3, active0, active1);
}
private final int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_0(3, old0, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(4, 0L, active1);
      return 5;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa6_0(active1, 0x2000000L);
      default :
         break;
   }
   return jjStartNfa_0(4, 0L, active1);
}
private final int jjMoveStringLiteralDfa6_0(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_0(4, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(5, 0L, active1);
      return 6;
   }
   switch(curChar)
   {
      case 116:
         return jjMoveStringLiteralDfa7_0(active1, 0x2000000L);
      default :
         break;
   }
   return jjStartNfa_0(5, 0L, active1);
}
private final int jjMoveStringLiteralDfa7_0(long old1, long active1)
{
   if (((active1 &= old1)) == 0L)
      return jjStartNfa_0(5, 0L, old1); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(6, 0L, active1);
      return 7;
   }
   switch(curChar)
   {
      case 101:
         if ((active1 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_0(7, 89, 386);
         break;
      default :
         break;
   }
   return jjStartNfa_0(6, 0L, active1);
}
private final int jjMoveNfa_0(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 386;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 330:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  else if ((0x100002600L & l) != 0L)
                     jjCheckNAddTwoStates(357, 358);
                  else if (curChar == 40)
                  {
                     if (kind > 118)
                        kind = 118;
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 355;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 351;
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(352);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 348;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  break;
               case 6:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 91)
                        kind = 91;
                     jjCheckNAddStates(105, 110);
                  }
                  else if ((0x100002600L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAddTwoStates(29, 30);
                  }
                  else if (curChar == 46)
                     jjCheckNAddTwoStates(384, 385);
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(26, 27);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(23, 24);
                  else if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 387:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(385, 380);
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 92)
                        kind = 92;
                     jjCheckNAdd(384);
                  }
                  break;
               case 386:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  else if ((0x100002600L & l) != 0L)
                     jjCheckNAddTwoStates(357, 358);
                  else if (curChar == 40)
                  {
                     if (kind > 118)
                        kind = 118;
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 355;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 351;
                  if ((0x3ff600000000000L & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(352);
                  }
                  else if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 348;
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  break;
               case 0:
                  if (curChar == 45)
                     jjCheckNAddTwoStates(1, 4);
                  break;
               case 1:
                  jjCheckNAddTwoStates(1, 4);
                  break;
               case 3:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               case 4:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 5:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 8:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(111, 112);
                  break;
               case 14:
                  if (curChar == 42)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 15:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 16;
                  break;
               case 17:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjstateSet[jjnewStateCnt++] = 17;
                  break;
               case 19:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(113, 114);
                  break;
               case 20:
                  if (curChar == 40 && kind > 104)
                     kind = 104;
                  break;
               case 22:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(23, 24);
                  break;
               case 23:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(23, 24);
                  break;
               case 24:
                  if (curChar != 34)
                     break;
                  if (kind > 106)
                     kind = 106;
                  jjstateSet[jjnewStateCnt++] = 22;
                  break;
               case 25:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(26, 27);
                  break;
               case 26:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(26, 27);
                  break;
               case 27:
                  if (curChar != 39)
                     break;
                  if (kind > 106)
                     kind = 106;
                  jjstateSet[jjnewStateCnt++] = 25;
                  break;
               case 28:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAddTwoStates(29, 30);
                  break;
               case 29:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(29);
                  break;
               case 30:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(30);
                  break;
               case 33:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(115, 116);
                  break;
               case 34:
                  if (curChar == 58 && kind > 5)
                     kind = 5;
                  break;
               case 35:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 34;
                  break;
               case 40:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(117, 118);
                  break;
               case 46:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(119, 120);
                  break;
               case 47:
                  if (curChar == 40 && kind > 101)
                     kind = 101;
                  break;
               case 55:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(121, 122);
                  break;
               case 56:
                  if (curChar == 58 && kind > 6)
                     kind = 6;
                  break;
               case 57:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 56;
                  break;
               case 67:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(123, 124);
                  break;
               case 68:
                  if (curChar == 58 && kind > 10)
                     kind = 10;
                  break;
               case 69:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 68;
                  break;
               case 73:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 72;
                  break;
               case 76:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 75;
                  break;
               case 87:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(125, 126);
                  break;
               case 101:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(127, 128);
                  break;
               case 116:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(129, 130);
                  break;
               case 126:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(131, 132);
                  break;
               case 127:
                  if (curChar == 58 && kind > 7)
                     kind = 7;
                  break;
               case 128:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 127;
                  break;
               case 134:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(133, 134);
                  break;
               case 135:
                  if (curChar == 58 && kind > 13)
                     kind = 13;
                  break;
               case 136:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 135;
                  break;
               case 143:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 142;
                  break;
               case 153:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(135, 136);
                  break;
               case 154:
                  if (curChar == 58 && kind > 15)
                     kind = 15;
                  break;
               case 155:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 154;
                  break;
               case 164:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(137, 138);
                  break;
               case 165:
                  if (curChar == 40 && kind > 103)
                     kind = 103;
                  break;
               case 176:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 175;
                  break;
               case 188:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(139, 140);
                  break;
               case 189:
                  if (curChar == 58 && kind > 8)
                     kind = 8;
                  break;
               case 190:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 189;
                  break;
               case 199:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(141, 142);
                  break;
               case 200:
                  if (curChar == 58 && kind > 11)
                     kind = 11;
                  break;
               case 201:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 200;
                  break;
               case 209:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(143, 144);
                  break;
               case 210:
                  if (curChar == 58 && kind > 17)
                     kind = 17;
                  break;
               case 211:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 210;
                  break;
               case 215:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 214;
                  break;
               case 218:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 217;
                  break;
               case 227:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(145, 146);
                  break;
               case 229:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjAddStates(147, 148);
                  break;
               case 230:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 231;
                  break;
               case 232:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(232, 233);
                  break;
               case 233:
                  if ((0x100002600L & l) != 0L)
                     jjCheckNAddTwoStates(233, 234);
                  break;
               case 243:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(149, 150);
                  break;
               case 254:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(151, 152);
                  break;
               case 255:
                  if (curChar == 58 && kind > 9)
                     kind = 9;
                  break;
               case 256:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 255;
                  break;
               case 260:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(153, 154);
                  break;
               case 261:
                  if (curChar == 36 && kind > 84)
                     kind = 84;
                  break;
               case 266:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(155, 156);
                  break;
               case 267:
                  if (curChar == 58 && kind > 12)
                     kind = 12;
                  break;
               case 268:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 267;
                  break;
               case 275:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 274;
                  break;
               case 285:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(157, 158);
                  break;
               case 286:
                  if (curChar == 58 && kind > 14)
                     kind = 14;
                  break;
               case 287:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 286;
                  break;
               case 296:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(159, 160);
                  break;
               case 297:
                  if (curChar == 36 && kind > 86)
                     kind = 86;
                  break;
               case 301:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(161, 162);
                  break;
               case 302:
                  if (curChar == 58 && kind > 16)
                     kind = 16;
                  break;
               case 303:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 302;
                  break;
               case 312:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(163, 164);
                  break;
               case 313:
                  if (curChar == 40 && kind > 100)
                     kind = 100;
                  break;
               case 318:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(165, 166);
                  break;
               case 320:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjAddStates(167, 168);
                  break;
               case 321:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 322;
                  break;
               case 323:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(323, 324);
                  break;
               case 324:
                  if ((0x100002600L & l) != 0L)
                     jjCheckNAddTwoStates(324, 325);
                  break;
               case 332:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(169, 170);
                  break;
               case 340:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(171, 172);
                  break;
               case 341:
                  if (curChar == 36 && kind > 85)
                     kind = 85;
                  break;
               case 346:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  break;
               case 347:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 348;
                  break;
               case 348:
                  if (curChar == 42 && kind > 53)
                     kind = 53;
                  break;
               case 349:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  break;
               case 350:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 351;
                  break;
               case 352:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(352);
                  break;
               case 353:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  break;
               case 354:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 355;
                  break;
               case 356:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               case 357:
                  if ((0x100002600L & l) != 0L)
                     jjCheckNAddTwoStates(357, 358);
                  break;
               case 358:
                  if (curChar == 40 && kind > 118)
                     kind = 118;
                  break;
               case 361:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(173, 174);
                  break;
               case 368:
                  if ((0x100002600L & l) != 0L)
                     jjAddStates(175, 176);
                  break;
               case 369:
                  if (curChar == 40 && kind > 102)
                     kind = 102;
                  break;
               case 372:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 91)
                     kind = 91;
                  jjCheckNAddStates(105, 110);
                  break;
               case 373:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 91)
                     kind = 91;
                  jjCheckNAdd(373);
                  break;
               case 374:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(374, 375);
                  break;
               case 375:
                  if (curChar != 46)
                     break;
                  if (kind > 92)
                     kind = 92;
                  jjCheckNAdd(376);
                  break;
               case 376:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 92)
                     kind = 92;
                  jjCheckNAdd(376);
                  break;
               case 377:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(177, 179);
                  break;
               case 378:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(379, 380);
                  break;
               case 379:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(379, 380);
                  break;
               case 381:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(382);
                  break;
               case 382:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 93)
                     kind = 93;
                  jjCheckNAdd(382);
                  break;
               case 383:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(384, 385);
                  break;
               case 384:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 92)
                     kind = 92;
                  jjCheckNAdd(384);
                  break;
               case 385:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(385, 380);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 330:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(352);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  if (curChar == 118)
                     jjstateSet[jjnewStateCnt++] = 343;
                  else if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 337;
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 329;
                  break;
               case 6:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAddStates(180, 189);
                  }
                  else if (curChar == 123)
                     jjstateSet[jjnewStateCnt++] = 5;
                  if (curChar == 116)
                     jjAddStates(190, 191);
                  else if (curChar == 101)
                     jjAddStates(192, 194);
                  else if (curChar == 110)
                     jjAddStates(195, 196);
                  else if (curChar == 102)
                     jjAddStates(197, 199);
                  else if (curChar == 115)
                     jjAddStates(200, 201);
                  else if (curChar == 97)
                     jjAddStates(202, 206);
                  else if (curChar == 112)
                     jjAddStates(207, 210);
                  else if (curChar == 100)
                     jjAddStates(211, 215);
                  else if (curChar == 99)
                     jjAddStates(216, 218);
                  else if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 18;
                  else if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 7;
                  break;
               case 386:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(352);
                  }
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  break;
               case 1:
                  if ((0xdfffffffffffffffL & l) != 0L)
                     jjAddStates(65, 66);
                  break;
               case 2:
                  if (curChar == 125 && kind > 1)
                     kind = 1;
                  break;
               case 7:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 8;
                  break;
               case 9:
                  if (curChar == 101 && kind > 45)
                     kind = 45;
                  break;
               case 10:
                  if (curChar == 112)
                     jjstateSet[jjnewStateCnt++] = 9;
                  break;
               case 11:
                  if (curChar == 121)
                     jjstateSet[jjnewStateCnt++] = 10;
                  break;
               case 12:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 11;
                  break;
               case 13:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 7;
                  break;
               case 16:
               case 17:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(17);
                  break;
               case 18:
                  if (curChar == 102)
                     jjAddStates(113, 114);
                  break;
               case 21:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 18;
                  break;
               case 23:
                  jjAddStates(75, 76);
                  break;
               case 26:
                  jjAddStates(219, 220);
                  break;
               case 31:
                  if (curChar == 99)
                     jjAddStates(216, 218);
                  break;
               case 32:
                  if (curChar == 100)
                     jjAddStates(115, 116);
                  break;
               case 36:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 32;
                  break;
               case 37:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 36;
                  break;
               case 38:
                  if (curChar == 104)
                     jjstateSet[jjnewStateCnt++] = 37;
                  break;
               case 39:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 40;
                  break;
               case 41:
                  if (curChar == 115 && kind > 87)
                     kind = 87;
                  break;
               case 42:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 41;
                  break;
               case 43:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 39;
                  break;
               case 44:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 43;
                  break;
               case 45:
                  if (curChar == 116)
                     jjAddStates(119, 120);
                  break;
               case 48:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 49:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 48;
                  break;
               case 50:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 49;
                  break;
               case 51:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 50;
                  break;
               case 52:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 51;
                  break;
               case 53:
                  if (curChar == 100)
                     jjAddStates(211, 215);
                  break;
               case 54:
                  if (curChar == 116)
                     jjAddStates(121, 122);
                  break;
               case 58:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 54;
                  break;
               case 59:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 58;
                  break;
               case 60:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 59;
                  break;
               case 61:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 60;
                  break;
               case 62:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 61;
                  break;
               case 63:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 62;
                  break;
               case 64:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 63;
                  break;
               case 65:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 64;
                  break;
               case 66:
                  if (curChar == 102)
                     jjAddStates(123, 124);
                  break;
               case 70:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 66;
                  break;
               case 71:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 70;
                  break;
               case 72:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 71;
                  break;
               case 74:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 73;
                  break;
               case 75:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 74;
                  break;
               case 77:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 76;
                  break;
               case 78:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 77;
                  break;
               case 79:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 78;
                  break;
               case 80:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 79;
                  break;
               case 81:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 80;
                  break;
               case 82:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 81;
                  break;
               case 83:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 82;
                  break;
               case 84:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 83;
                  break;
               case 85:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 84;
                  break;
               case 86:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 87;
                  break;
               case 88:
                  if (curChar == 116 && kind > 43)
                     kind = 43;
                  break;
               case 89:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 88;
                  break;
               case 90:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 89;
                  break;
               case 91:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 90;
                  break;
               case 92:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 91;
                  break;
               case 93:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 92;
                  break;
               case 94:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 93;
                  break;
               case 95:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 86;
                  break;
               case 96:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 95;
                  break;
               case 97:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 96;
                  break;
               case 98:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 97;
                  break;
               case 99:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 98;
                  break;
               case 100:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 101;
                  break;
               case 102:
                  if (curChar == 110 && kind > 44)
                     kind = 44;
                  break;
               case 103:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 102;
                  break;
               case 104:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 103;
                  break;
               case 105:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 104;
                  break;
               case 106:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 105;
                  break;
               case 107:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 106;
                  break;
               case 108:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 107;
                  break;
               case 109:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 108;
                  break;
               case 110:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 100;
                  break;
               case 111:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 110;
                  break;
               case 112:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 111;
                  break;
               case 113:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 112;
                  break;
               case 114:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 113;
                  break;
               case 115:
                  if (curChar == 116)
                     jjAddStates(129, 130);
                  break;
               case 117:
                  if (curChar == 123 && kind > 96)
                     kind = 96;
                  break;
               case 118:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 115;
                  break;
               case 119:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 118;
                  break;
               case 120:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 119;
                  break;
               case 121:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 120;
                  break;
               case 122:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 121;
                  break;
               case 123:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 122;
                  break;
               case 124:
                  if (curChar == 112)
                     jjAddStates(207, 210);
                  break;
               case 125:
                  if (curChar == 116)
                     jjAddStates(131, 132);
                  break;
               case 129:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 125;
                  break;
               case 130:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 129;
                  break;
               case 131:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 130;
                  break;
               case 132:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 131;
                  break;
               case 133:
                  if (curChar == 103)
                     jjAddStates(133, 134);
                  break;
               case 137:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 133;
                  break;
               case 138:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 137;
                  break;
               case 139:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 138;
                  break;
               case 140:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 139;
                  break;
               case 141:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 140;
                  break;
               case 142:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 141;
                  break;
               case 144:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 143;
                  break;
               case 145:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 144;
                  break;
               case 146:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 145;
                  break;
               case 147:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 146;
                  break;
               case 148:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 147;
                  break;
               case 149:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 148;
                  break;
               case 150:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 149;
                  break;
               case 151:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 150;
                  break;
               case 152:
                  if (curChar == 103)
                     jjAddStates(135, 136);
                  break;
               case 156:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 152;
                  break;
               case 157:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 156;
                  break;
               case 158:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 157;
                  break;
               case 159:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 158;
                  break;
               case 160:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 159;
                  break;
               case 161:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 160;
                  break;
               case 162:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 161;
                  break;
               case 163:
                  if (curChar == 110)
                     jjAddStates(137, 138);
                  break;
               case 166:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 163;
                  break;
               case 167:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 166;
                  break;
               case 168:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 167;
                  break;
               case 169:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 168;
                  break;
               case 170:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 169;
                  break;
               case 171:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 170;
                  break;
               case 172:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 171;
                  break;
               case 173:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 172;
                  break;
               case 174:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 173;
                  break;
               case 175:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 174;
                  break;
               case 177:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 176;
                  break;
               case 178:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 177;
                  break;
               case 179:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 178;
                  break;
               case 180:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 179;
                  break;
               case 181:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 180;
                  break;
               case 182:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 181;
                  break;
               case 183:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 182;
                  break;
               case 184:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 183;
                  break;
               case 185:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 184;
                  break;
               case 186:
                  if (curChar == 97)
                     jjAddStates(202, 206);
                  break;
               case 187:
                  if (curChar == 101)
                     jjAddStates(139, 140);
                  break;
               case 191:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 187;
                  break;
               case 192:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 191;
                  break;
               case 193:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 192;
                  break;
               case 194:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 193;
                  break;
               case 195:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 194;
                  break;
               case 196:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 195;
                  break;
               case 197:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 196;
                  break;
               case 198:
                  if (curChar == 114)
                     jjAddStates(141, 142);
                  break;
               case 202:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 198;
                  break;
               case 203:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 202;
                  break;
               case 204:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 203;
                  break;
               case 205:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 204;
                  break;
               case 206:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 205;
                  break;
               case 207:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 206;
                  break;
               case 208:
                  if (curChar == 102)
                     jjAddStates(143, 144);
                  break;
               case 212:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 208;
                  break;
               case 213:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 212;
                  break;
               case 214:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 213;
                  break;
               case 216:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 215;
                  break;
               case 217:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 216;
                  break;
               case 219:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 218;
                  break;
               case 220:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 219;
                  break;
               case 221:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 220;
                  break;
               case 222:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 221;
                  break;
               case 223:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 222;
                  break;
               case 224:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 223;
                  break;
               case 225:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 224;
                  break;
               case 226:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 227;
                  break;
               case 228:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddStates(221, 224);
                  break;
               case 229:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(229, 230);
                  break;
               case 231:
               case 232:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(232, 233);
                  break;
               case 234:
                  if (curChar == 123 && kind > 40)
                     kind = 40;
                  break;
               case 235:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 226;
                  break;
               case 236:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 235;
                  break;
               case 237:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 236;
                  break;
               case 238:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 237;
                  break;
               case 239:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 238;
                  break;
               case 240:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 239;
                  break;
               case 241:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 240;
                  break;
               case 242:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 243;
                  break;
               case 244:
                  if (curChar == 123 && kind > 42)
                     kind = 42;
                  break;
               case 245:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 242;
                  break;
               case 246:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 245;
                  break;
               case 247:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 246;
                  break;
               case 248:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 247;
                  break;
               case 249:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 248;
                  break;
               case 250:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 249;
                  break;
               case 251:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 250;
                  break;
               case 252:
                  if (curChar == 115)
                     jjAddStates(200, 201);
                  break;
               case 253:
                  if (curChar == 102)
                     jjAddStates(151, 152);
                  break;
               case 257:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 253;
                  break;
               case 258:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 257;
                  break;
               case 259:
                  if (curChar == 101)
                     jjAddStates(153, 154);
                  break;
               case 262:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 259;
                  break;
               case 263:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 262;
                  break;
               case 264:
                  if (curChar == 102)
                     jjAddStates(197, 199);
                  break;
               case 265:
                  if (curChar == 103)
                     jjAddStates(155, 156);
                  break;
               case 269:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 265;
                  break;
               case 270:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 269;
                  break;
               case 271:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 270;
                  break;
               case 272:
                  if (curChar == 98)
                     jjstateSet[jjnewStateCnt++] = 271;
                  break;
               case 273:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 272;
                  break;
               case 274:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 273;
                  break;
               case 276:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 275;
                  break;
               case 277:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 276;
                  break;
               case 278:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 277;
                  break;
               case 279:
                  if (curChar == 119)
                     jjstateSet[jjnewStateCnt++] = 278;
                  break;
               case 280:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 279;
                  break;
               case 281:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 280;
                  break;
               case 282:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 281;
                  break;
               case 283:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 282;
                  break;
               case 284:
                  if (curChar == 103)
                     jjAddStates(157, 158);
                  break;
               case 288:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 284;
                  break;
               case 289:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 288;
                  break;
               case 290:
                  if (curChar == 119)
                     jjstateSet[jjnewStateCnt++] = 289;
                  break;
               case 291:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 290;
                  break;
               case 292:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 291;
                  break;
               case 293:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 292;
                  break;
               case 294:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 293;
                  break;
               case 295:
                  if (curChar == 114)
                     jjAddStates(159, 160);
                  break;
               case 298:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 295;
                  break;
               case 299:
                  if (curChar == 110)
                     jjAddStates(195, 196);
                  break;
               case 300:
                  if (curChar == 101)
                     jjAddStates(161, 162);
                  break;
               case 304:
                  if (curChar == 99)
                     jjstateSet[jjnewStateCnt++] = 300;
                  break;
               case 305:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 304;
                  break;
               case 306:
                  if (curChar == 112)
                     jjstateSet[jjnewStateCnt++] = 305;
                  break;
               case 307:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 306;
                  break;
               case 308:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 307;
                  break;
               case 309:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 308;
                  break;
               case 310:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 309;
                  break;
               case 311:
                  if (curChar == 101)
                     jjAddStates(163, 164);
                  break;
               case 314:
                  if (curChar == 100)
                     jjstateSet[jjnewStateCnt++] = 311;
                  break;
               case 315:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 314;
                  break;
               case 316:
                  if (curChar == 101)
                     jjAddStates(192, 194);
                  break;
               case 317:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 318;
                  break;
               case 319:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddStates(225, 228);
                  break;
               case 320:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(320, 321);
                  break;
               case 322:
               case 323:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(323, 324);
                  break;
               case 325:
                  if (curChar == 123 && kind > 39)
                     kind = 39;
                  break;
               case 326:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 317;
                  break;
               case 327:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 326;
                  break;
               case 328:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 327;
                  break;
               case 329:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 328;
                  break;
               case 331:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 332;
                  break;
               case 333:
                  if (curChar == 123 && kind > 41)
                     kind = 41;
                  break;
               case 334:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 331;
                  break;
               case 335:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 334;
                  break;
               case 336:
                  if (curChar == 109)
                     jjstateSet[jjnewStateCnt++] = 335;
                  break;
               case 337:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 336;
                  break;
               case 338:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 337;
                  break;
               case 339:
                  if (curChar == 121)
                     jjAddStates(171, 172);
                  break;
               case 342:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 339;
                  break;
               case 343:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 342;
                  break;
               case 344:
                  if (curChar == 118)
                     jjstateSet[jjnewStateCnt++] = 343;
                  break;
               case 345:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(180, 189);
                  break;
               case 346:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  break;
               case 349:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  break;
               case 351:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(352);
                  break;
               case 352:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(352);
                  break;
               case 353:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  break;
               case 355:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               case 356:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               case 359:
                  if (curChar == 116)
                     jjAddStates(190, 191);
                  break;
               case 360:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 361;
                  break;
               case 362:
                  if (curChar == 115 && kind > 88)
                     kind = 88;
                  break;
               case 363:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 362;
                  break;
               case 364:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 360;
                  break;
               case 365:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 364;
                  break;
               case 366:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 365;
                  break;
               case 367:
                  if (curChar == 116)
                     jjAddStates(175, 176);
                  break;
               case 370:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 367;
                  break;
               case 371:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 370;
                  break;
               case 380:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(229, 230);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 330:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(352);
                  }
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               case 6:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAddStates(180, 189);
                  break;
               case 386:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  if ((jjbitVec28[i2] & l2) != 0L)
                  {
                     if (kind > 115)
                        kind = 115;
                     jjCheckNAdd(352);
                  }
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               case 1:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(65, 66);
                  break;
               case 16:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(17);
                  break;
               case 17:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 54)
                     kind = 54;
                  jjCheckNAdd(17);
                  break;
               case 23:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(75, 76);
                  break;
               case 26:
                  if ((jjbitVec2[i2] & l2) != 0L)
                     jjAddStates(219, 220);
                  break;
               case 228:
                  if ((jjbitVec5[i2] & l2) != 0L)
                     jjCheckNAddStates(221, 224);
                  break;
               case 229:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(229, 230);
                  break;
               case 231:
                  if ((jjbitVec5[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(232, 233);
                  break;
               case 232:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(232, 233);
                  break;
               case 319:
                  if ((jjbitVec5[i2] & l2) != 0L)
                     jjCheckNAddStates(225, 228);
                  break;
               case 320:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(320, 321);
                  break;
               case 322:
                  if ((jjbitVec5[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(323, 324);
                  break;
               case 323:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(323, 324);
                  break;
               case 346:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(346, 347);
                  break;
               case 349:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(349, 350);
                  break;
               case 351:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(352);
                  break;
               case 352:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 115)
                     kind = 115;
                  jjCheckNAdd(352);
                  break;
               case 353:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(353, 354);
                  break;
               case 355:
                  if ((jjbitVec5[i2] & l2) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               case 356:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddStates(102, 104);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 386 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_13(int pos, long active0, long active1)
{
   switch (pos)
   {
      default :
         return -1;
   }
}
private final int jjStartNfa_13(int pos, long active0, long active1)
{
   return jjMoveNfa_13(jjStopStringLiteralDfa_13(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_13(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_13(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_13()
{
   switch(curChar)
   {
      case 123:
         return jjStopAtPos(0, 119);
      default :
         return jjMoveNfa_13(0, 0);
   }
}
private final int jjMoveNfa_13(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0xffffffff00002600L & l) != 0L)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_12(int pos, long active0, long active1)
{
   switch (pos)
   {
      default :
         return -1;
   }
}
private final int jjStartNfa_12(int pos, long active0, long active1)
{
   return jjMoveNfa_12(jjStopStringLiteralDfa_12(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_12(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_12(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_12()
{
   switch(curChar)
   {
      case 123:
         return jjStopAtPos(0, 119);
      default :
         return jjMoveNfa_12(0, 0);
   }
}
private final int jjMoveNfa_12(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 1;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0xffffffff00002600L & l) != 0L)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec2[i2] & l2) != 0L && kind > 121)
                     kind = 121;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 1 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjStopStringLiteralDfa_7(int pos, long active0, long active1)
{
   switch (pos)
   {
      default :
         return -1;
   }
}
private final int jjStartNfa_7(int pos, long active0, long active1)
{
   return jjMoveNfa_7(jjStopStringLiteralDfa_7(pos, active0, active1), pos + 1);
}
private final int jjStartNfaWithStates_7(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_7(state, pos + 1);
}
private final int jjMoveStringLiteralDfa0_7()
{
   switch(curChar)
   {
      case 40:
         return jjStopAtPos(0, 117);
      default :
         return jjMoveNfa_7(0, 0);
   }
}
private final int jjMoveNfa_7(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 8;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAddTwoStates(6, 7);
                  break;
               case 1:
                  if ((0x3ff600000000000L & l) != 0L)
                     jjAddStates(95, 96);
                  break;
               case 2:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 4:
                  if ((0x3ff600000000000L & l) == 0L)
                     break;
                  if (kind > 116)
                     kind = 116;
                  jjstateSet[jjnewStateCnt++] = 4;
                  break;
               case 6:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(6);
                  break;
               case 7:
                  if ((0x100002600L & l) == 0L)
                     break;
                  if (kind > 4)
                     kind = 4;
                  jjCheckNAdd(7);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 116)
                     kind = 116;
                  jjCheckNAddStates(99, 101);
                  break;
               case 1:
                  if ((0x7fffffe87fffffeL & l) != 0L)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 3:
               case 4:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 116)
                     kind = 116;
                  jjCheckNAdd(4);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 0:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 116)
                     kind = 116;
                  jjCheckNAddStates(99, 101);
                  break;
               case 1:
                  if ((jjbitVec28[i2] & l2) != 0L)
                     jjCheckNAddTwoStates(1, 2);
                  break;
               case 3:
                  if ((jjbitVec5[i2] & l2) == 0L)
                     break;
                  if (kind > 116)
                     kind = 116;
                  jjCheckNAdd(4);
                  break;
               case 4:
                  if ((jjbitVec28[i2] & l2) == 0L)
                     break;
                  if (kind > 116)
                     kind = 116;
                  jjCheckNAdd(4);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 8 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
static final int[] jjnextStates = {
   1, 3, 12, 13, 22, 24, 29, 30, 38, 40, 50, 52, 71, 73, 79, 81, 
   98, 100, 109, 110, 133, 135, 144, 146, 154, 156, 173, 175, 192, 194, 204, 206, 
   215, 216, 220, 221, 223, 224, 220, 221, 223, 224, 226, 213, 218, 190, 201, 142, 
   152, 170, 77, 96, 107, 130, 48, 68, 27, 35, 1, 6, 20, 21, 23, 24, 
   26, 1, 4, 68, 69, 70, 72, 73, 75, 12, 16, 23, 24, 36, 37, 41, 
   42, 72, 73, 75, 60, 61, 63, 64, 66, 51, 52, 54, 55, 76, 77, 1, 
   2, 4, 5, 1, 2, 4, 356, 357, 358, 373, 374, 375, 377, 378, 380, 8, 
   12, 19, 20, 33, 35, 40, 42, 46, 47, 55, 57, 67, 69, 87, 94, 101, 
   109, 116, 117, 126, 128, 134, 136, 153, 155, 164, 165, 188, 190, 199, 201, 209, 
   211, 227, 228, 229, 230, 243, 244, 254, 256, 260, 261, 266, 268, 285, 287, 296, 
   297, 301, 303, 312, 313, 318, 319, 320, 321, 332, 333, 340, 341, 361, 363, 368, 
   369, 377, 378, 380, 346, 347, 349, 350, 352, 353, 354, 356, 357, 358, 366, 371, 
   330, 338, 344, 310, 315, 283, 294, 298, 258, 263, 197, 207, 225, 241, 251, 132, 
   151, 162, 185, 65, 85, 99, 114, 123, 38, 44, 52, 26, 27, 229, 230, 232, 
   233, 320, 321, 323, 324, 381, 382, 
};
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, "\157\162", "\141\156\144", "\144\151\166", 
"\151\144\151\166", "\155\157\144", "\52", "\151\156", "\163\141\164\151\163\146\151\145\163", 
"\162\145\164\165\162\156", "\164\150\145\156", "\145\154\163\145", "\164\157", 
"\151\156\164\145\162\163\145\143\164", "\165\156\151\157\156", "\145\170\143\145\160\164", 
"\160\162\145\143\145\144\145\163", "\146\157\154\154\157\167\163", null, "\151\164\145\155", 
"\145\154\145\155\145\156\164", "\141\164\164\162\151\142\165\164\145", null, null, null, null, null, null, 
null, null, "\164\171\160\145", "\156\157\144\145", "\145\155\160\164\171", null, 
null, "\52", null, null, "\57", "\57\57", "\57", "\57\57", "\75", "\151\163", 
"\41\75", "\151\163\156\157\164", "\74\75", "\74\74", "\76\75", "\76\76", "\145\161", 
"\156\145", "\147\164", "\147\145", "\154\164", "\154\145", "\74", "\76", "\55", "\53", 
"\77", "\174", "\50", "\100", "\133", "\135", "\51", null, null, null, null, null, 
"\166\141\154\151\144\141\164\145", null, null, null, null, "\143\157\155\155\145\156\164", 
"\144\157\143\165\155\145\156\164", null, "\164\145\170\164", "\165\156\164\171\160\145\144", 
"\160\162\157\143\145\163\163\151\156\147\55\151\156\163\164\162\165\143\164\151\157\156", null, null, null, null, null, "\54", null, null, "\56", "\56\56", null, null, 
null, "\44", null, null, null, "\50", null, "\173", "\175", null, null, null, null, 
null, null, null, null, };
public static final String[] lexStateNames = {
   "DEFAULT", 
   "ELEMENT_CONTENT", 
   "OPERATOR", 
   "QNAME", 
   "NAMESPACEDECL", 
   "XMLSPACE_DECL", 
   "ITEMTYPE", 
   "FUNCDEF", 
   "NAMESPACEKEYWORD", 
   "START_TAG", 
   "END_TAG", 
   "VARNAME", 
   "QUOT_ATTRIBUTE_CONTENT", 
   "APOS_ATTRIBUTE_CONTENT", 
   "CDATA_SECTION", 
   "PROCESSING_INSTRUCTION", 
   "XML_COMMENT", 
   "XQUERY_COMMENT", 
};
public static final int[] jjnewLexState = {
   -1, -1, -1, -1, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, -1, -1, -1, -1, 8, 8, 3, 0, 0, 0, -1, 
   -1, -1, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
   0, 0, 0, 0, 0, 3, 0, 2, 2, 11, 11, 11, 6, 6, 2, -1, 2, 2, 2, 0, 0, 2, 0, 0, 0, 
   0, 0, 0, 0, -1, 0, 2, 0, 2, 2, -1, -1, -1, 11, 2, 2, -1, 6, -1, 0, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, 
};
static final long[] jjtoToken = {
   0xfff3fffffffffff1L, 0x3fe3ffffbffffffL, 0x0L, 
};
static final long[] jjtoSkip = {
   0x6L, 0x0L, 0x0L, 
};
static final long[] jjtoSpecial = {
   0x2L, 0x0L, 0x0L, 
};
private ASCII_CharStream input_stream;
private final int[] jjrounds = new int[386];
private final int[] jjstateSet = new int[772];
StringBuffer image;
int jjimageLen;
int lengthOfMatch;
protected char curChar;
public XPathTokenManager(ASCII_CharStream stream)
{
   if (ASCII_CharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}
public XPathTokenManager(ASCII_CharStream stream, int lexState)
{
   this(stream);
   SwitchTo(lexState);
}
public void ReInit(ASCII_CharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private final void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 386; i-- > 0;)
      jjrounds[i] = 0x80000000;
}
public void ReInit(ASCII_CharStream stream, int lexState)
{
   ReInit(stream);
   SwitchTo(lexState);
}
public void SwitchTo(int lexState)
{
   if (lexState >= 18 || lexState < 0)
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
   else
      curLexState = lexState;
}

private final Token jjFillToken()
{
   Token t = Token.newToken(jjmatchedKind);
   t.kind = jjmatchedKind;
   String im = jjstrLiteralImages[jjmatchedKind];
   t.image = (im == null) ? input_stream.GetImage() : im;
   t.beginLine = input_stream.getBeginLine();
   t.beginColumn = input_stream.getBeginColumn();
   t.endLine = input_stream.getEndLine();
   t.endColumn = input_stream.getEndColumn();
   return t;
}

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

public final Token getNextToken() 
{
  int kind;
  Token specialToken = null;
  Token matchedToken;
  int curPos = 0;

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

   switch(curLexState)
   {
     case 0:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_0();
       break;
     case 1:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_1();
       break;
     case 2:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_2();
       break;
     case 3:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_3();
       break;
     case 4:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_4();
       break;
     case 5:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_5();
       break;
     case 6:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_6();
       break;
     case 7:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_7();
       break;
     case 8:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_8();
       break;
     case 9:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_9();
       break;
     case 10:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_10();
       break;
     case 11:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_11();
       break;
     case 12:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_12();
       break;
     case 13:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_13();
       break;
     case 14:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_14();
       break;
     case 15:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_15();
       break;
     case 16:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_16();
       break;
     case 17:
       jjmatchedKind = 0x7fffffff;
       jjmatchedPos = 0;
       curPos = jjMoveStringLiteralDfa0_17();
       break;
   }
     if (jjmatchedKind != 0x7fffffff)
     {
        if (jjmatchedPos + 1 < curPos)
           input_stream.backup(curPos - jjmatchedPos - 1);
        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
        {
           matchedToken = jjFillToken();
           matchedToken.specialToken = specialToken;
           TokenLexicalActions(matchedToken);
       if (jjnewLexState[jjmatchedKind] != -1)
         curLexState = jjnewLexState[jjmatchedKind];
           return matchedToken;
        }
        else
        {
           if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
           {
              matchedToken = jjFillToken();
              if (specialToken == null)
                 specialToken = matchedToken;
              else
              {
                 matchedToken.specialToken = specialToken;
                 specialToken = (specialToken.next = matchedToken);
              }
           }
         if (jjnewLexState[jjmatchedKind] != -1)
           curLexState = jjnewLexState[jjmatchedKind];
           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);
  }
}

final void TokenLexicalActions(Token matchedToken)
{
   switch(jjmatchedKind)
   {
      case 39 :
        if (image == null)
            image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
         else
            image.append(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
                                                                         pushState(DEFAULT);
         break;
      case 40 :
        if (image == null)
            image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
         else
            image.append(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
                                                                             pushState(DEFAULT);
         break;
      case 41 :
        if (image == null)
            image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
         else
            image.append(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
                                                 pushState(DEFAULT);
         break;
      case 42 :
        if (image == null)
            image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
         else
            image.append(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
                                                     pushState(DEFAULT);
         break;
      case 119 :
        if (image == null)
            image = new StringBuffer(jjstrLiteralImages[119]);
         else
            image.append(jjstrLiteralImages[119]);
                     pushState();
         break;
      case 120 :
        if (image == null)
            image = new StringBuffer(jjstrLiteralImages[120]);
         else
            image.append(jjstrLiteralImages[120]);
                     popState();
         break;
      default : 
         break;
   }
}
}
