package org.eclipse.ocl.xtext.markup.ui.contentassist.antlr.internal;

// Hack: Use our own Lexer superclass by means of import.
// Currently there is no other way to specify the superclass for the lexer.
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalMarkupLexer extends Lexer {
    public static final int RULE_ESCAPED=12;
    public static final int RULE_WORD=5;
    public static final int RULE_STRING=8;
    public static final int RULE_VERTICAL_WS=13;
    public static final int T__19=19;
    public static final int T__16=16;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int EOF=-1;
    public static final int T__30=30;
    public static final int RULE_ID=4;
    public static final int RULE_WS=7;
    public static final int RULE_HORIZONTAL_WS=14;
    public static final int RULE_ANY_OTHER=15;
    public static final int RULE_NUMBER=10;
    public static final int RULE_LETTER=11;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int RULE_INT=6;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int RULE_NL=9;
    public static final int T__20=20;
    public static final int T__21=21;

    // delegates
    // delegators

    public InternalMarkupLexer() {;}
    public InternalMarkupLexer(CharStream input) {
        this(input, new RecognizerSharedState());
    }
    public InternalMarkupLexer(CharStream input, RecognizerSharedState state) {
        super(input,state);

    }
    public String getGrammarFileName() { return "InternalMarkup.g"; }

    // $ANTLR start "T__16"
    public final void mT__16() throws RecognitionException {
        try {
            int _type = T__16;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:11:7: ( 'b' )
            // InternalMarkup.g:11:9: 'b'
            {
            match('b');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__16"

    // $ANTLR start "T__17"
    public final void mT__17() throws RecognitionException {
        try {
            int _type = T__17;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:12:7: ( 'e' )
            // InternalMarkup.g:12:9: 'e'
            {
            match('e');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__17"

    // $ANTLR start "T__18"
    public final void mT__18() throws RecognitionException {
        try {
            int _type = T__18;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:13:7: ( 'bullet' )
            // InternalMarkup.g:13:9: 'bullet'
            {
            match("bullet");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__18"

    // $ANTLR start "T__19"
    public final void mT__19() throws RecognitionException {
        try {
            int _type = T__19;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:14:7: ( 'figure' )
            // InternalMarkup.g:14:9: 'figure'
            {
            match("figure");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__19"

    // $ANTLR start "T__20"
    public final void mT__20() throws RecognitionException {
        try {
            int _type = T__20;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:15:7: ( 'figureRef' )
            // InternalMarkup.g:15:9: 'figureRef'
            {
            match("figureRef");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__20"

    // $ANTLR start "T__21"
    public final void mT__21() throws RecognitionException {
        try {
            int _type = T__21;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:16:7: ( 'footnote' )
            // InternalMarkup.g:16:9: 'footnote'
            {
            match("footnote");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__21"

    // $ANTLR start "T__22"
    public final void mT__22() throws RecognitionException {
        try {
            int _type = T__22;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:17:7: ( 'heading' )
            // InternalMarkup.g:17:9: 'heading'
            {
            match("heading");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__22"

    // $ANTLR start "T__23"
    public final void mT__23() throws RecognitionException {
        try {
            int _type = T__23;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:18:7: ( 'oclCode' )
            // InternalMarkup.g:18:9: 'oclCode'
            {
            match("oclCode");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__23"

    // $ANTLR start "T__24"
    public final void mT__24() throws RecognitionException {
        try {
            int _type = T__24;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:19:7: ( 'oclEval' )
            // InternalMarkup.g:19:9: 'oclEval'
            {
            match("oclEval");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__24"

    // $ANTLR start "T__25"
    public final void mT__25() throws RecognitionException {
        try {
            int _type = T__25;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:20:7: ( 'oclText' )
            // InternalMarkup.g:20:9: 'oclText'
            {
            match("oclText");


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__25"

    // $ANTLR start "T__26"
    public final void mT__26() throws RecognitionException {
        try {
            int _type = T__26;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:21:7: ( ':' )
            // InternalMarkup.g:21:9: ':'
            {
            match(':');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__26"

    // $ANTLR start "T__27"
    public final void mT__27() throws RecognitionException {
        try {
            int _type = T__27;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:22:7: ( '#' )
            // InternalMarkup.g:22:9: '#'
            {
            match('#');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__27"

    // $ANTLR start "T__28"
    public final void mT__28() throws RecognitionException {
        try {
            int _type = T__28;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:23:7: ( ',' )
            // InternalMarkup.g:23:9: ','
            {
            match(',');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__28"

    // $ANTLR start "T__29"
    public final void mT__29() throws RecognitionException {
        try {
            int _type = T__29;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:24:7: ( '[' )
            // InternalMarkup.g:24:9: '['
            {
            match('[');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__29"

    // $ANTLR start "T__30"
    public final void mT__30() throws RecognitionException {
        try {
            int _type = T__30;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:25:7: ( ']' )
            // InternalMarkup.g:25:9: ']'
            {
            match(']');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__30"

    // $ANTLR start "RULE_NUMBER"
    public final void mRULE_NUMBER() throws RecognitionException {
        try {
            // InternalMarkup.g:3148:22: ( '0' .. '9' )
            // InternalMarkup.g:3148:24: '0' .. '9'
            {
            matchRange('0','9');

            }

        }
        finally {
        }
    }
    // $ANTLR end "RULE_NUMBER"

    // $ANTLR start "RULE_LETTER"
    public final void mRULE_LETTER() throws RecognitionException {
        try {
            // InternalMarkup.g:3150:22: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) )
            // InternalMarkup.g:3150:24: ( 'a' .. 'z' | 'A' .. 'Z' | '_' )
            {
            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                input.consume();

            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                recover(mse);
                throw mse;}


            }

        }
        finally {
        }
    }
    // $ANTLR end "RULE_LETTER"

    // $ANTLR start "RULE_ESCAPED"
    public final void mRULE_ESCAPED() throws RecognitionException {
        try {
            // InternalMarkup.g:3152:23: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' | '<' | '>' | '[' | ']' ) )
            // InternalMarkup.g:3152:25: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\"' | '\\'' | '\\\\' | '<' | '>' | '[' | ']' )
            {
            match('\\');
            if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='<'||input.LA(1)=='>'||(input.LA(1)>='[' && input.LA(1)<=']')||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
                input.consume();

            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                recover(mse);
                throw mse;}


            }

        }
        finally {
        }
    }
    // $ANTLR end "RULE_ESCAPED"

    // $ANTLR start "RULE_VERTICAL_WS"
    public final void mRULE_VERTICAL_WS() throws RecognitionException {
        try {
            // InternalMarkup.g:3154:27: ( ( '\\n' | '\\r' ) )
            // InternalMarkup.g:3154:29: ( '\\n' | '\\r' )
            {
            if ( input.LA(1)=='\n'||input.LA(1)=='\r' ) {
                input.consume();

            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                recover(mse);
                throw mse;}


            }

        }
        finally {
        }
    }
    // $ANTLR end "RULE_VERTICAL_WS"

    // $ANTLR start "RULE_HORIZONTAL_WS"
    public final void mRULE_HORIZONTAL_WS() throws RecognitionException {
        try {
            // InternalMarkup.g:3156:29: ( ( ' ' | '\\t' ) )
            // InternalMarkup.g:3156:31: ( ' ' | '\\t' )
            {
            if ( input.LA(1)=='\t'||input.LA(1)==' ' ) {
                input.consume();

            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                recover(mse);
                throw mse;}


            }

        }
        finally {
        }
    }
    // $ANTLR end "RULE_HORIZONTAL_WS"

    // $ANTLR start "RULE_INT"
    public final void mRULE_INT() throws RecognitionException {
        try {
            int _type = RULE_INT;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3158:10: ( ( RULE_NUMBER )+ )
            // InternalMarkup.g:3158:12: ( RULE_NUMBER )+
            {
            // InternalMarkup.g:3158:12: ( RULE_NUMBER )+
            int cnt1=0;
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( ((LA1_0>='0' && LA1_0<='9')) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // InternalMarkup.g:3158:12: RULE_NUMBER
            	    {
            	    mRULE_NUMBER();

            	    }
            	    break;

            	default :
            	    if ( cnt1 >= 1 ) break loop1;
                        EarlyExitException eee =
                            new EarlyExitException(1, input);
                        throw eee;
                }
                cnt1++;
            } while (true);


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_INT"

    // $ANTLR start "RULE_STRING"
    public final void mRULE_STRING() throws RecognitionException {
        try {
            int _type = RULE_STRING;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3160:13: ( '\"' ( RULE_ESCAPED | ~ ( ( '\\\\' | '\"' ) ) )* '\"' )
            // InternalMarkup.g:3160:15: '\"' ( RULE_ESCAPED | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
            {
            match('\"');
            // InternalMarkup.g:3160:19: ( RULE_ESCAPED | ~ ( ( '\\\\' | '\"' ) ) )*
            loop2:
            do {
                int alt2=3;
                int LA2_0 = input.LA(1);

                if ( (LA2_0=='\\') ) {
                    alt2=1;
                }
                else if ( ((LA2_0>='\u0000' && LA2_0<='!')||(LA2_0>='#' && LA2_0<='[')||(LA2_0>=']' && LA2_0<='\uFFFF')) ) {
                    alt2=2;
                }


                switch (alt2) {
            	case 1 :
            	    // InternalMarkup.g:3160:20: RULE_ESCAPED
            	    {
            	    mRULE_ESCAPED();

            	    }
            	    break;
            	case 2 :
            	    // InternalMarkup.g:3160:33: ~ ( ( '\\\\' | '\"' ) )
            	    {
            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
            	        input.consume();

            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        recover(mse);
            	        throw mse;}


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);

            match('\"');

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_STRING"

    // $ANTLR start "RULE_ID"
    public final void mRULE_ID() throws RecognitionException {
        try {
            int _type = RULE_ID;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3162:9: ( RULE_LETTER ( RULE_LETTER | RULE_NUMBER )* )
            // InternalMarkup.g:3162:11: RULE_LETTER ( RULE_LETTER | RULE_NUMBER )*
            {
            mRULE_LETTER();
            // InternalMarkup.g:3162:23: ( RULE_LETTER | RULE_NUMBER )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( ((LA3_0>='0' && LA3_0<='9')||(LA3_0>='A' && LA3_0<='Z')||LA3_0=='_'||(LA3_0>='a' && LA3_0<='z')) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // InternalMarkup.g:
            	    {
            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
            	        input.consume();

            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        recover(mse);
            	        throw mse;}


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_ID"

    // $ANTLR start "RULE_WORD"
    public final void mRULE_WORD() throws RecognitionException {
        try {
            int _type = RULE_WORD;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3164:11: ( ( RULE_ESCAPED | ~ ( ( '\\\\' | '\"' | '[' | ']' | ':' | '#' | ',' | RULE_HORIZONTAL_WS | RULE_VERTICAL_WS ) ) )+ )
            // InternalMarkup.g:3164:13: ( RULE_ESCAPED | ~ ( ( '\\\\' | '\"' | '[' | ']' | ':' | '#' | ',' | RULE_HORIZONTAL_WS | RULE_VERTICAL_WS ) ) )+
            {
            // InternalMarkup.g:3164:13: ( RULE_ESCAPED | ~ ( ( '\\\\' | '\"' | '[' | ']' | ':' | '#' | ',' | RULE_HORIZONTAL_WS | RULE_VERTICAL_WS ) ) )+
            int cnt4=0;
            loop4:
            do {
                int alt4=3;
                int LA4_0 = input.LA(1);

                if ( (LA4_0=='\\') ) {
                    alt4=1;
                }
                else if ( ((LA4_0>='\u0000' && LA4_0<='\b')||(LA4_0>='\u000B' && LA4_0<='\f')||(LA4_0>='\u000E' && LA4_0<='\u001F')||LA4_0=='!'||(LA4_0>='$' && LA4_0<='+')||(LA4_0>='-' && LA4_0<='9')||(LA4_0>=';' && LA4_0<='Z')||(LA4_0>='^' && LA4_0<='\uFFFF')) ) {
                    alt4=2;
                }


                switch (alt4) {
            	case 1 :
            	    // InternalMarkup.g:3164:14: RULE_ESCAPED
            	    {
            	    mRULE_ESCAPED();

            	    }
            	    break;
            	case 2 :
            	    // InternalMarkup.g:3164:27: ~ ( ( '\\\\' | '\"' | '[' | ']' | ':' | '#' | ',' | RULE_HORIZONTAL_WS | RULE_VERTICAL_WS ) )
            	    {
            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\b')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\u001F')||input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='+')||(input.LA(1)>='-' && input.LA(1)<='9')||(input.LA(1)>=';' && input.LA(1)<='Z')||(input.LA(1)>='^' && input.LA(1)<='\uFFFF') ) {
            	        input.consume();

            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        recover(mse);
            	        throw mse;}


            	    }
            	    break;

            	default :
            	    if ( cnt4 >= 1 ) break loop4;
                        EarlyExitException eee =
                            new EarlyExitException(4, input);
                        throw eee;
                }
                cnt4++;
            } while (true);


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_WORD"

    // $ANTLR start "RULE_NL"
    public final void mRULE_NL() throws RecognitionException {
        try {
            int _type = RULE_NL;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3166:9: ( ( ( RULE_HORIZONTAL_WS )* RULE_VERTICAL_WS )+ )
            // InternalMarkup.g:3166:11: ( ( RULE_HORIZONTAL_WS )* RULE_VERTICAL_WS )+
            {
            // InternalMarkup.g:3166:11: ( ( RULE_HORIZONTAL_WS )* RULE_VERTICAL_WS )+
            int cnt6=0;
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( ((LA6_0>='\t' && LA6_0<='\n')||LA6_0=='\r'||LA6_0==' ') ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // InternalMarkup.g:3166:12: ( RULE_HORIZONTAL_WS )* RULE_VERTICAL_WS
            	    {
            	    // InternalMarkup.g:3166:12: ( RULE_HORIZONTAL_WS )*
            	    loop5:
            	    do {
            	        int alt5=2;
            	        int LA5_0 = input.LA(1);

            	        if ( (LA5_0=='\t'||LA5_0==' ') ) {
            	            alt5=1;
            	        }


            	        switch (alt5) {
            	    	case 1 :
            	    	    // InternalMarkup.g:3166:12: RULE_HORIZONTAL_WS
            	    	    {
            	    	    mRULE_HORIZONTAL_WS();

            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop5;
            	        }
            	    } while (true);

            	    mRULE_VERTICAL_WS();

            	    }
            	    break;

            	default :
            	    if ( cnt6 >= 1 ) break loop6;
                        EarlyExitException eee =
                            new EarlyExitException(6, input);
                        throw eee;
                }
                cnt6++;
            } while (true);


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_NL"

    // $ANTLR start "RULE_WS"
    public final void mRULE_WS() throws RecognitionException {
        try {
            int _type = RULE_WS;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3168:9: ( ( RULE_HORIZONTAL_WS )+ )
            // InternalMarkup.g:3168:11: ( RULE_HORIZONTAL_WS )+
            {
            // InternalMarkup.g:3168:11: ( RULE_HORIZONTAL_WS )+
            int cnt7=0;
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0=='\t'||LA7_0==' ') ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // InternalMarkup.g:3168:11: RULE_HORIZONTAL_WS
            	    {
            	    mRULE_HORIZONTAL_WS();

            	    }
            	    break;

            	default :
            	    if ( cnt7 >= 1 ) break loop7;
                        EarlyExitException eee =
                            new EarlyExitException(7, input);
                        throw eee;
                }
                cnt7++;
            } while (true);


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_WS"

    // $ANTLR start "RULE_ANY_OTHER"
    public final void mRULE_ANY_OTHER() throws RecognitionException {
        try {
            int _type = RULE_ANY_OTHER;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalMarkup.g:3170:16: ( . )
            // InternalMarkup.g:3170:18: .
            {
            matchAny();

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "RULE_ANY_OTHER"

    public void mTokens() throws RecognitionException {
        // InternalMarkup.g:1:8: ( T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_INT | RULE_STRING | RULE_ID | RULE_WORD | RULE_NL | RULE_WS | RULE_ANY_OTHER )
        int alt8=22;
        alt8 = dfa8.predict(input);
        switch (alt8) {
            case 1 :
                // InternalMarkup.g:1:10: T__16
                {
                mT__16();

                }
                break;
            case 2 :
                // InternalMarkup.g:1:16: T__17
                {
                mT__17();

                }
                break;
            case 3 :
                // InternalMarkup.g:1:22: T__18
                {
                mT__18();

                }
                break;
            case 4 :
                // InternalMarkup.g:1:28: T__19
                {
                mT__19();

                }
                break;
            case 5 :
                // InternalMarkup.g:1:34: T__20
                {
                mT__20();

                }
                break;
            case 6 :
                // InternalMarkup.g:1:40: T__21
                {
                mT__21();

                }
                break;
            case 7 :
                // InternalMarkup.g:1:46: T__22
                {
                mT__22();

                }
                break;
            case 8 :
                // InternalMarkup.g:1:52: T__23
                {
                mT__23();

                }
                break;
            case 9 :
                // InternalMarkup.g:1:58: T__24
                {
                mT__24();

                }
                break;
            case 10 :
                // InternalMarkup.g:1:64: T__25
                {
                mT__25();

                }
                break;
            case 11 :
                // InternalMarkup.g:1:70: T__26
                {
                mT__26();

                }
                break;
            case 12 :
                // InternalMarkup.g:1:76: T__27
                {
                mT__27();

                }
                break;
            case 13 :
                // InternalMarkup.g:1:82: T__28
                {
                mT__28();

                }
                break;
            case 14 :
                // InternalMarkup.g:1:88: T__29
                {
                mT__29();

                }
                break;
            case 15 :
                // InternalMarkup.g:1:94: T__30
                {
                mT__30();

                }
                break;
            case 16 :
                // InternalMarkup.g:1:100: RULE_INT
                {
                mRULE_INT();

                }
                break;
            case 17 :
                // InternalMarkup.g:1:109: RULE_STRING
                {
                mRULE_STRING();

                }
                break;
            case 18 :
                // InternalMarkup.g:1:121: RULE_ID
                {
                mRULE_ID();

                }
                break;
            case 19 :
                // InternalMarkup.g:1:129: RULE_WORD
                {
                mRULE_WORD();

                }
                break;
            case 20 :
                // InternalMarkup.g:1:139: RULE_NL
                {
                mRULE_NL();

                }
                break;
            case 21 :
                // InternalMarkup.g:1:147: RULE_WS
                {
                mRULE_WS();

                }
                break;
            case 22 :
                // InternalMarkup.g:1:155: RULE_ANY_OTHER
                {
                mRULE_ANY_OTHER();

                }
                break;

        }

    }


    protected DFA8 dfa8 = new DFA8(this);
    static final String DFA8_eotS =
        "\1\uffff\1\23\1\26\3\31\5\uffff\1\41\1\44\1\31\1\44\1\uffff\1\45\1\uffff\1\31\1\uffff\1\31\2\uffff\2\31\1\uffff\2\31\6\uffff\1\41\3\uffff\1\45\1\uffff\23\31\1\102\1\104\5\31\1\uffff\1\31\1\uffff\1\31\1\114\1\115\1\116\1\117\1\31\1\121\4\uffff\1\122\2\uffff";
    static final String DFA8_eofS =
        "\123\uffff";
    static final String DFA8_minS =
        "\6\0\5\uffff\3\0\1\42\1\uffff\1\11\1\uffff\1\0\1\uffff\1\0\2\uffff\2\0\1\uffff\2\0\6\uffff\1\0\3\uffff\1\11\1\uffff\32\0\1\uffff\1\0\1\uffff\7\0\4\uffff\1\0\2\uffff";
    static final String DFA8_maxS =
        "\6\uffff\5\uffff\3\uffff\1\164\1\uffff\1\40\1\uffff\1\uffff\1\uffff\1\uffff\2\uffff\2\uffff\1\uffff\2\uffff\6\uffff\1\uffff\3\uffff\1\40\1\uffff\32\uffff\1\uffff\1\uffff\1\uffff\7\uffff\4\uffff\1\uffff\2\uffff";
    static final String DFA8_acceptS =
        "\6\uffff\1\13\1\14\1\15\1\16\1\17\4\uffff\1\23\1\uffff\1\24\1\uffff\1\1\1\uffff\1\23\1\2\2\uffff\1\22\2\uffff\1\13\1\14\1\15\1\16\1\17\1\20\1\uffff\1\21\1\26\1\25\1\uffff\1\24\32\uffff\1\3\1\uffff\1\4\7\uffff\1\7\1\10\1\11\1\12\1\uffff\1\6\1\5";
    static final String DFA8_specialS =
        "\1\23\1\55\1\41\1\31\1\13\1\30\5\uffff\1\52\1\43\1\33\4\uffff\1\44\1\uffff\1\14\2\uffff\1\34\1\57\1\uffff\1\2\1\15\6\uffff\1\46\5\uffff\1\45\1\35\1\60\1\3\1\20\1\47\1\40\1\61\1\4\1\10\1\17\1\24\1\50\1\42\1\62\1\6\1\11\1\21\1\25\1\36\1\26\1\0\1\7\1\12\1\22\1\27\1\uffff\1\53\1\uffff\1\1\1\5\1\16\1\32\1\37\1\54\1\56\4\uffff\1\51\2\uffff}>";
    static final String[] DFA8_transitionS = DFA8_transitionS_.DFA8_transitionS;
    private static final class DFA8_transitionS_ {
        static final String[] DFA8_transitionS = {
                "\11\17\1\20\1\21\2\17\1\21\22\17\1\20\1\17\1\14\1\7\10\17\1\10\3\17\12\13\1\6\6\17\32\15\1\11\1\16\1\12\1\17\1\15\1\17\1\15\1\1\2\15\1\2\1\3\1\15\1\4\6\15\1\5\13\15\uff85\17",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\24\24\1\22\5\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\10\24\1\27\5\24\1\30\13\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\32\25\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\2\24\1\33\27\24\uff85\25",
                "",
                "",
                "",
                "",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\42\1\uffff\40\25\1\uffff\1\25\1\uffff\uffa2\25",
                "\0\43",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\1\25\4\uffff\1\25\24\uffff\1\25\1\uffff\1\25\34\uffff\3\25\4\uffff\1\25\3\uffff\1\25\7\uffff\1\25\3\uffff\1\25\1\uffff\1\25",
                "",
                "\1\46\1\47\2\uffff\1\47\22\uffff\1\46",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\13\24\1\50\16\24\uff85\25",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\6\24\1\51\23\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\16\24\1\52\13\24\uff85\25",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\1\53\31\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\13\24\1\54\16\24\uff85\25",
                "",
                "",
                "",
                "",
                "",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\42\1\uffff\40\25\1\uffff\1\25\1\uffff\uffa2\25",
                "",
                "",
                "",
                "\1\46\1\47\2\uffff\1\47\22\uffff\1\46",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\13\24\1\55\16\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\24\24\1\56\5\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\23\24\1\57\6\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\3\24\1\60\26\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\2\24\1\61\1\24\1\62\16\24\1\63\6\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\64\25\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\21\24\1\65\10\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\15\24\1\66\14\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\10\24\1\67\21\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\16\24\1\70\13\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\25\24\1\71\4\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\72\25\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\23\24\1\73\6\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\74\25\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\16\24\1\75\13\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\15\24\1\76\14\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\3\24\1\77\26\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\1\100\31\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\27\24\1\101\2\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\21\24\1\103\10\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\23\24\1\105\6\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\6\24\1\106\23\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\107\25\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\13\24\1\110\16\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\23\24\1\111\6\24\uff85\25",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\112\25\24\uff85\25",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\4\24\1\113\25\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\5\24\1\120\24\24\uff85\25",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "",
                "",
                "",
                "",
                "\11\25\2\uffff\2\25\1\uffff\22\25\1\uffff\1\25\2\uffff\10\25\1\uffff\3\25\12\24\1\uffff\6\25\32\24\1\uffff\1\25\1\uffff\1\25\1\24\1\25\32\24\uff85\25",
                "",
                ""
        };
    }

    static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
    static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
    static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
    static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
    static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
    static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
    static final short[][] DFA8_transition;

    static {
        int numStates = DFA8_transitionS.length;
        DFA8_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
        }
    }

    static class DFA8 extends DFA {

        public DFA8(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 8;
            this.eot = DFA8_eot;
            this.eof = DFA8_eof;
            this.min = DFA8_min;
            this.max = DFA8_max;
            this.accept = DFA8_accept;
            this.special = DFA8_special;
            this.transition = DFA8_transition;
        }
        public String getDescription() {
            return "1:1: Tokens : ( T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_INT | RULE_STRING | RULE_ID | RULE_WORD | RULE_NL | RULE_WS | RULE_ANY_OTHER );";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            IntStream input = _input;
        	int _s = s;
            switch ( s ) {
                    case 0 :
                        int LA8_61 = input.LA(1);

                        s = -1;
                        if ( (LA8_61=='t') ) {s = 69;}

                        else if ( ((LA8_61>='0' && LA8_61<='9')||(LA8_61>='A' && LA8_61<='Z')||LA8_61=='_'||(LA8_61>='a' && LA8_61<='s')||(LA8_61>='u' && LA8_61<='z')) ) {s = 20;}

                        else if ( ((LA8_61>='\u0000' && LA8_61<='\b')||(LA8_61>='\u000B' && LA8_61<='\f')||(LA8_61>='\u000E' && LA8_61<='\u001F')||LA8_61=='!'||(LA8_61>='$' && LA8_61<='+')||(LA8_61>='-' && LA8_61<='/')||(LA8_61>=';' && LA8_61<='@')||LA8_61=='\\'||LA8_61=='^'||LA8_61=='`'||(LA8_61>='{' && LA8_61<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 1 :
                        int LA8_69 = input.LA(1);

                        s = -1;
                        if ( (LA8_69=='e') ) {s = 75;}

                        else if ( ((LA8_69>='0' && LA8_69<='9')||(LA8_69>='A' && LA8_69<='Z')||LA8_69=='_'||(LA8_69>='a' && LA8_69<='d')||(LA8_69>='f' && LA8_69<='z')) ) {s = 20;}

                        else if ( ((LA8_69>='\u0000' && LA8_69<='\b')||(LA8_69>='\u000B' && LA8_69<='\f')||(LA8_69>='\u000E' && LA8_69<='\u001F')||LA8_69=='!'||(LA8_69>='$' && LA8_69<='+')||(LA8_69>='-' && LA8_69<='/')||(LA8_69>=';' && LA8_69<='@')||LA8_69=='\\'||LA8_69=='^'||LA8_69=='`'||(LA8_69>='{' && LA8_69<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 2 :
                        int LA8_26 = input.LA(1);

                        s = -1;
                        if ( (LA8_26=='a') ) {s = 43;}

                        else if ( ((LA8_26>='0' && LA8_26<='9')||(LA8_26>='A' && LA8_26<='Z')||LA8_26=='_'||(LA8_26>='b' && LA8_26<='z')) ) {s = 20;}

                        else if ( ((LA8_26>='\u0000' && LA8_26<='\b')||(LA8_26>='\u000B' && LA8_26<='\f')||(LA8_26>='\u000E' && LA8_26<='\u001F')||LA8_26=='!'||(LA8_26>='$' && LA8_26<='+')||(LA8_26>='-' && LA8_26<='/')||(LA8_26>=';' && LA8_26<='@')||LA8_26=='\\'||LA8_26=='^'||LA8_26=='`'||(LA8_26>='{' && LA8_26<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 3 :
                        int LA8_43 = input.LA(1);

                        s = -1;
                        if ( (LA8_43=='d') ) {s = 48;}

                        else if ( ((LA8_43>='0' && LA8_43<='9')||(LA8_43>='A' && LA8_43<='Z')||LA8_43=='_'||(LA8_43>='a' && LA8_43<='c')||(LA8_43>='e' && LA8_43<='z')) ) {s = 20;}

                        else if ( ((LA8_43>='\u0000' && LA8_43<='\b')||(LA8_43>='\u000B' && LA8_43<='\f')||(LA8_43>='\u000E' && LA8_43<='\u001F')||LA8_43=='!'||(LA8_43>='$' && LA8_43<='+')||(LA8_43>='-' && LA8_43<='/')||(LA8_43>=';' && LA8_43<='@')||LA8_43=='\\'||LA8_43=='^'||LA8_43=='`'||(LA8_43>='{' && LA8_43<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 4 :
                        int LA8_48 = input.LA(1);

                        s = -1;
                        if ( (LA8_48=='i') ) {s = 55;}

                        else if ( ((LA8_48>='0' && LA8_48<='9')||(LA8_48>='A' && LA8_48<='Z')||LA8_48=='_'||(LA8_48>='a' && LA8_48<='h')||(LA8_48>='j' && LA8_48<='z')) ) {s = 20;}

                        else if ( ((LA8_48>='\u0000' && LA8_48<='\b')||(LA8_48>='\u000B' && LA8_48<='\f')||(LA8_48>='\u000E' && LA8_48<='\u001F')||LA8_48=='!'||(LA8_48>='$' && LA8_48<='+')||(LA8_48>='-' && LA8_48<='/')||(LA8_48>=';' && LA8_48<='@')||LA8_48=='\\'||LA8_48=='^'||LA8_48=='`'||(LA8_48>='{' && LA8_48<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 5 :
                        int LA8_70 = input.LA(1);

                        s = -1;
                        if ( ((LA8_70>='0' && LA8_70<='9')||(LA8_70>='A' && LA8_70<='Z')||LA8_70=='_'||(LA8_70>='a' && LA8_70<='z')) ) {s = 20;}

                        else if ( ((LA8_70>='\u0000' && LA8_70<='\b')||(LA8_70>='\u000B' && LA8_70<='\f')||(LA8_70>='\u000E' && LA8_70<='\u001F')||LA8_70=='!'||(LA8_70>='$' && LA8_70<='+')||(LA8_70>='-' && LA8_70<='/')||(LA8_70>=';' && LA8_70<='@')||LA8_70=='\\'||LA8_70=='^'||LA8_70=='`'||(LA8_70>='{' && LA8_70<='\uFFFF')) ) {s = 21;}

                        else s = 76;

                        if ( s>=0 ) return s;
                        break;
                    case 6 :
                        int LA8_55 = input.LA(1);

                        s = -1;
                        if ( (LA8_55=='n') ) {s = 62;}

                        else if ( ((LA8_55>='0' && LA8_55<='9')||(LA8_55>='A' && LA8_55<='Z')||LA8_55=='_'||(LA8_55>='a' && LA8_55<='m')||(LA8_55>='o' && LA8_55<='z')) ) {s = 20;}

                        else if ( ((LA8_55>='\u0000' && LA8_55<='\b')||(LA8_55>='\u000B' && LA8_55<='\f')||(LA8_55>='\u000E' && LA8_55<='\u001F')||LA8_55=='!'||(LA8_55>='$' && LA8_55<='+')||(LA8_55>='-' && LA8_55<='/')||(LA8_55>=';' && LA8_55<='@')||LA8_55=='\\'||LA8_55=='^'||LA8_55=='`'||(LA8_55>='{' && LA8_55<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 7 :
                        int LA8_62 = input.LA(1);

                        s = -1;
                        if ( (LA8_62=='g') ) {s = 70;}

                        else if ( ((LA8_62>='0' && LA8_62<='9')||(LA8_62>='A' && LA8_62<='Z')||LA8_62=='_'||(LA8_62>='a' && LA8_62<='f')||(LA8_62>='h' && LA8_62<='z')) ) {s = 20;}

                        else if ( ((LA8_62>='\u0000' && LA8_62<='\b')||(LA8_62>='\u000B' && LA8_62<='\f')||(LA8_62>='\u000E' && LA8_62<='\u001F')||LA8_62=='!'||(LA8_62>='$' && LA8_62<='+')||(LA8_62>='-' && LA8_62<='/')||(LA8_62>=';' && LA8_62<='@')||LA8_62=='\\'||LA8_62=='^'||LA8_62=='`'||(LA8_62>='{' && LA8_62<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 8 :
                        int LA8_49 = input.LA(1);

                        s = -1;
                        if ( (LA8_49=='o') ) {s = 56;}

                        else if ( ((LA8_49>='0' && LA8_49<='9')||(LA8_49>='A' && LA8_49<='Z')||LA8_49=='_'||(LA8_49>='a' && LA8_49<='n')||(LA8_49>='p' && LA8_49<='z')) ) {s = 20;}

                        else if ( ((LA8_49>='\u0000' && LA8_49<='\b')||(LA8_49>='\u000B' && LA8_49<='\f')||(LA8_49>='\u000E' && LA8_49<='\u001F')||LA8_49=='!'||(LA8_49>='$' && LA8_49<='+')||(LA8_49>='-' && LA8_49<='/')||(LA8_49>=';' && LA8_49<='@')||LA8_49=='\\'||LA8_49=='^'||LA8_49=='`'||(LA8_49>='{' && LA8_49<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 9 :
                        int LA8_56 = input.LA(1);

                        s = -1;
                        if ( (LA8_56=='d') ) {s = 63;}

                        else if ( ((LA8_56>='0' && LA8_56<='9')||(LA8_56>='A' && LA8_56<='Z')||LA8_56=='_'||(LA8_56>='a' && LA8_56<='c')||(LA8_56>='e' && LA8_56<='z')) ) {s = 20;}

                        else if ( ((LA8_56>='\u0000' && LA8_56<='\b')||(LA8_56>='\u000B' && LA8_56<='\f')||(LA8_56>='\u000E' && LA8_56<='\u001F')||LA8_56=='!'||(LA8_56>='$' && LA8_56<='+')||(LA8_56>='-' && LA8_56<='/')||(LA8_56>=';' && LA8_56<='@')||LA8_56=='\\'||LA8_56=='^'||LA8_56=='`'||(LA8_56>='{' && LA8_56<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 10 :
                        int LA8_63 = input.LA(1);

                        s = -1;
                        if ( (LA8_63=='e') ) {s = 71;}

                        else if ( ((LA8_63>='0' && LA8_63<='9')||(LA8_63>='A' && LA8_63<='Z')||LA8_63=='_'||(LA8_63>='a' && LA8_63<='d')||(LA8_63>='f' && LA8_63<='z')) ) {s = 20;}

                        else if ( ((LA8_63>='\u0000' && LA8_63<='\b')||(LA8_63>='\u000B' && LA8_63<='\f')||(LA8_63>='\u000E' && LA8_63<='\u001F')||LA8_63=='!'||(LA8_63>='$' && LA8_63<='+')||(LA8_63>='-' && LA8_63<='/')||(LA8_63>=';' && LA8_63<='@')||LA8_63=='\\'||LA8_63=='^'||LA8_63=='`'||(LA8_63>='{' && LA8_63<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 11 :
                        int LA8_4 = input.LA(1);

                        s = -1;
                        if ( (LA8_4=='e') ) {s = 26;}

                        else if ( ((LA8_4>='0' && LA8_4<='9')||(LA8_4>='A' && LA8_4<='Z')||LA8_4=='_'||(LA8_4>='a' && LA8_4<='d')||(LA8_4>='f' && LA8_4<='z')) ) {s = 20;}

                        else if ( ((LA8_4>='\u0000' && LA8_4<='\b')||(LA8_4>='\u000B' && LA8_4<='\f')||(LA8_4>='\u000E' && LA8_4<='\u001F')||LA8_4=='!'||(LA8_4>='$' && LA8_4<='+')||(LA8_4>='-' && LA8_4<='/')||(LA8_4>=';' && LA8_4<='@')||LA8_4=='\\'||LA8_4=='^'||LA8_4=='`'||(LA8_4>='{' && LA8_4<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 12 :
                        int LA8_20 = input.LA(1);

                        s = -1;
                        if ( ((LA8_20>='0' && LA8_20<='9')||(LA8_20>='A' && LA8_20<='Z')||LA8_20=='_'||(LA8_20>='a' && LA8_20<='z')) ) {s = 20;}

                        else if ( ((LA8_20>='\u0000' && LA8_20<='\b')||(LA8_20>='\u000B' && LA8_20<='\f')||(LA8_20>='\u000E' && LA8_20<='\u001F')||LA8_20=='!'||(LA8_20>='$' && LA8_20<='+')||(LA8_20>='-' && LA8_20<='/')||(LA8_20>=';' && LA8_20<='@')||LA8_20=='\\'||LA8_20=='^'||LA8_20=='`'||(LA8_20>='{' && LA8_20<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 13 :
                        int LA8_27 = input.LA(1);

                        s = -1;
                        if ( (LA8_27=='l') ) {s = 44;}

                        else if ( ((LA8_27>='0' && LA8_27<='9')||(LA8_27>='A' && LA8_27<='Z')||LA8_27=='_'||(LA8_27>='a' && LA8_27<='k')||(LA8_27>='m' && LA8_27<='z')) ) {s = 20;}

                        else if ( ((LA8_27>='\u0000' && LA8_27<='\b')||(LA8_27>='\u000B' && LA8_27<='\f')||(LA8_27>='\u000E' && LA8_27<='\u001F')||LA8_27=='!'||(LA8_27>='$' && LA8_27<='+')||(LA8_27>='-' && LA8_27<='/')||(LA8_27>=';' && LA8_27<='@')||LA8_27=='\\'||LA8_27=='^'||LA8_27=='`'||(LA8_27>='{' && LA8_27<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 14 :
                        int LA8_71 = input.LA(1);

                        s = -1;
                        if ( ((LA8_71>='0' && LA8_71<='9')||(LA8_71>='A' && LA8_71<='Z')||LA8_71=='_'||(LA8_71>='a' && LA8_71<='z')) ) {s = 20;}

                        else if ( ((LA8_71>='\u0000' && LA8_71<='\b')||(LA8_71>='\u000B' && LA8_71<='\f')||(LA8_71>='\u000E' && LA8_71<='\u001F')||LA8_71=='!'||(LA8_71>='$' && LA8_71<='+')||(LA8_71>='-' && LA8_71<='/')||(LA8_71>=';' && LA8_71<='@')||LA8_71=='\\'||LA8_71=='^'||LA8_71=='`'||(LA8_71>='{' && LA8_71<='\uFFFF')) ) {s = 21;}

                        else s = 77;

                        if ( s>=0 ) return s;
                        break;
                    case 15 :
                        int LA8_50 = input.LA(1);

                        s = -1;
                        if ( (LA8_50=='v') ) {s = 57;}

                        else if ( ((LA8_50>='0' && LA8_50<='9')||(LA8_50>='A' && LA8_50<='Z')||LA8_50=='_'||(LA8_50>='a' && LA8_50<='u')||(LA8_50>='w' && LA8_50<='z')) ) {s = 20;}

                        else if ( ((LA8_50>='\u0000' && LA8_50<='\b')||(LA8_50>='\u000B' && LA8_50<='\f')||(LA8_50>='\u000E' && LA8_50<='\u001F')||LA8_50=='!'||(LA8_50>='$' && LA8_50<='+')||(LA8_50>='-' && LA8_50<='/')||(LA8_50>=';' && LA8_50<='@')||LA8_50=='\\'||LA8_50=='^'||LA8_50=='`'||(LA8_50>='{' && LA8_50<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 16 :
                        int LA8_44 = input.LA(1);

                        s = -1;
                        if ( (LA8_44=='C') ) {s = 49;}

                        else if ( (LA8_44=='E') ) {s = 50;}

                        else if ( (LA8_44=='T') ) {s = 51;}

                        else if ( ((LA8_44>='0' && LA8_44<='9')||(LA8_44>='A' && LA8_44<='B')||LA8_44=='D'||(LA8_44>='F' && LA8_44<='S')||(LA8_44>='U' && LA8_44<='Z')||LA8_44=='_'||(LA8_44>='a' && LA8_44<='z')) ) {s = 20;}

                        else if ( ((LA8_44>='\u0000' && LA8_44<='\b')||(LA8_44>='\u000B' && LA8_44<='\f')||(LA8_44>='\u000E' && LA8_44<='\u001F')||LA8_44=='!'||(LA8_44>='$' && LA8_44<='+')||(LA8_44>='-' && LA8_44<='/')||(LA8_44>=';' && LA8_44<='@')||LA8_44=='\\'||LA8_44=='^'||LA8_44=='`'||(LA8_44>='{' && LA8_44<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 17 :
                        int LA8_57 = input.LA(1);

                        s = -1;
                        if ( (LA8_57=='a') ) {s = 64;}

                        else if ( ((LA8_57>='0' && LA8_57<='9')||(LA8_57>='A' && LA8_57<='Z')||LA8_57=='_'||(LA8_57>='b' && LA8_57<='z')) ) {s = 20;}

                        else if ( ((LA8_57>='\u0000' && LA8_57<='\b')||(LA8_57>='\u000B' && LA8_57<='\f')||(LA8_57>='\u000E' && LA8_57<='\u001F')||LA8_57=='!'||(LA8_57>='$' && LA8_57<='+')||(LA8_57>='-' && LA8_57<='/')||(LA8_57>=';' && LA8_57<='@')||LA8_57=='\\'||LA8_57=='^'||LA8_57=='`'||(LA8_57>='{' && LA8_57<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 18 :
                        int LA8_64 = input.LA(1);

                        s = -1;
                        if ( (LA8_64=='l') ) {s = 72;}

                        else if ( ((LA8_64>='0' && LA8_64<='9')||(LA8_64>='A' && LA8_64<='Z')||LA8_64=='_'||(LA8_64>='a' && LA8_64<='k')||(LA8_64>='m' && LA8_64<='z')) ) {s = 20;}

                        else if ( ((LA8_64>='\u0000' && LA8_64<='\b')||(LA8_64>='\u000B' && LA8_64<='\f')||(LA8_64>='\u000E' && LA8_64<='\u001F')||LA8_64=='!'||(LA8_64>='$' && LA8_64<='+')||(LA8_64>='-' && LA8_64<='/')||(LA8_64>=';' && LA8_64<='@')||LA8_64=='\\'||LA8_64=='^'||LA8_64=='`'||(LA8_64>='{' && LA8_64<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 19 :
                        int LA8_0 = input.LA(1);

                        s = -1;
                        if ( (LA8_0=='b') ) {s = 1;}

                        else if ( (LA8_0=='e') ) {s = 2;}

                        else if ( (LA8_0=='f') ) {s = 3;}

                        else if ( (LA8_0=='h') ) {s = 4;}

                        else if ( (LA8_0=='o') ) {s = 5;}

                        else if ( (LA8_0==':') ) {s = 6;}

                        else if ( (LA8_0=='#') ) {s = 7;}

                        else if ( (LA8_0==',') ) {s = 8;}

                        else if ( (LA8_0=='[') ) {s = 9;}

                        else if ( (LA8_0==']') ) {s = 10;}

                        else if ( ((LA8_0>='0' && LA8_0<='9')) ) {s = 11;}

                        else if ( (LA8_0=='\"') ) {s = 12;}

                        else if ( ((LA8_0>='A' && LA8_0<='Z')||LA8_0=='_'||LA8_0=='a'||(LA8_0>='c' && LA8_0<='d')||LA8_0=='g'||(LA8_0>='i' && LA8_0<='n')||(LA8_0>='p' && LA8_0<='z')) ) {s = 13;}

                        else if ( (LA8_0=='\\') ) {s = 14;}

                        else if ( ((LA8_0>='\u0000' && LA8_0<='\b')||(LA8_0>='\u000B' && LA8_0<='\f')||(LA8_0>='\u000E' && LA8_0<='\u001F')||LA8_0=='!'||(LA8_0>='$' && LA8_0<='+')||(LA8_0>='-' && LA8_0<='/')||(LA8_0>=';' && LA8_0<='@')||LA8_0=='^'||LA8_0=='`'||(LA8_0>='{' && LA8_0<='\uFFFF')) ) {s = 15;}

                        else if ( (LA8_0=='\t'||LA8_0==' ') ) {s = 16;}

                        else if ( (LA8_0=='\n'||LA8_0=='\r') ) {s = 17;}

                        if ( s>=0 ) return s;
                        break;
                    case 20 :
                        int LA8_51 = input.LA(1);

                        s = -1;
                        if ( (LA8_51=='e') ) {s = 58;}

                        else if ( ((LA8_51>='0' && LA8_51<='9')||(LA8_51>='A' && LA8_51<='Z')||LA8_51=='_'||(LA8_51>='a' && LA8_51<='d')||(LA8_51>='f' && LA8_51<='z')) ) {s = 20;}

                        else if ( ((LA8_51>='\u0000' && LA8_51<='\b')||(LA8_51>='\u000B' && LA8_51<='\f')||(LA8_51>='\u000E' && LA8_51<='\u001F')||LA8_51=='!'||(LA8_51>='$' && LA8_51<='+')||(LA8_51>='-' && LA8_51<='/')||(LA8_51>=';' && LA8_51<='@')||LA8_51=='\\'||LA8_51=='^'||LA8_51=='`'||(LA8_51>='{' && LA8_51<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 21 :
                        int LA8_58 = input.LA(1);

                        s = -1;
                        if ( (LA8_58=='x') ) {s = 65;}

                        else if ( ((LA8_58>='0' && LA8_58<='9')||(LA8_58>='A' && LA8_58<='Z')||LA8_58=='_'||(LA8_58>='a' && LA8_58<='w')||(LA8_58>='y' && LA8_58<='z')) ) {s = 20;}

                        else if ( ((LA8_58>='\u0000' && LA8_58<='\b')||(LA8_58>='\u000B' && LA8_58<='\f')||(LA8_58>='\u000E' && LA8_58<='\u001F')||LA8_58=='!'||(LA8_58>='$' && LA8_58<='+')||(LA8_58>='-' && LA8_58<='/')||(LA8_58>=';' && LA8_58<='@')||LA8_58=='\\'||LA8_58=='^'||LA8_58=='`'||(LA8_58>='{' && LA8_58<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 22 :
                        int LA8_60 = input.LA(1);

                        s = -1;
                        if ( (LA8_60=='R') ) {s = 67;}

                        else if ( ((LA8_60>='0' && LA8_60<='9')||(LA8_60>='A' && LA8_60<='Q')||(LA8_60>='S' && LA8_60<='Z')||LA8_60=='_'||(LA8_60>='a' && LA8_60<='z')) ) {s = 20;}

                        else if ( ((LA8_60>='\u0000' && LA8_60<='\b')||(LA8_60>='\u000B' && LA8_60<='\f')||(LA8_60>='\u000E' && LA8_60<='\u001F')||LA8_60=='!'||(LA8_60>='$' && LA8_60<='+')||(LA8_60>='-' && LA8_60<='/')||(LA8_60>=';' && LA8_60<='@')||LA8_60=='\\'||LA8_60=='^'||LA8_60=='`'||(LA8_60>='{' && LA8_60<='\uFFFF')) ) {s = 21;}

                        else s = 68;

                        if ( s>=0 ) return s;
                        break;
                    case 23 :
                        int LA8_65 = input.LA(1);

                        s = -1;
                        if ( (LA8_65=='t') ) {s = 73;}

                        else if ( ((LA8_65>='0' && LA8_65<='9')||(LA8_65>='A' && LA8_65<='Z')||LA8_65=='_'||(LA8_65>='a' && LA8_65<='s')||(LA8_65>='u' && LA8_65<='z')) ) {s = 20;}

                        else if ( ((LA8_65>='\u0000' && LA8_65<='\b')||(LA8_65>='\u000B' && LA8_65<='\f')||(LA8_65>='\u000E' && LA8_65<='\u001F')||LA8_65=='!'||(LA8_65>='$' && LA8_65<='+')||(LA8_65>='-' && LA8_65<='/')||(LA8_65>=';' && LA8_65<='@')||LA8_65=='\\'||LA8_65=='^'||LA8_65=='`'||(LA8_65>='{' && LA8_65<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 24 :
                        int LA8_5 = input.LA(1);

                        s = -1;
                        if ( (LA8_5=='c') ) {s = 27;}

                        else if ( ((LA8_5>='0' && LA8_5<='9')||(LA8_5>='A' && LA8_5<='Z')||LA8_5=='_'||(LA8_5>='a' && LA8_5<='b')||(LA8_5>='d' && LA8_5<='z')) ) {s = 20;}

                        else if ( ((LA8_5>='\u0000' && LA8_5<='\b')||(LA8_5>='\u000B' && LA8_5<='\f')||(LA8_5>='\u000E' && LA8_5<='\u001F')||LA8_5=='!'||(LA8_5>='$' && LA8_5<='+')||(LA8_5>='-' && LA8_5<='/')||(LA8_5>=';' && LA8_5<='@')||LA8_5=='\\'||LA8_5=='^'||LA8_5=='`'||(LA8_5>='{' && LA8_5<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 25 :
                        int LA8_3 = input.LA(1);

                        s = -1;
                        if ( (LA8_3=='i') ) {s = 23;}

                        else if ( (LA8_3=='o') ) {s = 24;}

                        else if ( ((LA8_3>='0' && LA8_3<='9')||(LA8_3>='A' && LA8_3<='Z')||LA8_3=='_'||(LA8_3>='a' && LA8_3<='h')||(LA8_3>='j' && LA8_3<='n')||(LA8_3>='p' && LA8_3<='z')) ) {s = 20;}

                        else if ( ((LA8_3>='\u0000' && LA8_3<='\b')||(LA8_3>='\u000B' && LA8_3<='\f')||(LA8_3>='\u000E' && LA8_3<='\u001F')||LA8_3=='!'||(LA8_3>='$' && LA8_3<='+')||(LA8_3>='-' && LA8_3<='/')||(LA8_3>=';' && LA8_3<='@')||LA8_3=='\\'||LA8_3=='^'||LA8_3=='`'||(LA8_3>='{' && LA8_3<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 26 :
                        int LA8_72 = input.LA(1);

                        s = -1;
                        if ( ((LA8_72>='0' && LA8_72<='9')||(LA8_72>='A' && LA8_72<='Z')||LA8_72=='_'||(LA8_72>='a' && LA8_72<='z')) ) {s = 20;}

                        else if ( ((LA8_72>='\u0000' && LA8_72<='\b')||(LA8_72>='\u000B' && LA8_72<='\f')||(LA8_72>='\u000E' && LA8_72<='\u001F')||LA8_72=='!'||(LA8_72>='$' && LA8_72<='+')||(LA8_72>='-' && LA8_72<='/')||(LA8_72>=';' && LA8_72<='@')||LA8_72=='\\'||LA8_72=='^'||LA8_72=='`'||(LA8_72>='{' && LA8_72<='\uFFFF')) ) {s = 21;}

                        else s = 78;

                        if ( s>=0 ) return s;
                        break;
                    case 27 :
                        int LA8_13 = input.LA(1);

                        s = -1;
                        if ( ((LA8_13>='0' && LA8_13<='9')||(LA8_13>='A' && LA8_13<='Z')||LA8_13=='_'||(LA8_13>='a' && LA8_13<='z')) ) {s = 20;}

                        else if ( ((LA8_13>='\u0000' && LA8_13<='\b')||(LA8_13>='\u000B' && LA8_13<='\f')||(LA8_13>='\u000E' && LA8_13<='\u001F')||LA8_13=='!'||(LA8_13>='$' && LA8_13<='+')||(LA8_13>='-' && LA8_13<='/')||(LA8_13>=';' && LA8_13<='@')||LA8_13=='\\'||LA8_13=='^'||LA8_13=='`'||(LA8_13>='{' && LA8_13<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 28 :
                        int LA8_23 = input.LA(1);

                        s = -1;
                        if ( (LA8_23=='g') ) {s = 41;}

                        else if ( ((LA8_23>='0' && LA8_23<='9')||(LA8_23>='A' && LA8_23<='Z')||LA8_23=='_'||(LA8_23>='a' && LA8_23<='f')||(LA8_23>='h' && LA8_23<='z')) ) {s = 20;}

                        else if ( ((LA8_23>='\u0000' && LA8_23<='\b')||(LA8_23>='\u000B' && LA8_23<='\f')||(LA8_23>='\u000E' && LA8_23<='\u001F')||LA8_23=='!'||(LA8_23>='$' && LA8_23<='+')||(LA8_23>='-' && LA8_23<='/')||(LA8_23>=';' && LA8_23<='@')||LA8_23=='\\'||LA8_23=='^'||LA8_23=='`'||(LA8_23>='{' && LA8_23<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 29 :
                        int LA8_41 = input.LA(1);

                        s = -1;
                        if ( (LA8_41=='u') ) {s = 46;}

                        else if ( ((LA8_41>='0' && LA8_41<='9')||(LA8_41>='A' && LA8_41<='Z')||LA8_41=='_'||(LA8_41>='a' && LA8_41<='t')||(LA8_41>='v' && LA8_41<='z')) ) {s = 20;}

                        else if ( ((LA8_41>='\u0000' && LA8_41<='\b')||(LA8_41>='\u000B' && LA8_41<='\f')||(LA8_41>='\u000E' && LA8_41<='\u001F')||LA8_41=='!'||(LA8_41>='$' && LA8_41<='+')||(LA8_41>='-' && LA8_41<='/')||(LA8_41>=';' && LA8_41<='@')||LA8_41=='\\'||LA8_41=='^'||LA8_41=='`'||(LA8_41>='{' && LA8_41<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 30 :
                        int LA8_59 = input.LA(1);

                        s = -1;
                        if ( ((LA8_59>='0' && LA8_59<='9')||(LA8_59>='A' && LA8_59<='Z')||LA8_59=='_'||(LA8_59>='a' && LA8_59<='z')) ) {s = 20;}

                        else if ( ((LA8_59>='\u0000' && LA8_59<='\b')||(LA8_59>='\u000B' && LA8_59<='\f')||(LA8_59>='\u000E' && LA8_59<='\u001F')||LA8_59=='!'||(LA8_59>='$' && LA8_59<='+')||(LA8_59>='-' && LA8_59<='/')||(LA8_59>=';' && LA8_59<='@')||LA8_59=='\\'||LA8_59=='^'||LA8_59=='`'||(LA8_59>='{' && LA8_59<='\uFFFF')) ) {s = 21;}

                        else s = 66;

                        if ( s>=0 ) return s;
                        break;
                    case 31 :
                        int LA8_73 = input.LA(1);

                        s = -1;
                        if ( ((LA8_73>='0' && LA8_73<='9')||(LA8_73>='A' && LA8_73<='Z')||LA8_73=='_'||(LA8_73>='a' && LA8_73<='z')) ) {s = 20;}

                        else if ( ((LA8_73>='\u0000' && LA8_73<='\b')||(LA8_73>='\u000B' && LA8_73<='\f')||(LA8_73>='\u000E' && LA8_73<='\u001F')||LA8_73=='!'||(LA8_73>='$' && LA8_73<='+')||(LA8_73>='-' && LA8_73<='/')||(LA8_73>=';' && LA8_73<='@')||LA8_73=='\\'||LA8_73=='^'||LA8_73=='`'||(LA8_73>='{' && LA8_73<='\uFFFF')) ) {s = 21;}

                        else s = 79;

                        if ( s>=0 ) return s;
                        break;
                    case 32 :
                        int LA8_46 = input.LA(1);

                        s = -1;
                        if ( (LA8_46=='r') ) {s = 53;}

                        else if ( ((LA8_46>='0' && LA8_46<='9')||(LA8_46>='A' && LA8_46<='Z')||LA8_46=='_'||(LA8_46>='a' && LA8_46<='q')||(LA8_46>='s' && LA8_46<='z')) ) {s = 20;}

                        else if ( ((LA8_46>='\u0000' && LA8_46<='\b')||(LA8_46>='\u000B' && LA8_46<='\f')||(LA8_46>='\u000E' && LA8_46<='\u001F')||LA8_46=='!'||(LA8_46>='$' && LA8_46<='+')||(LA8_46>='-' && LA8_46<='/')||(LA8_46>=';' && LA8_46<='@')||LA8_46=='\\'||LA8_46=='^'||LA8_46=='`'||(LA8_46>='{' && LA8_46<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 33 :
                        int LA8_2 = input.LA(1);

                        s = -1;
                        if ( ((LA8_2>='0' && LA8_2<='9')||(LA8_2>='A' && LA8_2<='Z')||LA8_2=='_'||(LA8_2>='a' && LA8_2<='z')) ) {s = 20;}

                        else if ( ((LA8_2>='\u0000' && LA8_2<='\b')||(LA8_2>='\u000B' && LA8_2<='\f')||(LA8_2>='\u000E' && LA8_2<='\u001F')||LA8_2=='!'||(LA8_2>='$' && LA8_2<='+')||(LA8_2>='-' && LA8_2<='/')||(LA8_2>=';' && LA8_2<='@')||LA8_2=='\\'||LA8_2=='^'||LA8_2=='`'||(LA8_2>='{' && LA8_2<='\uFFFF')) ) {s = 21;}

                        else s = 22;

                        if ( s>=0 ) return s;
                        break;
                    case 34 :
                        int LA8_53 = input.LA(1);

                        s = -1;
                        if ( (LA8_53=='e') ) {s = 60;}

                        else if ( ((LA8_53>='0' && LA8_53<='9')||(LA8_53>='A' && LA8_53<='Z')||LA8_53=='_'||(LA8_53>='a' && LA8_53<='d')||(LA8_53>='f' && LA8_53<='z')) ) {s = 20;}

                        else if ( ((LA8_53>='\u0000' && LA8_53<='\b')||(LA8_53>='\u000B' && LA8_53<='\f')||(LA8_53>='\u000E' && LA8_53<='\u001F')||LA8_53=='!'||(LA8_53>='$' && LA8_53<='+')||(LA8_53>='-' && LA8_53<='/')||(LA8_53>=';' && LA8_53<='@')||LA8_53=='\\'||LA8_53=='^'||LA8_53=='`'||(LA8_53>='{' && LA8_53<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 35 :
                        int LA8_12 = input.LA(1);

                        s = -1;
                        if ( ((LA8_12>='\u0000' && LA8_12<='\uFFFF')) ) {s = 35;}

                        else s = 36;

                        if ( s>=0 ) return s;
                        break;
                    case 36 :
                        int LA8_18 = input.LA(1);

                        s = -1;
                        if ( (LA8_18=='l') ) {s = 40;}

                        else if ( ((LA8_18>='0' && LA8_18<='9')||(LA8_18>='A' && LA8_18<='Z')||LA8_18=='_'||(LA8_18>='a' && LA8_18<='k')||(LA8_18>='m' && LA8_18<='z')) ) {s = 20;}

                        else if ( ((LA8_18>='\u0000' && LA8_18<='\b')||(LA8_18>='\u000B' && LA8_18<='\f')||(LA8_18>='\u000E' && LA8_18<='\u001F')||LA8_18=='!'||(LA8_18>='$' && LA8_18<='+')||(LA8_18>='-' && LA8_18<='/')||(LA8_18>=';' && LA8_18<='@')||LA8_18=='\\'||LA8_18=='^'||LA8_18=='`'||(LA8_18>='{' && LA8_18<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 37 :
                        int LA8_40 = input.LA(1);

                        s = -1;
                        if ( (LA8_40=='l') ) {s = 45;}

                        else if ( ((LA8_40>='0' && LA8_40<='9')||(LA8_40>='A' && LA8_40<='Z')||LA8_40=='_'||(LA8_40>='a' && LA8_40<='k')||(LA8_40>='m' && LA8_40<='z')) ) {s = 20;}

                        else if ( ((LA8_40>='\u0000' && LA8_40<='\b')||(LA8_40>='\u000B' && LA8_40<='\f')||(LA8_40>='\u000E' && LA8_40<='\u001F')||LA8_40=='!'||(LA8_40>='$' && LA8_40<='+')||(LA8_40>='-' && LA8_40<='/')||(LA8_40>=';' && LA8_40<='@')||LA8_40=='\\'||LA8_40=='^'||LA8_40=='`'||(LA8_40>='{' && LA8_40<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 38 :
                        int LA8_34 = input.LA(1);

                        s = -1;
                        if ( ((LA8_34>='0' && LA8_34<='9')) ) {s = 34;}

                        else if ( ((LA8_34>='\u0000' && LA8_34<='\b')||(LA8_34>='\u000B' && LA8_34<='\f')||(LA8_34>='\u000E' && LA8_34<='\u001F')||LA8_34=='!'||(LA8_34>='$' && LA8_34<='+')||(LA8_34>='-' && LA8_34<='/')||(LA8_34>=';' && LA8_34<='Z')||LA8_34=='\\'||(LA8_34>='^' && LA8_34<='\uFFFF')) ) {s = 21;}

                        else s = 33;

                        if ( s>=0 ) return s;
                        break;
                    case 39 :
                        int LA8_45 = input.LA(1);

                        s = -1;
                        if ( (LA8_45=='e') ) {s = 52;}

                        else if ( ((LA8_45>='0' && LA8_45<='9')||(LA8_45>='A' && LA8_45<='Z')||LA8_45=='_'||(LA8_45>='a' && LA8_45<='d')||(LA8_45>='f' && LA8_45<='z')) ) {s = 20;}

                        else if ( ((LA8_45>='\u0000' && LA8_45<='\b')||(LA8_45>='\u000B' && LA8_45<='\f')||(LA8_45>='\u000E' && LA8_45<='\u001F')||LA8_45=='!'||(LA8_45>='$' && LA8_45<='+')||(LA8_45>='-' && LA8_45<='/')||(LA8_45>=';' && LA8_45<='@')||LA8_45=='\\'||LA8_45=='^'||LA8_45=='`'||(LA8_45>='{' && LA8_45<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 40 :
                        int LA8_52 = input.LA(1);

                        s = -1;
                        if ( (LA8_52=='t') ) {s = 59;}

                        else if ( ((LA8_52>='0' && LA8_52<='9')||(LA8_52>='A' && LA8_52<='Z')||LA8_52=='_'||(LA8_52>='a' && LA8_52<='s')||(LA8_52>='u' && LA8_52<='z')) ) {s = 20;}

                        else if ( ((LA8_52>='\u0000' && LA8_52<='\b')||(LA8_52>='\u000B' && LA8_52<='\f')||(LA8_52>='\u000E' && LA8_52<='\u001F')||LA8_52=='!'||(LA8_52>='$' && LA8_52<='+')||(LA8_52>='-' && LA8_52<='/')||(LA8_52>=';' && LA8_52<='@')||LA8_52=='\\'||LA8_52=='^'||LA8_52=='`'||(LA8_52>='{' && LA8_52<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 41 :
                        int LA8_80 = input.LA(1);

                        s = -1;
                        if ( ((LA8_80>='0' && LA8_80<='9')||(LA8_80>='A' && LA8_80<='Z')||LA8_80=='_'||(LA8_80>='a' && LA8_80<='z')) ) {s = 20;}

                        else if ( ((LA8_80>='\u0000' && LA8_80<='\b')||(LA8_80>='\u000B' && LA8_80<='\f')||(LA8_80>='\u000E' && LA8_80<='\u001F')||LA8_80=='!'||(LA8_80>='$' && LA8_80<='+')||(LA8_80>='-' && LA8_80<='/')||(LA8_80>=';' && LA8_80<='@')||LA8_80=='\\'||LA8_80=='^'||LA8_80=='`'||(LA8_80>='{' && LA8_80<='\uFFFF')) ) {s = 21;}

                        else s = 82;

                        if ( s>=0 ) return s;
                        break;
                    case 42 :
                        int LA8_11 = input.LA(1);

                        s = -1;
                        if ( ((LA8_11>='0' && LA8_11<='9')) ) {s = 34;}

                        else if ( ((LA8_11>='\u0000' && LA8_11<='\b')||(LA8_11>='\u000B' && LA8_11<='\f')||(LA8_11>='\u000E' && LA8_11<='\u001F')||LA8_11=='!'||(LA8_11>='$' && LA8_11<='+')||(LA8_11>='-' && LA8_11<='/')||(LA8_11>=';' && LA8_11<='Z')||LA8_11=='\\'||(LA8_11>='^' && LA8_11<='\uFFFF')) ) {s = 21;}

                        else s = 33;

                        if ( s>=0 ) return s;
                        break;
                    case 43 :
                        int LA8_67 = input.LA(1);

                        s = -1;
                        if ( (LA8_67=='e') ) {s = 74;}

                        else if ( ((LA8_67>='0' && LA8_67<='9')||(LA8_67>='A' && LA8_67<='Z')||LA8_67=='_'||(LA8_67>='a' && LA8_67<='d')||(LA8_67>='f' && LA8_67<='z')) ) {s = 20;}

                        else if ( ((LA8_67>='\u0000' && LA8_67<='\b')||(LA8_67>='\u000B' && LA8_67<='\f')||(LA8_67>='\u000E' && LA8_67<='\u001F')||LA8_67=='!'||(LA8_67>='$' && LA8_67<='+')||(LA8_67>='-' && LA8_67<='/')||(LA8_67>=';' && LA8_67<='@')||LA8_67=='\\'||LA8_67=='^'||LA8_67=='`'||(LA8_67>='{' && LA8_67<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 44 :
                        int LA8_74 = input.LA(1);

                        s = -1;
                        if ( (LA8_74=='f') ) {s = 80;}

                        else if ( ((LA8_74>='0' && LA8_74<='9')||(LA8_74>='A' && LA8_74<='Z')||LA8_74=='_'||(LA8_74>='a' && LA8_74<='e')||(LA8_74>='g' && LA8_74<='z')) ) {s = 20;}

                        else if ( ((LA8_74>='\u0000' && LA8_74<='\b')||(LA8_74>='\u000B' && LA8_74<='\f')||(LA8_74>='\u000E' && LA8_74<='\u001F')||LA8_74=='!'||(LA8_74>='$' && LA8_74<='+')||(LA8_74>='-' && LA8_74<='/')||(LA8_74>=';' && LA8_74<='@')||LA8_74=='\\'||LA8_74=='^'||LA8_74=='`'||(LA8_74>='{' && LA8_74<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 45 :
                        int LA8_1 = input.LA(1);

                        s = -1;
                        if ( (LA8_1=='u') ) {s = 18;}

                        else if ( ((LA8_1>='0' && LA8_1<='9')||(LA8_1>='A' && LA8_1<='Z')||LA8_1=='_'||(LA8_1>='a' && LA8_1<='t')||(LA8_1>='v' && LA8_1<='z')) ) {s = 20;}

                        else if ( ((LA8_1>='\u0000' && LA8_1<='\b')||(LA8_1>='\u000B' && LA8_1<='\f')||(LA8_1>='\u000E' && LA8_1<='\u001F')||LA8_1=='!'||(LA8_1>='$' && LA8_1<='+')||(LA8_1>='-' && LA8_1<='/')||(LA8_1>=';' && LA8_1<='@')||LA8_1=='\\'||LA8_1=='^'||LA8_1=='`'||(LA8_1>='{' && LA8_1<='\uFFFF')) ) {s = 21;}

                        else s = 19;

                        if ( s>=0 ) return s;
                        break;
                    case 46 :
                        int LA8_75 = input.LA(1);

                        s = -1;
                        if ( ((LA8_75>='0' && LA8_75<='9')||(LA8_75>='A' && LA8_75<='Z')||LA8_75=='_'||(LA8_75>='a' && LA8_75<='z')) ) {s = 20;}

                        else if ( ((LA8_75>='\u0000' && LA8_75<='\b')||(LA8_75>='\u000B' && LA8_75<='\f')||(LA8_75>='\u000E' && LA8_75<='\u001F')||LA8_75=='!'||(LA8_75>='$' && LA8_75<='+')||(LA8_75>='-' && LA8_75<='/')||(LA8_75>=';' && LA8_75<='@')||LA8_75=='\\'||LA8_75=='^'||LA8_75=='`'||(LA8_75>='{' && LA8_75<='\uFFFF')) ) {s = 21;}

                        else s = 81;

                        if ( s>=0 ) return s;
                        break;
                    case 47 :
                        int LA8_24 = input.LA(1);

                        s = -1;
                        if ( (LA8_24=='o') ) {s = 42;}

                        else if ( ((LA8_24>='0' && LA8_24<='9')||(LA8_24>='A' && LA8_24<='Z')||LA8_24=='_'||(LA8_24>='a' && LA8_24<='n')||(LA8_24>='p' && LA8_24<='z')) ) {s = 20;}

                        else if ( ((LA8_24>='\u0000' && LA8_24<='\b')||(LA8_24>='\u000B' && LA8_24<='\f')||(LA8_24>='\u000E' && LA8_24<='\u001F')||LA8_24=='!'||(LA8_24>='$' && LA8_24<='+')||(LA8_24>='-' && LA8_24<='/')||(LA8_24>=';' && LA8_24<='@')||LA8_24=='\\'||LA8_24=='^'||LA8_24=='`'||(LA8_24>='{' && LA8_24<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 48 :
                        int LA8_42 = input.LA(1);

                        s = -1;
                        if ( (LA8_42=='t') ) {s = 47;}

                        else if ( ((LA8_42>='0' && LA8_42<='9')||(LA8_42>='A' && LA8_42<='Z')||LA8_42=='_'||(LA8_42>='a' && LA8_42<='s')||(LA8_42>='u' && LA8_42<='z')) ) {s = 20;}

                        else if ( ((LA8_42>='\u0000' && LA8_42<='\b')||(LA8_42>='\u000B' && LA8_42<='\f')||(LA8_42>='\u000E' && LA8_42<='\u001F')||LA8_42=='!'||(LA8_42>='$' && LA8_42<='+')||(LA8_42>='-' && LA8_42<='/')||(LA8_42>=';' && LA8_42<='@')||LA8_42=='\\'||LA8_42=='^'||LA8_42=='`'||(LA8_42>='{' && LA8_42<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 49 :
                        int LA8_47 = input.LA(1);

                        s = -1;
                        if ( (LA8_47=='n') ) {s = 54;}

                        else if ( ((LA8_47>='0' && LA8_47<='9')||(LA8_47>='A' && LA8_47<='Z')||LA8_47=='_'||(LA8_47>='a' && LA8_47<='m')||(LA8_47>='o' && LA8_47<='z')) ) {s = 20;}

                        else if ( ((LA8_47>='\u0000' && LA8_47<='\b')||(LA8_47>='\u000B' && LA8_47<='\f')||(LA8_47>='\u000E' && LA8_47<='\u001F')||LA8_47=='!'||(LA8_47>='$' && LA8_47<='+')||(LA8_47>='-' && LA8_47<='/')||(LA8_47>=';' && LA8_47<='@')||LA8_47=='\\'||LA8_47=='^'||LA8_47=='`'||(LA8_47>='{' && LA8_47<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
                    case 50 :
                        int LA8_54 = input.LA(1);

                        s = -1;
                        if ( (LA8_54=='o') ) {s = 61;}

                        else if ( ((LA8_54>='0' && LA8_54<='9')||(LA8_54>='A' && LA8_54<='Z')||LA8_54=='_'||(LA8_54>='a' && LA8_54<='n')||(LA8_54>='p' && LA8_54<='z')) ) {s = 20;}

                        else if ( ((LA8_54>='\u0000' && LA8_54<='\b')||(LA8_54>='\u000B' && LA8_54<='\f')||(LA8_54>='\u000E' && LA8_54<='\u001F')||LA8_54=='!'||(LA8_54>='$' && LA8_54<='+')||(LA8_54>='-' && LA8_54<='/')||(LA8_54>=';' && LA8_54<='@')||LA8_54=='\\'||LA8_54=='^'||LA8_54=='`'||(LA8_54>='{' && LA8_54<='\uFFFF')) ) {s = 21;}

                        else s = 25;

                        if ( s>=0 ) return s;
                        break;
            }
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 8, _s, input);
            error(nvae);
            throw nvae;
        }
    }


}