content: /* The following code was generated by JFlex 1.6.1 */
  
  /*******************************************************************************
   * Copyright (c) 2019 Zend Corporation and IBM Corporation.
   *
   * This program and the accompanying materials are made
   * available under the terms of the Eclipse Public License 2.0
   * which is available at https://www.eclipse.org/legal/epl-2.0/
   *
   * SPDX-License-Identifier: EPL-2.0
   *
   * Contributors:
   *   Zend and IBM - Initial implementation
   *******************************************************************************/
  
  package org.eclipse.php.core.ast.scanner.php74;
  
  import java.io.IOException;
  import java.util.LinkedList;
  import java.util.Stack;
  
  import org.eclipse.php.core.PHPVersion;
  import org.eclipse.php.core.ast.nodes.AST;
  import org.eclipse.php.core.ast.nodes.Comment;
  import org.eclipse.php.core.ast.nodes.IDocumentorLexer;
  import org.eclipse.php.internal.core.util.collections.StateStack;
  
  import java_cup.sym;
  import java_cup.runtime.Symbol;
  
  @SuppressWarnings({"unused", "nls"})
  
  
  /**
   * This class is a scanner generated by 
   * <a href="http://www.jflex.de/">JFlex</a> 1.6.1
   * from the specification file <tt>ast_scanner.flex</tt>
   */
  public class PHPAstLexer implements org.eclipse.php.internal.core.ast.scanner.AstLexer {
  
  	/** This character denotes the end of file */
  	public static final int YYEOF = -1;
  
  	/** initial size of the lookahead buffer */
    private static final int ZZ_BUFFERSIZE = 16384;
  
  	/** lexical states */
    public static final int YYINITIAL = 0;
    public static final int ST_IN_SCRIPTING = 2;
    public static final int ST_DOUBLE_QUOTES = 4;
    public static final int ST_SINGLE_QUOTE = 6;
    public static final int ST_BACKQUOTE = 8;
    public static final int ST_HEREDOC = 10;
    public static final int ST_NOWDOC = 12;
    public static final int ST_START_HEREDOC = 14;
    public static final int ST_START_NOWDOC = 16;
    public static final int ST_END_HEREDOC = 18;
    public static final int ST_LOOKING_FOR_PROPERTY = 20;
    public static final int ST_LOOKING_FOR_VARNAME = 22;
    public static final int ST_VAR_OFFSET = 24;
    public static final int ST_COMMENT = 26;
    public static final int ST_DOCBLOCK = 28;
    public static final int ST_ONE_LINE_COMMENT = 30;
  
    /**
     * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
     * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
     *                  at the beginning of a line
     * l is of the form l = 2*k, k a non negative integer
     */
    private static final int ZZ_LEXSTATE[] = { 
       0,  0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7, 
       8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15
    };
  
    /** 
     * Translates characters to character classes
     */
    private static final String ZZ_CMAP_PACKED = 
      "\11\0\1\15\1\14\2\0\1\16\22\0\1\15\1\57\1\20\1\100"+
      "\1\17\1\63\1\64\1\77\1\52\1\53\1\61\1\5\1\71\1\46"+
      "\1\3\1\62\1\6\1\12\10\1\1\50\1\70\1\60\1\56\1\47"+
      "\1\67\1\75\1\10\1\11\1\32\1\26\1\4\1\27\1\44\1\41"+
      "\1\24\1\54\1\43\1\37\1\40\1\31\1\33\1\45\1\55\1\35"+
      "\1\34\1\25\1\30\1\51\1\42\1\7\1\36\1\13\1\72\1\21"+
      "\1\73\1\66\1\2\1\22\1\10\1\11\1\32\1\26\1\4\1\27"+
      "\1\44\1\41\1\24\1\54\1\43\1\37\1\40\1\31\1\33\1\45"+
      "\1\55\1\35\1\34\1\25\1\30\1\51\1\42\1\7\1\36\1\13"+
      "\1\23\1\65\1\76\1\74\1\0\260\13\2\24\115\13\1\34\u1faa\13"+
      "\1\43\uded5\13\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\20\0";
  
    /** 
     * Translates characters to character classes
     */
    private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
  
    /** 
     * Translates DFA states to action switch labels.
     */
    private static final int [] ZZ_ACTION = zzUnpackAction();
  
    private static final String ZZ_ACTION_PACKED_0 =
      "\5\0\2\1\11\0\2\2\1\3\1\4\1\5\1\6"+
      "\1\5\1\7\1\4\4\5\1\10\1\11\1\12\1\13"+
      "\1\14\1\15\17\5\1\16\1\17\1\20\1\5\1\21"+
      "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31"+
      "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+
      "\1\42\1\43\1\44\1\45\1\1\1\3\1\46\2\3"+
      "\1\47\1\3\1\50\1\1\2\3\1\51\1\3\2\1"+
      "\3\3\1\1\1\52\1\53\1\52\1\54\1\55\1\54"+
      "\1\56\1\57\1\60\1\57\1\61\1\62\1\63\1\6"+
      "\1\7\1\63\1\64\1\65\1\66\1\67\1\16\1\17"+
      "\1\20\1\21\1\23\1\24\1\25\1\26\1\27\1\30"+
      "\1\31\1\32\1\33\1\34\1\70\1\71\1\10\1\72"+
      "\3\10\3\73\2\72\1\0\1\74\1\75\1\0\1\76"+
      "\1\0\1\5\1\76\1\0\1\77\6\5\1\100\1\101"+
      "\2\0\3\5\1\102\2\5\2\0\1\103\2\0\1\104"+
      "\2\0\1\105\7\5\1\106\2\5\1\107\10\5\1\110"+
      "\12\5\1\111\1\112\1\113\1\114\1\115\1\116\1\5"+
      "\12\0\1\117\1\120\2\121\1\122\1\123\1\0\1\124"+
      "\1\125\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+
      "\1\135\1\136\1\137\1\140\4\0\1\103\2\141\1\142"+
      "\1\143\1\141\1\0\1\144\3\0\2\141\3\0\1\145"+
      "\2\141\1\146\2\0\1\147\3\0\1\125\1\150\1\151"+
      "\1\152\1\153\1\0\1\76\1\0\7\5\1\0\1\154"+
      "\7\5\1\76\1\155\1\156\1\5\1\157\2\5\1\0"+
      "\6\5\1\160\3\5\1\161\2\5\1\162\1\5\1\163"+
      "\1\164\23\5\1\165\1\166\12\0\1\167\1\170\1\171"+
      "\1\172\2\0\1\173\1\0\1\174\1\0\1\175\1\0"+
      "\1\176\2\63\1\0\16\5\1\177\1\200\1\5\1\201"+
      "\23\5\1\202\12\5\1\203\1\5\1\204\5\5\16\0"+
      "\1\205\3\0\11\5\1\206\5\5\1\207\1\5\1\210"+
      "\1\211\4\5\1\212\1\5\1\213\1\214\3\5\1\215"+
      "\2\5\1\216\1\5\1\217\2\5\1\220\1\221\1\222"+
      "\4\5\1\223\1\224\2\5\1\225\2\5\5\0\1\226"+
      "\6\0\2\227\4\0\1\230\2\231\12\5\1\232\2\5"+
      "\1\233\7\5\1\234\7\5\1\235\1\236\1\237\1\5"+
      "\1\0\1\240\1\241\2\5\4\0\1\242\5\0\1\243"+
      "\3\0\1\244\7\5\1\245\6\5\1\246\3\5\1\247"+
      "\1\250\1\251\1\5\1\252\3\5\1\253\1\0\1\254"+
      "\1\5\1\255\3\0\1\256\3\0\1\257\3\5\1\260"+
      "\5\5\1\261\1\262\5\5\1\263\1\5\1\264\1\265"+
      "\1\5\1\0\1\5\1\266\1\267\4\0\2\5\1\270"+
      "\4\5\1\271\1\272\1\5\1\273\2\5\1\274\1\5"+
      "\1\0\1\275\2\0\2\5\1\276\1\5\1\277\1\300"+
      "\1\5\1\301\1\302\1\5\1\303\2\0\5\5\3\0"+
      "\1\304\2\5\1\305\1\306\2\0\1\307\1\5\1\310"+
      "\1\5\1\311";
  
    private static int [] zzUnpackAction() {
      int [] result = new int[688];
      int offset = 0;
      offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
      return result;
    }
  
    private static int zzUnpackAction(String packed, int offset, int [] result) {
      int i = 0;       /* index in packed string  */
      int j = offset;  /* index in unpacked array */
      int l = packed.length();
      while (i < l) {
        int count = packed.charAt(i++);
        int value = packed.charAt(i++);
        do result[j++] = value; while (--count > 0);
      }
      return j;
    }
  
  
    /** 
     * Translates a state to a row index in the transition table
     */
    private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
  
    private static final String ZZ_ROWMAP_PACKED_0 =
      "\0\0\0\101\0\202\0\303\0\u0104\0\u0145\0\u0186\0\u01c7"+
      "\0\u0208\0\u0249\0\u028a\0\u02cb\0\u030c\0\u034d\0\u038e\0\u03cf"+
      "\0\u0410\0\u0451\0\u0492\0\u04d3\0\u0514\0\u0555\0\u0596\0\u05d7"+
      "\0\u0618\0\u0659\0\u069a\0\u06db\0\u071c\0\u075d\0\u079e\0\u07df"+
      "\0\u0492\0\u0492\0\u0492\0\u0820\0\u0861\0\u08a2\0\u08e3\0\u0924"+
      "\0\u0965\0\u09a6\0\u09e7\0\u0a28\0\u0a69\0\u0aaa\0\u0aeb\0\u0b2c"+
      "\0\u0b6d\0\u0bae\0\u0bef\0\u0c30\0\u0c71\0\u0cb2\0\u0cf3\0\u0492"+
      "\0\u0d34\0\u0d75\0\u0db6\0\u0df7\0\u0e38\0\u0e79\0\u0eba\0\u0efb"+
      "\0\u0f3c\0\u0f7d\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492"+
      "\0\u0492\0\u0fbe\0\u0492\0\u0fff\0\u1040\0\u0492\0\u1081\0\u10c2"+
      "\0\u1103\0\u1144\0\u0492\0\u1185\0\u11c6\0\u1207\0\u0492\0\u1248"+
      "\0\u1289\0\u12ca\0\u130b\0\u134c\0\u138d\0\u13ce\0\u0492\0\u140f"+
      "\0\u1450\0\u0492\0\u1491\0\u14d2\0\u1513\0\u0492\0\u1554\0\u1595"+
      "\0\u0492\0\u15d6\0\u1617\0\u0492\0\u0492\0\u1658\0\u0492\0\u0492"+
      "\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492"+
      "\0\u0492\0\u1699\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492"+
      "\0\u0492\0\u0492\0\u16da\0\u171b\0\u0492\0\u175c\0\u179d\0\u17de"+
      "\0\u0492\0\u181f\0\u0492\0\u1860\0\u18a1\0\u18e2\0\u1923\0\u1964"+
      "\0\u19a5\0\u19e6\0\u1a27\0\u1a68\0\u1aa9\0\u0492\0\u1aea\0\u1b2b"+
      "\0\u1b6c\0\u1bad\0\u1bee\0\u1c2f\0\u0492\0\u0492\0\u1c70\0\u1cb1"+
      "\0\u1cf2\0\u1d33\0\u1d74\0\u071c\0\u1db5\0\u1df6\0\u1e37\0\u0fbe"+
      "\0\u1e78\0\u07df\0\u1eb9\0\u0492\0\u1efa\0\u1f3b\0\u071c\0\u1f7c"+
      "\0\u1fbd\0\u1ffe\0\u203f\0\u2080\0\u20c1\0\u2102\0\u071c\0\u2143"+
      "\0\u2184\0\u071c\0\u21c5\0\u2206\0\u2247\0\u2288\0\u22c9\0\u230a"+
      "\0\u234b\0\u238c\0\u071c\0\u23cd\0\u240e\0\u244f\0\u2490\0\u24d1"+
      "\0\u2512\0\u2553\0\u2594\0\u25d5\0\u2616\0\u0492\0\u0492\0\u0492"+
      "\0\u2657\0\u0492\0\u0492\0\u2698\0\u26d9\0\u271a\0\u0cf3\0\u275b"+
      "\0\u279c\0\u27dd\0\u281e\0\u285f\0\u28a0\0\u28e1\0\u0492\0\u2922"+
      "\0\u2963\0\u0492\0\u29a4\0\u29e5\0\u2a26\0\u0492\0\u2a67\0\u0492"+
      "\0\u2aa8\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492"+
      "\0\u0492\0\u2ae9\0\u2b2a\0\u2b6b\0\u1081\0\u2bac\0\u2bed\0\u2b6b"+
      "\0\u0492\0\u0492\0\u0492\0\u2bac\0\u2c2e\0\u0492\0\u2c6f\0\u1207"+
      "\0\u2cb0\0\u2c6f\0\u2cb0\0\u2cf1\0\u134c\0\u2d32\0\u2d73\0\u2cf1"+
      "\0\u2d32\0\u2db4\0\u1450\0\u14d2\0\u0492\0\u2df5\0\u2e36\0\u2e77"+
      "\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492\0\u2eb8\0\u2ef9\0\u2f3a"+
      "\0\u2f7b\0\u2fbc\0\u2ffd\0\u303e\0\u307f\0\u30c0\0\u3101\0\u3142"+
      "\0\u0492\0\u3183\0\u31c4\0\u3205\0\u3246\0\u3287\0\u32c8\0\u3309"+
      "\0\u334a\0\u338b\0\u071c\0\u33cc\0\u071c\0\u340d\0\u344e\0\u348f"+
      "\0\u34d0\0\u3511\0\u3552\0\u3593\0\u35d4\0\u3615\0\u071c\0\u3656"+
      "\0\u3697\0\u36d8\0\u071c\0\u3719\0\u375a\0\u379b\0\u37dc\0\u071c"+
      "\0\u071c\0\u381d\0\u385e\0\u389f\0\u38e0\0\u3921\0\u3962\0\u39a3"+
      "\0\u39e4\0\u3a25\0\u3a66\0\u3aa7\0\u3ae8\0\u3b29\0\u3b6a\0\u3bab"+
      "\0\u3bec\0\u3c2d\0\u3c6e\0\u3caf\0\u0492\0\u071c\0\u3cf0\0\u3d31"+
      "\0\u3d72\0\u3db3\0\u3df4\0\u3e35\0\u3e76\0\u3eb7\0\u3ef8\0\u3f39"+
      "\0\u0492\0\u0492\0\u0492\0\u0492\0\u3f7a\0\u3fbb\0\u0492\0\u3ffc"+
      "\0\u403d\0\u407e\0\u0492\0\u40bf\0\u0492\0\u4100\0\u4141\0\u4182"+
      "\0\u41c3\0\u4204\0\u4245\0\u4286\0\u42c7\0\u4308\0\u4349\0\u438a"+
      "\0\u43cb\0\u440c\0\u444d\0\u448e\0\u44cf\0\u4510\0\u071c\0\u4551"+
      "\0\u4592\0\u071c\0\u45d3\0\u4614\0\u4655\0\u4696\0\u46d7\0\u4718"+
      "\0\u4759\0\u479a\0\u47db\0\u481c\0\u485d\0\u489e\0\u48df\0\u4920"+
      "\0\u4961\0\u49a2\0\u49e3\0\u4a24\0\u4a65\0\u071c\0\u4aa6\0\u4ae7"+
      "\0\u4b28\0\u4b69\0\u4baa\0\u4beb\0\u4c2c\0\u4c6d\0\u4cae\0\u4cef"+
      "\0\u071c\0\u4d30\0\u071c\0\u4d71\0\u4db2\0\u4df3\0\u4e34\0\u4e75"+
      "\0\u4eb6\0\u4ef7\0\u4f38\0\u4f79\0\u4fba\0\u4ffb\0\u503c\0\u507d"+
      "\0\u50be\0\u50ff\0\u5140\0\u5181\0\u51c2\0\u5203\0\u0492\0\u5244"+
      "\0\u5285\0\u52c6\0\u5307\0\u5348\0\u5389\0\u53ca\0\u540b\0\u544c"+
      "\0\u548d\0\u54ce\0\u550f\0\u071c\0\u5550\0\u5591\0\u55d2\0\u5613"+
      "\0\u5654\0\u071c\0\u5695\0\u071c\0\u071c\0\u56d6\0\u5717\0\u5758"+
      "\0\u5799\0\u071c\0\u57da\0\u071c\0\u071c\0\u581b\0\u585c\0\u589d"+
      "\0\u58de\0\u591f\0\u5960\0\u071c\0\u59a1\0\u071c\0\u59e2\0\u5a23"+
      "\0\u071c\0\u071c\0\u071c\0\u5a64\0\u5aa5\0\u5ae6\0\u5b27\0\u5b68"+
      "\0\u071c\0\u5ba9\0\u5bea\0\u071c\0\u5c2b\0\u5c6c\0\u5cad\0\u5cee"+
      "\0\u5d2f\0\u5d70\0\u5db1\0\u0492\0\u5df2\0\u5e33\0\u5e74\0\u5eb5"+
      "\0\u5ef6\0\u5f37\0\u0492\0\u5f78\0\u5fb9\0\u5ffa\0\u603b\0\u607c"+
      "\0\u0492\0\u0492\0\u60bd\0\u60fe\0\u613f\0\u6180\0\u61c1\0\u6202"+
      "\0\u6243\0\u6284\0\u62c5\0\u6306\0\u6347\0\u6388\0\u63c9\0\u640a"+
      "\0\u071c\0\u644b\0\u648c\0\u64cd\0\u650e\0\u654f\0\u6590\0\u65d1"+
      "\0\u071c\0\u6612\0\u6653\0\u6694\0\u66d5\0\u6716\0\u6757\0\u6798"+
      "\0\u071c\0\u071c\0\u071c\0\u67d9\0\u681a\0\u071c\0\u071c\0\u685b"+
      "\0\u689c\0\u68dd\0\u691e\0\u695f\0\u69a0\0\u0492\0\u69e1\0\u6a22"+
      "\0\u6a63\0\u6aa4\0\u6ae5\0\u0492\0\u6b26\0\u6b67\0\u6ba8\0\u071c"+
      "\0\u6be9\0\u6c2a\0\u6c6b\0\u6cac\0\u6ced\0\u6d2e\0\u6d6f\0\u071c"+
      "\0\u6db0\0\u6df1\0\u6e32\0\u6e73\0\u6eb4\0\u6ef5\0\u6f36\0\u6f77"+
      "\0\u6fb8\0\u6ff9\0\u071c\0\u071c\0\u071c\0\u703a\0\u071c\0\u707b"+
      "\0\u70bc\0\u70fd\0\u713e\0\u717f\0\u071c\0\u71c0\0\u0492\0\u7201"+
      "\0\u7242\0\u7283\0\u0492\0\u72c4\0\u7305\0\u7346\0\u071c\0\u7387"+
      "\0\u73c8\0\u7409\0\u071c\0\u744a\0\u748b\0\u74cc\0\u750d\0\u754e"+
      "\0\u071c\0\u071c\0\u758f\0\u75d0\0\u7611\0\u7652\0\u7693\0\u071c"+
      "\0\u76d4\0\u071c\0\u071c\0\u7715\0\u7756\0\u7797\0\u0492\0\u0492"+
      "\0\u77d8\0\u7819\0\u785a\0\u789b\0\u78dc\0\u791d\0\u071c\0\u795e"+
      "\0\u799f\0\u79e0\0\u7a21\0\u071c\0\u071c\0\u7a62\0\u071c\0\u7aa3"+
      "\0\u7ae4\0\u071c\0\u7b25\0\u7b66\0\u071c\0\u7ba7\0\u7be8\0\u7c29"+
      "\0\u7c6a\0\u071c\0\u7cab\0\u071c\0\u071c\0\u7cec\0\u071c\0\u071c"+
      "\0\u7d2d\0\u0492\0\u7d6e\0\u7daf\0\u7df0\0\u7e31\0\u7e72\0\u7eb3"+
      "\0\u7ef4\0\u7f35\0\u7f76\0\u7fb7\0\u071c\0\u7ff8\0\u8039\0\u071c"+
      "\0\u071c\0\u807a\0\u80bb\0\u071c\0\u80fc\0\u0492\0\u813d\0\u071c";
  
    private static int [] zzUnpackRowMap() {
      int [] result = new int[688];
      int offset = 0;
      offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
      return result;
    }
  
    private static int zzUnpackRowMap(String packed, int offset, int [] result) {
      int i = 0;  /* index in packed string  */
      int j = offset;  /* index in unpacked array */
      int l = packed.length();
      while (i < l) {
        int high = packed.charAt(i++) << 16;
        result[j++] = high | packed.charAt(i++);
      }
      return j;
    }
  
    /** 
     * The transition table of the DFA
     */
    private static final int [] ZZ_TRANS = zzUnpackTrans();
  
    private static final String ZZ_TRANS_PACKED_0 =
      "\60\21\1\22\20\21\1\23\1\24\1\25\1\26\1\27"+
      "\1\30\1\31\1\32\1\33\1\34\1\24\1\35\3\36"+
      "\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\46"+
      "\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+
      "\1\57\2\35\1\60\1\35\1\61\1\62\1\63\1\64"+
      "\1\65\1\66\1\67\1\70\2\35\1\71\1\72\1\73"+
      "\1\74\1\75\1\76\1\77\1\100\1\101\1\102\1\103"+
      "\1\104\1\105\1\106\1\107\1\110\1\111\1\112\1\113"+
      "\17\114\1\115\1\116\1\117\1\114\1\120\55\114\21\121"+
      "\1\122\55\121\1\123\1\121\17\124\1\125\1\124\1\126"+
      "\1\127\1\130\55\124\14\131\1\132\1\131\1\132\1\133"+
      "\1\131\1\134\1\131\1\135\55\131\14\7\1\136\1\7"+
      "\1\136\62\7\2\137\1\140\1\137\1\140\2\137\3\140"+
      "\1\137\1\140\1\137\1\141\6\137\22\140\3\137\1\140"+
      "\2\137\2\140\23\137\2\142\1\143\1\142\1\143\2\142"+
      "\3\143\1\142\1\143\1\142\1\144\6\142\22\143\3\142"+
      "\1\143\2\142\2\143\23\142\2\23\1\145\1\23\1\145"+
      "\2\23\3\145\1\23\1\145\10\23\22\145\3\23\1\145"+
      "\2\23\2\145\23\23\2\146\1\147\1\146\1\147\2\146"+
      "\3\147\1\146\1\147\3\36\5\146\22\147\1\150\2\146"+
      "\1\147\2\146\2\147\23\146\2\151\1\152\1\151\1\152"+
      "\2\151\3\152\1\151\1\152\10\151\22\152\3\151\1\152"+
      "\2\151\2\152\23\151\1\23\1\153\1\35\1\154\1\35"+
      "\1\155\1\156\3\35\1\153\1\35\3\157\1\37\1\160"+
      "\1\157\1\161\1\162\22\35\1\163\1\164\1\165\1\35"+
      "\1\166\1\70\2\35\1\167\1\170\1\171\1\172\1\173"+
      "\1\174\1\175\1\176\1\177\1\200\1\103\1\104\1\105"+
      "\1\201\1\107\1\110\1\202\2\157\61\203\1\204\17\203"+
      "\16\205\1\206\42\205\1\207\17\205\14\210\1\211\1\210"+
      "\1\212\30\210\1\213\13\210\1\214\3\210\1\214\11\210"+
      "\60\21\1\215\100\21\1\0\2\21\1\216\3\21\1\217"+
      "\11\21\102\0\1\24\1\220\1\221\1\222\1\0\1\24"+
      "\3\0\1\24\67\0\1\35\1\223\1\0\1\35\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\1\224\1\0\1\225\2\0\1\224\3\0\1\224\43\0"+
      "\1\226\23\0\2\35\1\0\1\35\1\0\1\35\1\227"+
      "\4\35\10\0\5\35\1\230\1\231\4\35\1\232\1\233"+
      "\5\35\3\0\1\234\2\0\2\35\30\0\1\235\50\0"+
      "\1\236\23\0\1\24\1\220\1\221\1\222\1\0\1\24"+
      "\1\237\1\0\1\240\1\24\67\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\7\35\1\241\12\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\3\35"+
      "\1\242\2\35\10\0\5\35\1\243\2\35\1\244\1\245"+
      "\10\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\4\0\1\40\3\0\11\35\1\246"+
      "\10\35\3\0\1\35\2\0\2\35\2\0\1\247\16\0"+
      "\1\250\2\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\37\0\3\36\64\0"+
      "\1\251\1\0\1\251\2\0\3\251\1\0\1\251\10\0"+
      "\22\251\3\0\1\251\2\0\2\251\23\0\17\252\1\253"+
      "\1\254\1\255\1\252\1\256\55\252\1\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\3\35\1\257\1\35\1\260"+
      "\2\35\1\261\3\35\1\262\5\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\11\35\1\263\3\35\1\264\4\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\265\1\0\6\35\10\0"+
      "\1\266\6\35\1\267\12\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\270"+
      "\3\35\1\271\1\272\1\35\1\273\12\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\5\35\1\274\2\35\1\275\11\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\276\1\0\2\35"+
      "\1\277\3\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\300\3\35"+
      "\10\0\7\35\1\301\3\35\1\302\6\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\11\35\1\303\10\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\35"+
      "\1\304\14\35\1\305\3\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\306\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\1\307\21\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\310\21\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\15\35\1\311\4\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\7\35\1\312\3\35\1\313\6\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\4\35\1\314\4\35\1\315\10\35"+
      "\3\0\1\35\2\0\2\35\71\0\1\316\1\317\6\0"+
      "\1\320\71\0\1\321\6\0\1\322\72\0\1\323\31\0"+
      "\2\35\1\0\1\35\1\0\2\35\1\324\3\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\33\0\1\325\1\326"+
      "\3\0\1\327\6\0\1\330\1\0\1\331\1\332\1\333"+
      "\2\0\1\334\1\335\1\336\112\0\1\337\6\0\1\340"+
      "\100\0\1\341\71\0\1\342\6\0\1\343\1\0\1\344"+
      "\1\0\1\345\74\0\1\346\2\0\1\347\75\0\1\350"+
      "\2\0\1\351\1\113\65\0\1\352\6\0\1\353\100\0"+
      "\1\354\5\0\1\355\72\0\1\356\6\0\1\357\71\0"+
      "\1\360\71\0\1\361\17\0\1\362\11\0\21\250\1\363"+
      "\55\250\1\254\1\250\17\114\1\364\1\0\1\365\1\114"+
      "\1\366\57\114\1\367\1\114\1\367\2\114\3\367\1\114"+
      "\1\367\3\114\1\370\1\371\1\365\1\114\1\372\22\367"+
      "\3\114\1\367\2\114\2\367\143\114\1\373\1\371\1\365"+
      "\1\114\1\374\55\114\21\121\1\375\55\121\1\0\22\121"+
      "\1\376\55\121\1\376\1\121\17\124\1\377\1\124\1\u0100"+
      "\1\0\1\u0101\57\124\1\367\1\124\1\367\2\124\3\367"+
      "\1\124\1\367\3\124\1\u0102\1\124\1\u0100\1\371\1\372"+
      "\22\367\3\124\1\367\2\124\2\367\143\124\1\373\1\124"+
      "\1\u0100\1\371\1\u0103\55\124\14\131\1\132\1\131\1\132"+
      "\1\u0104\1\131\1\u0105\1\131\1\u0106\57\131\1\u0107\1\131"+
      "\1\u0107\2\131\3\u0107\1\131\1\u0107\3\132\1\u0104\1\131"+
      "\1\u0105\1\131\1\u0106\22\u0107\3\131\1\u0107\2\131\2\u0107"+
      "\25\131\1\367\1\131\1\367\2\131\3\367\1\131\1\367"+
      "\1\132\1\131\1\132\1\u0108\1\131\1\u0105\1\131\1\372"+
      "\22\367\3\131\1\367\2\131\2\367\37\131\1\132\1\131"+
      "\1\132\76\131\1\132\1\131\1\132\1\373\1\131\1\u0105"+
      "\1\131\1\u0109\55\131\2\7\1\u010a\1\7\1\u010a\2\7"+
      "\3\u010a\1\7\1\u010a\3\136\5\7\22\u010a\3\7\1\u010a"+
      "\2\7\2\u010a\23\7\1\0\2\140\1\0\1\140\1\0"+
      "\6\140\10\0\22\140\3\0\1\140\2\0\2\140\25\0"+
      "\1\140\1\0\1\140\2\0\3\140\1\0\1\140\1\0"+
      "\1\u010b\6\0\22\140\3\0\1\140\2\0\2\140\24\0"+
      "\2\143\1\0\1\143\1\0\6\143\10\0\22\143\3\0"+
      "\1\143\2\0\2\143\25\0\1\143\1\0\1\143\2\0"+
      "\3\143\1\0\1\143\1\0\1\u010c\6\0\22\143\3\0"+
      "\1\143\2\0\2\143\24\0\2\145\1\0\1\145\1\0"+
      "\6\145\10\0\22\145\3\0\1\145\2\0\2\145\24\0"+
      "\2\147\1\0\1\147\1\0\6\147\10\0\22\147\3\0"+
      "\1\147\2\0\2\147\72\0\1\u010d\32\0\2\152\1\0"+
      "\1\152\1\0\6\152\10\0\22\152\3\0\1\152\2\0"+
      "\2\152\24\0\1\153\1\u010e\3\0\1\153\3\0\1\153"+
      "\67\0\1\153\1\u010e\3\0\1\153\1\u010f\1\0\1\u0110"+
      "\1\153\147\0\1\u0111\17\0\61\203\1\0\17\203\62\0"+
      "\1\u0112\32\0\1\205\146\0\1\u0113\16\0\14\210\1\211"+
      "\1\210\1\212\30\210\1\211\13\210\1\211\3\210\1\211"+
      "\11\210\14\0\1\211\133\0\1\u0114\31\0\60\21\1\0"+
      "\2\21\1\0\3\21\1\0\11\21\56\0\1\u0115\67\0"+
      "\1\u0116\10\0\1\u0115\23\0\1\24\4\0\1\24\3\0"+
      "\1\24\67\0\1\224\2\0\1\222\1\0\1\224\3\0"+
      "\1\224\67\0\1\u0117\3\0\1\u0118\1\u0117\3\0\1\u0117"+
      "\33\0\1\u0118\33\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\2\35\1\u0119\1\u011a\1\35\1\u011b\1\u011c\4\35"+
      "\1\u011d\1\u011e\1\u011f\4\35\3\0\1\35\2\0\2\35"+
      "\24\0\1\224\1\u0120\1\0\1\222\1\0\1\224\3\0"+
      "\1\224\71\0\1\u0121\76\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\u0122\1\u0123\20\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\2\35\1\u0124\17\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\15\35\1\u0125"+
      "\4\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\10\35\1\u0126\11\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\21\35\1\u0127\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\u0128\3\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\1\u0129"+
      "\2\0\1\u0129\1\0\1\u0129\1\0\3\u0129\13\0\2\u0129"+
      "\2\0\1\u0129\54\0\1\u012a\3\0\1\u012a\67\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\11\35\1\u012b\10\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\10\35\1\u012c\11\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\2\35\1\u012d\17\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\11\35"+
      "\1\u012e\10\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\u012f\1\0\6\35\10\0\22\35\3\0\1\35"+
      "\2\0\2\35\103\0\1\u0130\21\0\2\251\1\0\1\251"+
      "\1\0\6\251\10\0\22\251\3\0\1\251\2\0\2\251"+
      "\23\0\2\252\1\0\1\252\1\0\2\252\3\0\1\252"+
      "\1\0\3\252\1\253\1\254\1\255\1\252\23\0\3\252"+
      "\1\0\2\252\2\0\143\252\1\0\1\254\1\255\1\252"+
      "\1\256\55\252\1\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\1\35\1\u0131\4\35\1\u0132\1\35\1\u0133\11\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\10\35\1\u0134\11\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\21\35\1\u0135\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\2\35\1\u0136\3\35\10\0"+
      "\12\35\1\u0137\7\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\11\35\1\u0138"+
      "\10\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\3\35\1\u0139\2\35\1\u013a"+
      "\13\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\u013b\1\0\6\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\5\35\1\u013c\14\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\5\35\1\u013d"+
      "\14\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\11\35\1\u013e\10\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\10\35\1\u013f\11\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\u0140\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\16\35\1\u0141\3\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\14\35\1\u0142\5\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\35\1\u0143\6\35\1\u0144\2\35\1\u0145\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\5\35\1\u0146\14\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\2\35\1\u0147"+
      "\3\35\10\0\7\35\1\u0148\12\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\2\35\1\u0149"+
      "\3\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\1\u014a\21\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\1\35\1\u014b\20\35\3\0\1\35"+
      "\2\0\1\35\1\u014c\24\0\2\35\1\0\1\u014d\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\10\35\1\u014e"+
      "\11\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\u014f\21\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\1\35\1\u0150\20\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\7\35"+
      "\1\u0151\12\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\3\35\1\u0152\2\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\1\u0153\6\35\1\u0154\12\35\3\0"+
      "\1\35\2\0\2\35\101\0\1\u0155\23\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\11\35\1\u0156\10\35\3\0"+
      "\1\35\2\0\2\35\60\0\1\u0157\67\0\1\u0158\6\0"+
      "\1\u0159\76\0\1\u015a\102\0\1\u015b\104\0\1\u015c\72\0"+
      "\1\u015d\60\0\1\u015e\114\0\1\u015f\57\0\1\u0160\152\0"+
      "\1\u0161\100\0\1\u0162\71\0\1\u0163\107\0\1\u0164\1\0"+
      "\1\u0165\54\0\1\u0166\122\0\1\u0167\36\0\3\u0168\42\0"+
      "\1\u0169\13\0\1\u016a\61\0\1\u016b\22\0\101\250\2\114"+
      "\1\0\1\114\1\0\2\114\3\0\1\114\1\0\3\114"+
      "\1\370\1\371\1\365\1\114\23\0\3\114\1\0\2\114"+
      "\2\0\42\114\1\0\1\371\1\365\1\114\1\374\55\114"+
      "\1\0\2\367\1\0\1\367\1\0\6\367\10\0\22\367"+
      "\1\u016c\2\0\1\367\2\0\2\367\14\0\1\u016d\6\0"+
      "\21\121\1\0\55\121\1\0\1\121\2\124\1\0\1\124"+
      "\1\0\2\124\3\0\1\124\1\0\3\124\1\u0102\1\124"+
      "\1\u0100\1\371\23\0\3\124\1\0\2\124\2\0\42\124"+
      "\1\0\1\124\1\u0100\1\371\1\u0103\55\124\2\131\1\0"+
      "\1\131\1\0\2\131\3\0\1\131\1\0\1\132\1\131"+
      "\1\132\1\u0108\1\131\1\u0105\1\131\23\0\3\131\1\0"+
      "\2\131\2\0\37\131\1\132\1\131\1\132\1\0\1\131"+
      "\1\u0105\1\131\1\u0109\55\131\1\0\2\u0107\1\0\1\u0107"+
      "\1\0\6\u0107\10\0\22\u0107\3\0\1\u0107\2\0\2\u0107"+
      "\24\0\2\u010a\1\0\1\u010a\1\0\6\u010a\10\0\22\u010a"+
      "\3\0\1\u010a\2\0\2\u010a\24\0\1\153\4\0\1\153"+
      "\3\0\1\153\67\0\1\u016e\2\0\1\u016e\1\0\1\u016e"+
      "\1\0\3\u016e\13\0\2\u016e\2\0\1\u016e\54\0\1\u016f"+
      "\3\0\1\u016f\127\0\1\u0170\40\0\1\u0117\1\u0118\3\0"+
      "\1\u0117\3\0\1\u0117\67\0\1\u0117\4\0\1\u0117\3\0"+
      "\1\u0117\67\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\u0171\21\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\u0172\3\35\1\u0173"+
      "\15\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\2\35\1\u0174\3\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\13\35\1\u0175\6\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\u0176\21\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\u0177\1\0\6\35\10\0\22\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\2\35"+
      "\1\u0178\3\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\1\224\4\0\1\224\3\0\1\224\67\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\35\1\u013b\20\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\u0179"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\u017a"+
      "\1\35\1\u017b\1\u017c\4\35\1\u017d\5\35\1\u017e\3\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\7\35\1\u017f\12\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\u0180\1\0\6\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\35\1\u0181\20\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\13\35\1\u0182\6\35\3\0\1\35"+
      "\2\0\2\35\24\0\1\u0129\1\237\1\0\1\u0129\1\0"+
      "\1\u0129\1\0\3\u0129\13\0\2\u0129\2\0\1\u0129\50\0"+
      "\1\240\3\0\1\u012a\3\0\1\u012a\67\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\35\1\u0183\20\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\2\35\1\u0184\3\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\2\35\1\u0185"+
      "\3\35\10\0\22\35\3\0\1\35\2\0\2\35\103\0"+
      "\1\u0165\21\0\2\35\1\0\1\u0186\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u0187\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\35\1\u0188\20\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\u0189\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u018a\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\u018b\21\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\7\35"+
      "\1\u018c\12\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\2\35\1\u018d\3\35\10\0\1\u018e"+
      "\21\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u018f\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\2\35\1\u0190\3\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\6\35\1\u0191\13\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u0192\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\u0193\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u0194\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\6\35\1\u0195\13\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\u0196\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u0197\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\35\1\u0198\6\35\1\u0199\11\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\10\35\1\u019a\11\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\5\35\1\u019b\14\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\1\35\1\u019c"+
      "\20\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\35\1\u019d\20\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\4\35\1\u019e\15\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\4\35\1\u019f\15\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\13\35\1\u01a0"+
      "\6\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\35\1\u01a1\20\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\13\35\1\u01a2\6\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\7\35\1\u01a3\12\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\3\35\1\u01a4\2\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u01a5\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\5\35\1\u01a6\14\35\3\0\1\u01a7\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\35\1\u01a8\20\35\3\0\1\35\2\0\2\35\60\0"+
      "\1\u01a9\74\0\1\u01aa\102\0\1\u01ab\72\0\1\u01ac\103\0"+
      "\1\u01ad\103\0\1\u01ae\101\0\1\u01af\120\0\1\u01b0\61\0"+
      "\1\u01b1\53\0\1\u01b2\72\0\1\u01b3\1\0\1\u01b3\2\0"+
      "\3\u01b3\1\0\1\u01b3\1\0\1\u0165\2\0\1\u01b4\3\0"+
      "\22\u01b3\3\0\1\u01b3\2\0\2\u01b3\21\0\1\u01b5\33\0"+
      "\1\u01b6\62\0\3\u0168\56\0\1\u016a\65\0\1\u01b7\67\0"+
      "\1\u01b8\76\0\1\u01b9\32\0\1\u016e\1\u010f\1\0\1\u016e"+
      "\1\0\1\u016e\1\0\3\u016e\13\0\2\u016e\2\0\1\u016e"+
      "\50\0\1\u0110\3\0\1\u016f\3\0\1\u016f\133\0\1\u01ba"+
      "\34\0\2\35\1\0\1\35\1\0\6\35\10\0\11\35"+
      "\1\u01bb\10\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\13\35\1\u01bc\6\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\5\35\1\u01bd\14\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\14\35\1\u01be\5\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\u01bf\3\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\5\35\1\u01c0\14\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\1\35\1\u01c1\20\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\13\35\1\u01c2\6\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\5\35"+
      "\1\u01c3\14\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\3\35\1\u01c4\16\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\u01c5"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\7\35"+
      "\1\u01c6\12\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\16\35\1\u01c7\3\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\15\35\1\u01c8\4\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\1\u01c9\21\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\12\35\1\u01ca"+
      "\7\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\11\35\1\u01cb\10\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\12\35\1\u01cc\7\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\17\35\1\u01cd\2\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\11\35\1\u01ce"+
      "\10\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\4\35\1\u01cf\15\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\u01d0\1\0"+
      "\2\35\1\u01d1\3\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\35\1\u01d2\20\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u01d3\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\35\1\u01d4\20\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\16\35\1\u01d5\3\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\4\35\1\u01d6"+
      "\15\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\5\35\1\u01d7\14\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\2\35\1\u01d8\3\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\13\35\1\u01d9\6\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\1\35\1\u01da"+
      "\20\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\2\35\1\u01db\3\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\35\1\u01dc\20\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\10\35\1\u01dd\11\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\15\35\1\u01de"+
      "\4\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\2\35\1\u01df\3\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\u01e0\21\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\35"+
      "\1\u01e1\20\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\10\35\1\u01e2\11\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\u01e3"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\u01e4"+
      "\21\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\6\35\1\u01e5\13\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\11\35\1\u01e6\10\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\1\u01e7\21\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\2\35\1\u01e8\17\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\u01e9"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\u01ea\3\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\u01eb\21\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\35\1\u01ec\20\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\2\35\1\u01ed"+
      "\3\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u01ee\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\33\0\1\u01ef\100\0\1\u01f0\127\0"+
      "\1\u01f1\45\0\1\u01f2\10\0\1\u01f3\35\0\1\u01f4\36\0"+
      "\1\u01f5\77\0\1\u01f6\74\0\1\u01f7\100\0\1\u01f8\120\0"+
      "\1\u01f9\113\0\1\u01fa\42\0\2\u01b3\1\0\1\u01b3\1\0"+
      "\6\u01b3\1\u01fb\1\0\1\u01fc\5\0\22\u01b3\3\0\1\u01b3"+
      "\2\0\2\u01b3\25\0\1\u01fd\1\0\1\u01fd\2\0\3\u01fd"+
      "\1\0\1\u01fd\10\0\22\u01fd\3\0\1\u01fd\2\0\2\u01fd"+
      "\25\0\1\u01fe\1\0\1\u01fe\2\0\3\u01fe\1\0\1\u01fe"+
      "\10\0\22\u01fe\3\0\1\u01fe\2\0\2\u01fe\60\0\1\u01ff"+
      "\53\0\1\u0200\72\0\1\u0201\1\0\1\u0201\2\0\3\u0201"+
      "\1\0\1\u0201\10\0\22\u0201\3\0\1\u0201\2\0\2\u0201"+
      "\37\0\2\u0202\1\u0203\63\0\1\35\1\u0204\1\0\1\35"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\u0205\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\6\35\1\u0206\13\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\u0207\1\0\6\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\10\35\1\u0208\11\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\u0209"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\15\35"+
      "\1\u020a\4\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\35\1\u020b\20\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\2\35\1\u020c\17\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\6\35\1\u020d\13\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\11\35"+
      "\1\u020e\10\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\u020f\21\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\u0210\21\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\3\35"+
      "\1\u0211\16\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\2\35\1\u0212\3\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\3\35\1\u0213\16\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\2\35\1\u0214\17\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\u0215\3\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\5\35\1\u0216\14\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\14\35\1\u0217\5\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\13\35\1\u0218\6\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\u0219\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\11\35\1\u021a\10\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\13\35\1\u021b\6\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\u021c"+
      "\21\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\6\35\1\u021d\13\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\21\35\1\u021e\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\3\35\1\u021f\2\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\5\35\1\u0220\14\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\6\35\1\u0221\13\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\15\35\1\u0222\4\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\5\35"+
      "\1\u0223\14\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\11\35\1\u0224\10\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\3\u0225\5\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\13\35\1\u0226\6\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\6\35\1\u0227"+
      "\13\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\35\1\u0228\20\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\6\35\1\u0229\13\35\3\0\1\35\2\0"+
      "\2\35\61\0\1\u022a\77\0\1\u022b\47\0\1\u022c\10\0"+
      "\1\u022d\35\0\1\u022e\71\0\1\u022f\51\0\1\u01f3\35\0"+
      "\1\u01f4\64\0\1\u0230\66\0\1\u01fa\100\0\1\u0231\105\0"+
      "\1\u0232\77\0\1\u0233\64\0\1\u01fa\35\0\1\u0234\41\0"+
      "\1\u01fb\65\0\2\u01fd\1\0\1\u01fd\1\0\6\u01fd\4\0"+
      "\1\u0235\3\0\22\u01fd\3\0\1\u01fd\2\0\2\u01fd\24\0"+
      "\2\u01fe\1\0\1\u01fe\1\0\6\u01fe\10\0\22\u01fe\3\0"+
      "\1\u01fe\2\0\2\u01fe\21\0\1\u0235\25\0\1\u0236\111\0"+
      "\1\u0237\57\0\1\u0202\65\0\1\35\1\u0238\1\0\1\35"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\1\35\1\u0239\1\0\1\35\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\35\1\u023a\20\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\10\35\1\u023b\11\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\10\35\1\u023c\11\35\3\0\1\35\2\0\2\35\24\0"+
      "\1\35\1\u023d\1\0\1\35\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\7\35\1\u023e\12\35\3\0\1\35"+
      "\2\0\2\35\24\0\1\35\1\u023f\1\0\1\35\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\10\35\1\u0240"+
      "\11\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u0241\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\u0242\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\1\35\1\u0243"+
      "\20\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u0244\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\6\35\1\u0245\13\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\2\35\1\u0246"+
      "\3\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u0247\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\2\35\1\u0248\17\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\6\35\1\u0249\13\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u024a\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\1\35\1\u024b\20\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\u024c\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\12\35\1\u024d\7\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\7\35\1\u024e\12\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\15\35\1\u024f\4\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\2\35\1\u0250\3\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\13\35\1\u0251\6\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\4\35\1\u0252\15\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\u0253\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\37\0\3\u0225\10\0"+
      "\1\u0254\52\0\2\35\1\0\1\u0255\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\1\35\1\u0256\20\35\3\0"+
      "\1\35\2\0\2\35\40\0\1\u022a\35\0\1\u0257\63\0"+
      "\1\u0258\52\0\1\u0259\105\0\1\u022d\35\0\1\u022e\31\0"+
      "\1\u025a\100\0\1\u01fa\111\0\1\u0231\35\0\1\u025b\52\0"+
      "\1\u025c\117\0\1\u0258\50\0\1\u01fb\1\0\1\u01fc\127\0"+
      "\1\u025d\47\0\3\u025e\63\0\1\35\1\u025f\1\0\1\35"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\1\u0260"+
      "\21\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\21\35\1\u0261\3\0\1\35"+
      "\2\0\2\35\24\0\1\35\1\u0262\1\0\1\35\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\1\35\1\u0263\1\0\1\35\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\2\35\1\u0264\17\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\6\35\1\u0265\13\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\u0266\3\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\2\35\1\u0267\3\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\6\35\1\u0268\13\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\u0269\1\0\6\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\35\1\u026a\20\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\6\35\1\u026b\13\35\3\0\1\35"+
      "\2\0\2\35\24\0\1\35\1\u026c\1\0\1\35\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\7\35\1\u026d"+
      "\12\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\u026e\1\0\6\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\5\35\1\u026f\14\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\5\35\1\u0270"+
      "\14\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\6\35\1\u0271\13\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\u0272\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u0273\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\1\35\1\u0274\1\0\1\35"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\60\0\1\u0275\44\0\2\35\1\0\1\u0276\1\0\6\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\40\0\1\u0258"+
      "\35\0\1\u0277\56\0\1\u022d\104\0\1\u01f3\60\0\1\u025c"+
      "\35\0\1\u0278\52\0\1\u0279\55\0\1\u027a\1\0\1\u027a"+
      "\2\0\3\u027a\1\0\1\u027a\3\u025e\1\u027b\1\0\1\u027c"+
      "\2\0\22\u027a\3\0\1\u027a\2\0\2\u027a\7\0\1\u027c"+
      "\4\0\2\u027c\6\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\7\35\1\u027d\12\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\2\35\1\u027e\3\35"+
      "\10\0\22\35\3\0\1\35\2\0\2\35\24\0\1\35"+
      "\1\u027f\1\0\1\35\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\1\35\1\u0280\1\0\1\35"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\7\35"+
      "\1\u0281\12\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\11\35\1\u0282\10\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\6\35\1\u0283\13\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\15\35\1\u0284\4\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\u0285\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\7\35\1\u0286\12\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\3\35\1\u0287\16\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\7\35"+
      "\1\u0288\12\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\1\35\1\u0289\20\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\u028a"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\35\1\0\6\35\10\0\7\35"+
      "\1\u028b\12\35\3\0\1\35\2\0\2\35\56\0\1\u028c"+
      "\46\0\2\35\1\0\1\35\1\0\6\35\10\0\2\35"+
      "\1\u028d\17\35\3\0\1\35\2\0\2\35\37\0\3\u0279"+
      "\30\0\1\361\32\0\2\u027a\1\0\1\u027a\1\0\6\u027a"+
      "\3\u028e\2\0\1\u027c\2\0\22\u027a\3\0\1\u027a\2\0"+
      "\2\u027a\7\0\1\u027c\4\0\2\u027c\7\0\1\u028f\1\0"+
      "\1\u028f\2\0\3\u028f\1\0\1\u028f\10\0\22\u028f\3\0"+
      "\1\u028f\2\0\2\u028f\25\0\1\u027a\1\0\1\u027a\2\0"+
      "\3\u027a\1\0\1\u027a\3\u028e\2\0\1\u027c\2\0\22\u027a"+
      "\3\0\1\u027a\2\0\2\u027a\7\0\1\u027c\4\0\2\u027c"+
      "\6\0\2\35\1\0\1\35\1\0\6\35\10\0\5\35"+
      "\1\u0290\14\35\3\0\1\35\2\0\2\35\24\0\2\35"+
      "\1\0\1\35\1\0\6\35\10\0\6\35\1\u0291\13\35"+
      "\3\0\1\35\2\0\2\35\24\0\1\35\1\u0292\1\0"+
      "\1\35\1\0\6\35\10\0\22\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\14\35\1\u0293\5\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u0294\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\15\35\1\u0295\4\35\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\5\35\1\u0296\14\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\3\35\1\u0297"+
      "\16\35\3\0\1\35\2\0\2\35\24\0\2\35\1\0"+
      "\1\35\1\0\6\35\10\0\10\35\1\u0298\11\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\35\1\0"+
      "\6\35\10\0\5\35\1\u0299\14\35\3\0\1\35\2\0"+
      "\2\35\63\0\1\u029a\54\0\3\u028e\1\u029b\62\0\2\u028f"+
      "\1\0\1\u028f\1\0\6\u028f\3\u029c\5\0\22\u028f\3\0"+
      "\1\u028f\2\0\2\u028f\24\0\1\35\1\u029d\1\0\1\35"+
      "\1\0\6\35\10\0\22\35\3\0\1\35\2\0\2\35"+
      "\24\0\2\35\1\0\1\u029e\1\0\6\35\10\0\22\35"+
      "\3\0\1\35\2\0\2\35\24\0\2\35\1\0\1\35"+
      "\1\0\6\35\10\0\21\35\1\u029f\3\0\1\35\2\0"+
      "\2\35\24\0\2\35\1\0\1\35\1\0\6\35\10\0"+
      "\6\35\1\u02a0\13\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\6\35\1\u02a1"+
      "\13\35\3\0\1\35\2\0\2\35\25\0\1\u02a2\1\0"+
      "\1\u02a2\2\0\3\u02a2\1\0\1\u02a2\10\0\22\u02a2\3\0"+
      "\1\u02a2\2\0\2\u02a2\25\0\1\u02a3\1\0\1\u02a3\2\0"+
      "\3\u02a3\1\0\1\u02a3\3\u029c\2\0\1\u02a4\2\0\22\u02a3"+
      "\3\0\1\u02a3\2\0\2\u02a3\7\0\1\u02a4\4\0\2\u02a4"+
      "\6\0\1\35\1\u02a5\1\0\1\35\1\0\6\35\10\0"+
      "\22\35\3\0\1\35\2\0\2\35\24\0\1\35\1\u02a6"+
      "\1\0\1\35\1\0\6\35\10\0\22\35\3\0\1\35"+
      "\2\0\2\35\24\0\2\35\1\0\1\35\1\0\6\35"+
      "\10\0\1\u02a7\21\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\u02a8\1\0\6\35\10\0\22\35\3\0"+
      "\1\35\2\0\2\35\24\0\2\35\1\0\1\u02a9\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\u02a2\1\0\1\u02a2\1\0\6\u02a2\3\u02aa\5\0\22\u02a2"+
      "\3\0\1\u02a2\2\0\2\u02a2\3\0\1\u02ab\20\0\2\u02a3"+
      "\1\0\1\u02a3\1\0\6\u02a3\3\u02aa\2\0\1\u02a4\2\0"+
      "\22\u02a3\3\0\1\u02a3\2\0\2\u02a3\3\0\1\u02ab\3\0"+
      "\1\u02a4\4\0\2\u02a4\7\0\1\u02a3\1\0\1\u02a3\2\0"+
      "\3\u02a3\1\0\1\u02a3\3\u02aa\2\0\1\u02a4\2\0\22\u02a3"+
      "\3\0\1\u02a3\2\0\2\u02a3\3\0\1\u02ab\3\0\1\u02a4"+
      "\4\0\2\u02a4\6\0\1\35\1\u02ac\1\0\1\35\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\13\35\1\u02ad"+
      "\6\35\3\0\1\35\2\0\2\35\37\0\3\u02aa\42\0"+
      "\1\u02ab\101\0\1\u02ae\17\0\2\35\1\0\1\u02af\1\0"+
      "\6\35\10\0\22\35\3\0\1\35\2\0\2\35\24\0"+
      "\2\35\1\0\1\35\1\0\6\35\10\0\11\35\1\u02b0"+
      "\10\35\3\0\1\35\2\0\2\35\23\0";
  
    private static int [] zzUnpackTrans() {
      int [] result = new int[33150];
      int offset = 0;
      offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
      return result;
    }
  
    private static int zzUnpackTrans(String packed, int offset, int [] result) {
      int i = 0;       /* index in packed string  */
      int j = offset;  /* index in unpacked array */
      int l = packed.length();
      while (i < l) {
        int count = packed.charAt(i++);
        int value = packed.charAt(i++);
        value--;
        do result[j++] = value; while (--count > 0);
      }
      return j;
    }
  
  
  	/* error codes */
  	private static final int ZZ_UNKNOWN_ERROR = 0;
  	private static final int ZZ_NO_MATCH = 1;
  	private static final int ZZ_PUSHBACK_2BIG = 2;
  
  	/* error messages for the codes above */
  	private static final String ZZ_ERROR_MSG[] = {
  		"Unknown internal scanner error",		//$NON-NLS-1$
  		"Error: could not match input",			//$NON-NLS-1$
  		"Error: pushback value was too large"	//$NON-NLS-1$
  	};
  
    /**
     * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
     */
    private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
  
    private static final String ZZ_ATTRIBUTE_PACKED_0 =
      "\5\0\2\1\11\0\2\1\1\11\15\1\3\11\24\1"+
      "\1\11\12\1\7\11\1\1\1\11\2\1\1\11\4\1"+
      "\1\11\3\1\1\11\7\1\1\11\2\1\1\11\3\1"+
      "\1\11\2\1\1\11\2\1\2\11\1\1\13\11\1\1"+
      "\10\11\2\1\1\11\3\1\1\11\1\1\1\11\1\1"+
      "\1\0\2\1\1\0\1\1\1\0\2\1\1\0\1\11"+
      "\6\1\2\11\2\0\6\1\2\0\1\1\2\0\1\11"+
      "\2\0\37\1\3\11\1\1\2\11\1\1\12\0\1\11"+
      "\2\1\1\11\2\1\1\0\1\11\1\1\1\11\1\1"+
      "\10\11\1\1\4\0\2\1\3\11\1\1\1\0\1\11"+
      "\3\0\2\1\3\0\4\1\2\0\1\11\3\0\5\11"+
      "\1\0\1\1\1\0\7\1\1\0\1\11\16\1\1\0"+
      "\44\1\1\11\1\1\12\0\4\11\2\0\1\11\1\0"+
      "\1\1\1\0\1\11\1\0\1\11\2\1\1\0\70\1"+
      "\16\0\1\11\3\0\64\1\5\0\1\11\6\0\1\11"+
      "\1\1\4\0\2\11\42\1\1\0\4\1\4\0\1\11"+
      "\5\0\1\11\3\0\34\1\1\0\2\1\1\11\3\0"+
      "\1\11\3\0\26\1\1\0\1\1\2\11\4\0\17\1"+
      "\1\0\1\1\2\0\12\1\1\11\2\0\5\1\3\0"+
      "\5\1\2\0\2\1\1\11\2\1";
  
    private static int [] zzUnpackAttribute() {
      int [] result = new int[688];
      int offset = 0;
      offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
      return result;
    }
  
    private static int zzUnpackAttribute(String packed, int offset, int [] result) {
      int i = 0;       /* index in packed string  */
      int j = offset;  /* index in unpacked array */
      int l = packed.length();
      while (i < l) {
        int count = packed.charAt(i++);
        int value = packed.charAt(i++);
        do result[j++] = value; while (--count > 0);
      }
      return j;
    }
  
  	/** the input device */
  	private java.io.Reader zzReader;
  
  	/** the current state of the DFA */
  	private int zzState;
  
  	/** the current lexical state */
  	private int zzLexicalState = YYINITIAL;
  
  	/** this buffer contains the current text to be matched and is
  		the source of the yytext() string */
  	private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
  
  	/** the textposition at the last accepting state */
  	private int zzMarkedPos;
  
  	/** the current text position in the buffer */
  	private int zzCurrentPos;
  
  	/** startRead marks the beginning of the yytext() string in the buffer */
  	private int zzStartRead;
  
  	/** endRead marks the last character in the buffer, that has been read
  		from input */
  	private int zzEndRead;
  
  	/** number of newlines encountered up to the start of the matched text */
  	private int yyline;
  
  	/** the number of characters up to the start of the matched text */
  	private int yychar;
  
  	/**
  	 * the number of characters from the last newline up to the start of the
  	 * matched text
  	 */
  	private int yycolumn;
  
  	/**
  	 * zzAtBOL == true <=> the scanner is currently at the beginning of a line
  	 */
  	private boolean zzAtBOL = true;
  
  	/** zzAtEOF == true <=> the scanner is at the EOF */
  	private boolean zzAtEOF;
  
  	/** denotes if the user-EOF-code has already been executed */
  	private boolean zzEOFDone;
  
  	/**
  	 * The number of occupied positions in zzBuffer beyond zzEndRead.
  	 * When a lead/high surrogate has been read from the input stream
  	 * into the final zzBuffer position, this will have a value of 1;
  	 * otherwise, it will have a value of 0.
  	 */
  	private int zzFinalHighSurrogate = 0;
  
    /* user code: */
  	private final LinkedList<Object> commentList = new LinkedList<>();
  	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=514632
  	// stores nested HEREDOC and NOWDOC ids
  	private final Stack<String> heredocIds = new Stack<>();
  	private boolean asp_tags = false;
  	private boolean short_tags_allowed = true;
  	// XXX: "heredocIds" and "stack" are never reset
  	private final StateStack stack = new StateStack();
  	protected int commentStartPosition;
  	protected String lastHeredocIndentation;
  
  	private AST ast;
  
  	public void setAST(AST ast) {
  		this.ast = ast;
  	}
  
  	@Override
  	public PHPVersion getPHPVersion() {
  		return PHPVersion.PHP7_4;
  	}
  
  	@Override
  	public void setInScriptingState() {
  		yybegin(ST_IN_SCRIPTING);
  	}
  
  	@Override
  	public void resetCommentList() {
  		commentList.clear();
  	}
  
  	/**
  	 * Will only be filled when ast != null
  	 */
  	@Override
  	public LinkedList<Object> getCommentList() {
  		return commentList;
  	}
  
  	/**
  	 * Will only be added when ast != null
  	 */
  	protected void addComment(int type) {
  		if (ast != null) {
  			int leftPosition = getTokenStartPosition();
  			Comment comment = new Comment(commentStartPosition, leftPosition + getTokenLength(), ast, type);
  			commentList.add(comment);
  		}
  	}
  
  	@Override
  	public void setUseAspTagsAsPHP(boolean useAspTagsAsPhp) {
  		asp_tags = useAspTagsAsPhp;
  	}
  
  	@Override
  	public void setUseShortTags(boolean useShortTags) {
  		short_tags_allowed = useShortTags;
  	}
  
  	private void pushState(int state) {
  		stack.pushStack(zzLexicalState);
  		yybegin(state);
  	}
  
  	private void popState() {
  		yybegin(stack.popStack());
  	}
  
  	@Override
  	public int getCurrentLine() {
  		return yyline;
  	}
  
  	protected int getTokenStartPosition() {
  		return zzStartRead - _zzPushbackPos;
  	}
  
  	protected int getTokenLength() {
  		return zzMarkedPos - zzStartRead;
  	}
  
  	@Override
  	public int getLength() {
  		return zzEndRead - _zzPushbackPos;
  	}
  
  	private void handleCommentStart() {
  		commentStartPosition = getTokenStartPosition();
  	}
  
  	private void handleLineCommentEnd() {
  		addComment(Comment.TYPE_SINGLE_LINE);
  	}
  
  	private void handleMultilineCommentEnd() {
  		addComment(Comment.TYPE_MULTILINE);
  	}
  
  	private void handlePHPDocEnd() {
  		addComment(Comment.TYPE_PHPDOC);
  	}
  
  	protected void handleVarComment() {
  		addComment(Comment.TYPE_MULTILINE);
  	}
  
  	protected Symbol createFullSymbol(int symbolNumber) {
  		Symbol symbol = createSymbol(symbolNumber);
  		symbol.value = yytext();
  		return symbol;
  	}
  
  	protected Symbol createSymbol(int symbolNumber) {
  		int leftPosition = getTokenStartPosition();
  		return new Symbol(symbolNumber, leftPosition, leftPosition + getTokenLength());
  	}
  
  	public int[] getParameters() {
  		return new int[] { zzMarkedPos, _zzPushbackPos, zzCurrentPos,
  				zzStartRead, zzEndRead, yyline, zzAtBOL ? 1 : 0,
  				zzAtEOF ? 1 : 0, zzEOFDone ? 1 : 0, zzFinalHighSurrogate };
  	}
  
  	/**
  	 * Parses a PHPDoc block comment. Underlying reader (zzReader) can be closed
  	 * in the process (when EOF is reached).
  	 *
  	 * @return true when PHPDoc was parsed, false otherwise (false also implies
  	 *         that underlying lexer was unavailable)
  	 */
  	protected boolean parsePHPDoc() {
  		final IDocumentorLexer documentorLexer = getDocumentorLexer(zzReader);
  		if (documentorLexer == null) {
  			return false;
  		}
  		yypushback(zzMarkedPos - zzStartRead);
  		int[] parameters = getParameters();
  		documentorLexer.reset(zzReader, zzBuffer, parameters);
  		Object phpDocBlock = documentorLexer.parse();
  		commentList.add(phpDocBlock);
  		reset(zzReader, documentorLexer.getBuffer(), documentorLexer.getParameters());
  		return true;
  	}
  
  	protected IDocumentorLexer getDocumentorLexer(java.io.Reader reader) {
  		return null;
  	}
  
  	/**
  	 * Resets the {@code PhpAstLexer} properties to previous values, but leaves
  	 * the lexical state unchanged. Be careful, method {@link #next_token()}
  	 * also caches those properties using internal variables (zzCurrentPosL,
  	 * zzMarkedPosL, zzBufferL, zzEndReadL) that should be accordingly resetted
  	 * by the lexical rules calling
  	 * {@link #reset(java.io.Reader, char[], int[])}. Also be careful that those
  	 * internal variables could change from one version of JFlex to another.
  	 *
  	 * @param reader
  	 * @param buffer
  	 * @param parameters
  	 */
  	public void reset(java.io.Reader reader, char[] buffer, int[] parameters) {
  		this.zzReader = reader;
  		this.zzBuffer = buffer;
  		this.zzMarkedPos = parameters[0];
  		this._zzPushbackPos = parameters[1];
  		this.zzCurrentPos = parameters[2];
  		this.zzStartRead = parameters[3];
  		this.zzEndRead = parameters[4];
  		this.yyline = parameters[5];
  		this.yychar = this.zzStartRead - this._zzPushbackPos;
  		// XXX: never used
  		this.yycolumn = 0;
  		this.zzAtEOF = parameters[7] != 0;
  		this.zzEOFDone = parameters[8] != 0;
  		this.zzFinalHighSurrogate = parameters[9];
  		// XXX: check if there's no side-effect to reset zzAtBOL
  		// when zzAtEOF is false and zzMarkedPos is equal to zzStartRead.
  		// One possible case would be that IDocumentorLexer#parse() matches
  		// no text at all without being at EOF (i.e. the document lexer returns
  		// a zero-length token), which of course would be totally broken...
  		this.zzAtBOL = this.zzAtEOF ? false : (parameters[6] != 0);
  	}
  
  
  	/** the textposition at the last state to be included in yytext */
  	private int _zzPushbackPos;
  
  	/* The following fields are added in order to support the change in zzRefill */
  	private String oldString = null;
  	private boolean useOldString = false;
  	private int startPos = 0;
  
    /**
     * Creates a new scanner
     *
     * @param   in  the java.io.Reader to read input from.
     */
    public PHPAstLexer(java.io.Reader in) {
      this.zzReader = in;
    }
  
  
    /** 
     * Unpacks the compressed character translation table.
     *
     * @param packed   the packed character translation table
     * @return         the unpacked character translation table
     */
    private static char [] zzUnpackCMap(String packed) {
      char [] map = new char[0x110000];
      int i = 0;  /* index in packed string  */
      int j = 0;  /* index in unpacked array */
      while (i < 238) {
        int  count = packed.charAt(i++);
        char value = packed.charAt(i++);
        do map[j++] = value; while (--count > 0);
      }
      return map;
    }
  
  
  	/**
  	 * Refills the input buffer.
  	 *
  	 * @return      <code>false</code>, iff there was new input.
  	 *
  	 * @exception   java.io.IOException  if any I/O-Error occurs
  	 */
  	private boolean zzRefill() throws java.io.IOException {
  
  		if (useOldString) {
  			String saveOldString = oldString;
  			oldString = new String(zzBuffer, startPos, zzMarkedPos - startPos);
  			if (saveOldString != null) {
  				oldString = saveOldString + oldString;
  			}
  		}
  
  		/* first: make room (if you can) */
  		if (zzStartRead > 0) {
  			zzEndRead += zzFinalHighSurrogate;
  			zzFinalHighSurrogate = 0;
  			System.arraycopy(zzBuffer, zzStartRead,
  							zzBuffer, 0,
  							zzEndRead-zzStartRead);
  
  			/* translate stored positions */
  			zzEndRead-= zzStartRead;
  			zzCurrentPos-= zzStartRead;
  			zzMarkedPos-= zzStartRead;
  			_zzPushbackPos-= zzStartRead;
  			startPos = 0;
  			zzStartRead = 0;
  		}
  
  		/* is the buffer big enough? */
  		if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) {
  			/* if not: blow it up */
  			char newBuffer[] = new char[zzBuffer.length*2];
  			System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
  			zzBuffer = newBuffer;
  			zzEndRead += zzFinalHighSurrogate;
  			zzFinalHighSurrogate = 0;
  		}
  
  		/* fill the buffer with new input */
  		int requested = zzBuffer.length - zzEndRead;
  		int numRead = zzReader.read(zzBuffer, zzEndRead, requested);
  
  		/* not supposed to occur according to specification of java.io.Reader */
  		if (numRead == 0) {
  			throw new java.io.IOException("Reader returned 0 characters.");
  		}
  		if (numRead > 0) {
  			zzEndRead += numRead;
  			/* If numRead == requested, we might have requested to few chars to
  			   encode a full Unicode character. We assume that a Reader would
  			   otherwise never return half characters. */
  			if (numRead == requested) {
  				if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) {
  					--zzEndRead;
  					zzFinalHighSurrogate = 1;
  				}
  			}
  			/* potentially more input available */
  			return false;
  		}
  
  		/* numRead < 0 ==> end of stream */
  		return true;
  	}
  
  
  	/**
  	 * Gets the next input character.
  	 *
  	 * @return      the next character of the input stream, EOF if the
  	 *              end of the stream is reached.
  	 * @exception   IOException  if any I/O-Error occurs
  	 */
  	private int yy_advance() throws java.io.IOException {
  
  		/* standard case */
  		if (zzCurrentPos < zzEndRead) return zzBuffer[zzCurrentPos++];
  
  		/* if the eof is reached, we don't need to work hard */
  		if (zzAtEOF) return YYEOF;
  
  		/* otherwise: need to refill the buffer */
  
  		String saveOldString = oldString;
  		oldString = null;
  
  		/* first: make room (if you can) */
  		if (zzRefill()) {
  			oldString = saveOldString;
  			return YYEOF;
  		}
  
  		oldString = saveOldString;
  
  		return zzBuffer[zzCurrentPos++];
  	}
  
  
  	/**
  	 * Closes the input stream.
  	 */
  	public final void yyclose() throws java.io.IOException {
  		zzAtEOF = true;            /* indicate end of file */
  		zzEndRead = zzStartRead;  /* invalidate buffer    */
  
  		if (zzReader != null)
  			zzReader.close();
  	}
  
  
  	/**
  	 * Resets the scanner to read from a new input stream.
  	 * Does not close the old reader.
  	 *
  	 * All internal variables are reset, the old input stream
  	 * <b>cannot</b> be reused (internal buffer is discarded and lost).
  	 * Lexical state is set to <tt>ZZ_INITIAL</tt>.
  	 *
  	 * Internal scan buffer is resized down to its initial length, if it has grown.
  	 *
  	 * @param reader   the new input stream
  	 */
  	public final void yyreset(java.io.Reader reader) {
  		zzReader = reader;
  		zzAtBOL  = true;
  		zzAtEOF  = false;
  		zzEOFDone = false;
  		zzEndRead = zzStartRead = 0;
  		zzCurrentPos = zzMarkedPos = _zzPushbackPos = startPos = 0;
  		zzFinalHighSurrogate = 0;
  		oldString = null;
  		yyline = yychar = yycolumn = 0;
  		zzLexicalState = YYINITIAL;
  		if (zzBuffer.length > ZZ_BUFFERSIZE)
  			zzBuffer = new char[ZZ_BUFFERSIZE];
  	}
  
  
  	/**
  	 * Returns the current lexical state.
  	 */
  	public final int yystate() {
  		return zzLexicalState;
  	}
  
  
  	/**
  	 * Enters a new lexical state
  	 *
  	 * @param newState the new lexical state
  	 */
  	public final void yybegin(int newState) {
  		zzLexicalState = newState;
  	}
  
  
  	/**
  	 * Returns the text matched by the current regular expression.
  	 */
  	public final String yytext() {
  		return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
  	}
  
  
  	/**
  	 * Returns the character at position <tt>pos</tt> from the
  	 * matched text.
  	 *
  	 * It is equivalent to yytext().charAt(pos), but faster
  	 *
  	 * @param pos the position of the character to fetch.
  	 *            A value from 0 to yylength()-1.
  	 *
  	 * @return the character at position pos
  	 */
  	public final char yycharat(int pos) {
  		return zzBuffer[zzStartRead+pos];
  	}
  
  
  	/**
  	 * Returns the length of the matched text region.
  	 */
  	public final int yylength() {
  		return zzMarkedPos-zzStartRead;
  	}
  
  
  	/**
  	 * Reports an error that occured while scanning.
  	 *
  	 * In a wellformed scanner (no or only correct usage of
  	 * yypushback(int) and a match-all fallback rule) this method
  	 * will only be called with things that "Can't Possibly Happen".
  	 * If this method is called, something is seriously wrong
  	 * (e.g. a JFlex bug producing a faulty scanner etc.).
  	 *
  	 * Usual syntax/scanner level error handling should be done
  	 * in error fallback rules.
  	 *
  	 * @param   errorCode  the code of the errormessage to display
  	 */
    private void zzScanError(int errorCode) {
  		String message;
  		try {
  			message = ZZ_ERROR_MSG[errorCode];
  		}
  		catch (ArrayIndexOutOfBoundsException e) {
  			message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
  		}
  
      throw new Error(message);
  	}
  
  
  	/**
  	 * Pushes the specified amount of characters back into the input stream.
  	 *
  	 * They will be read again by then next call of the scanning method
  	 *
  	 * @param number  the number of characters to be read again.
  	 *                This number must not be greater than yylength()!
  	 */
    public void yypushback(int number)  {
  		if ( number > yylength() )
  			zzScanError(ZZ_PUSHBACK_2BIG);
  
  		zzMarkedPos -= number;
  	}
  
  
  	/**
  	 * user method - common.sse
  	 */
  	private void updateStartPos() {
  		updateStartPos(zzMarkedPos);
  	}
  
  
  	/**
  	 * user method - common.sse
  	 */
  	private void updateStartPos(int position) {
  		startPos = position;
  		oldString = null;
  	}
  
  
  	/**
  	 * user method - common.sse
  	 */
  	public final boolean isEOF() {
  		return zzAtEOF;
  	}
  
  
    /**
     * Contains user EOF-code, which will be executed exactly once,
     * when the end of file is reached
     */
    private void zzDoEOF() throws java.io.IOException {
      if (!zzEOFDone) {
        zzEOFDone = true;
        yyclose();
      }
    }
  
  
  	/**
  	 * Resumes scanning until the next regular expression is matched,
  	 * the end of input is encountered or an I/O-Error occurs.
  	 *
  	 * @return      the next token
  	 * @exception   java.io.IOException  if any I/O-Error occurs
  	 */
    public java_cup.runtime.Symbol next_token() throws java.io.IOException {
  	int zzInput;
  	int zzAction;
  
  	// cached fields:
  	int zzCurrentPosL;
  	int zzMarkedPosL;
  	int zzEndReadL = zzEndRead;
  	char [] zzBufferL = zzBuffer;
  	char [] zzCMapL = ZZ_CMAP;
  
      int [] zzTransL = ZZ_TRANS;
      int [] zzRowMapL = ZZ_ROWMAP;
      int [] zzAttrL = ZZ_ATTRIBUTE;
  
  	while (true) {
  		zzMarkedPosL = zzMarkedPos;
  
        boolean zzR = false;
        int zzCh;
        int zzCharCount;
        for (zzCurrentPosL = zzStartRead  ;
             zzCurrentPosL < zzMarkedPosL ;
             zzCurrentPosL += zzCharCount ) {
          zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL);
          zzCharCount = Character.charCount(zzCh);
          switch (zzCh) {
          case '\u000B':
          case '\u000C':
          case '\u0085':
          case '\u2028':
          case '\u2029':
            yyline++;
            zzR = false;
            break;
          case '\r':
            yyline++;
            zzR = true;
            break;
          case '\n':
            if (zzR)
              zzR = false;
            else {
              yyline++;
            }
            break;
          default:
            zzR = false;
          }
        }
  
        if (zzR) {
          // peek one character ahead if it is \n (if we have counted one line too much)
          boolean zzPeek;
          if (zzMarkedPosL < zzEndReadL)
            zzPeek = zzBufferL[zzMarkedPosL] == '\n';
          else if (zzAtEOF)
            zzPeek = false;
          else {
            boolean eof = zzRefill();
            zzEndReadL = zzEndRead;
            zzMarkedPosL = zzMarkedPos;
            zzBufferL = zzBuffer;
            if (eof) 
              zzPeek = false;
            else 
              zzPeek = zzBufferL[zzMarkedPosL] == '\n';
          }
          if (zzPeek) yyline--;
        }
  		zzAction = -1;
  
  		zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
  
        zzState = ZZ_LEXSTATE[zzLexicalState];
  
        // set up zzAction for empty match case:
        int zzAttributes = zzAttrL[zzState];
        if ( (zzAttributes & 1) == 1 ) {
          zzAction = zzState;
        }
  
  
  		zzForAction: {
  			while (true) {
  
            if (zzCurrentPosL < zzEndReadL) {
              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
              zzCurrentPosL += Character.charCount(zzInput);
            }
            else if (zzAtEOF) {
              zzInput = YYEOF;
              break zzForAction;
            }
            else {
              // store back cached positions
              zzCurrentPos  = zzCurrentPosL;
              zzMarkedPos   = zzMarkedPosL;
              boolean eof = zzRefill();
              // get translated positions and possibly new buffer
              zzCurrentPosL  = zzCurrentPos;
              zzMarkedPosL   = zzMarkedPos;
              zzBufferL      = zzBuffer;
              zzEndReadL     = zzEndRead;
              if (eof) {
                zzInput = YYEOF;
                break zzForAction;
              }
              else {
                zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
                zzCurrentPosL += Character.charCount(zzInput);
              }
            }
            int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
            if (zzNext == -1) break zzForAction;
            zzState = zzNext;
  
            zzAttributes = zzAttrL[zzState];
            if ( (zzAttributes & 1) == 1 ) {
  				zzAction = zzState;
  				zzMarkedPosL = zzCurrentPosL;
              if ( (zzAttributes & 8) == 8 ) break zzForAction;
  				}
  
  			}
  		}
  
  			// store back cached position
  			zzMarkedPos = zzMarkedPosL;
  
  			if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
  				zzAtEOF = true;
              zzDoEOF();
            { 	return createSymbol(sym.EOF);
   }
  			}
  			else {
          switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
            case 1: 
              { return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
              }
            case 202: break;
            case 2: 
              { return createSymbol(ParserConstants.T_INLINE_HTML);
              }
            case 203: break;
            case 3: 
              { // do nothing
              }
            case 204: break;
            case 4: 
              { return createFullSymbol(ParserConstants.T_LNUMBER);
              }
            case 205: break;
            case 5: 
              { return createFullSymbol(ParserConstants.T_STRING);
              }
            case 206: break;
            case 6: 
              { return createSymbol(ParserConstants.T_NEKUDA);
              }
            case 207: break;
            case 7: 
              { return createSymbol(ParserConstants.T_PLUS);
              }
            case 208: break;
            case 8: 
              { 
              }
            case 209: break;
            case 9: 
              { return createSymbol(ParserConstants.T_DOLLAR);
              }
            case 210: break;
            case 10: 
              { yybegin(ST_DOUBLE_QUOTES);
  	return createSymbol(ParserConstants.T_QUATE);
              }
            case 211: break;
            case 11: 
              { return createSymbol(ParserConstants.T_NS_SEPARATOR);
              }
            case 212: break;
            case 12: 
              { yybegin(ST_BACKQUOTE);
  	return createSymbol(ParserConstants.T_BACKQUATE);
              }
            case 213: break;
            case 13: 
              { pushState(ST_IN_SCRIPTING);
  	return createSymbol(ParserConstants.T_CURLY_OPEN);
              }
            case 214: break;
            case 14: 
              { return createSymbol(ParserConstants.T_MINUS);
              }
            case 215: break;
            case 15: 
              { return createSymbol(ParserConstants.T_LGREATER);
              }
            case 216: break;
            case 16: 
              { return createSymbol(ParserConstants.T_NEKUDOTAIM);
              }
            case 217: break;
            case 17: 
              { return createSymbol(ParserConstants.T_OPEN_PARENTHESE);
              }
            case 218: break;
            case 18: 
              { return createSymbol(ParserConstants.T_CLOSE_PARENTHESE);
              }
            case 219: break;
            case 19: 
              { return createSymbol(ParserConstants.T_EQUAL);
              }
            case 220: break;
            case 20: 
              { return createSymbol(ParserConstants.T_NOT);
              }
            case 221: break;
            case 21: 
              { return createSymbol(ParserConstants.T_RGREATER);
              }
            case 222: break;
            case 22: 
              { return createSymbol(ParserConstants.T_TIMES);
              }
            case 223: break;
            case 23: 
              { return createSymbol(ParserConstants.T_DIV);
              }
            case 224: break;
            case 24: 
              { return createSymbol(ParserConstants.T_PRECENT);
              }
            case 225: break;
            case 25: 
              { return createSymbol(ParserConstants.T_REFERENCE);
              }
            case 226: break;
            case 26: 
              { return createSymbol(ParserConstants.T_OR);
              }
            case 227: break;
            case 27: 
              { return createSymbol(ParserConstants.T_KOVA);
              }
            case 228: break;
            case 28: 
              { return createSymbol(ParserConstants.T_QUESTION_MARK);
              }
            case 229: break;
            case 29: 
              { return createSymbol(ParserConstants.T_SEMICOLON);
              }
            case 230: break;
            case 30: 
              { return createSymbol(ParserConstants.T_COMMA);
              }
            case 231: break;
            case 31: 
              { return createSymbol(ParserConstants.T_OPEN_RECT);
              }
            case 232: break;
            case 32: 
              { return createSymbol(ParserConstants.T_CLOSE_RECT);
              }
            case 233: break;
            case 33: 
              { return createSymbol(ParserConstants.T_TILDA);
              }
            case 234: break;
            case 34: 
              { return createSymbol(ParserConstants.T_AT);
              }
            case 235: break;
            case 35: 
              { if (!stack.isEmpty()) {
  		popState();
  	}
  	return createSymbol(ParserConstants.T_CURLY_CLOSE);
              }
            case 236: break;
            case 36: 
              { yybegin(ST_SINGLE_QUOTE);
  	return createSymbol(ParserConstants.T_SINGLE_QUATE);
              }
            case 237: break;
            case 37: 
              { handleCommentStart();
  	yybegin(ST_ONE_LINE_COMMENT);
  	// yymore();
              }
            case 238: break;
            case 38: 
              { yybegin(ST_IN_SCRIPTING);
  	return createSymbol(ParserConstants.T_QUATE);
              }
            case 239: break;
            case 39: 
              { return createSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
              }
            case 240: break;
            case 40: 
              { yybegin(ST_IN_SCRIPTING);
  	return createSymbol(ParserConstants.T_SINGLE_QUATE);
              }
            case 241: break;
            case 41: 
              { yybegin(ST_IN_SCRIPTING);
  	return createSymbol(ParserConstants.T_BACKQUATE);
              }
            case 242: break;
            case 42: 
              { yypushback(1);
  	yybegin(ST_HEREDOC);
              }
            case 243: break;
            case 43: 
              { String yytext = yytext();
  	int textLength = yytext.length();
  	String heredoc = heredocIds.peek();
  	int heredocLength = heredoc.length();
  	if (textLength > heredocLength && yytext.substring(textLength - heredocLength, textLength).equals(heredoc)) {
  		char c = yytext.charAt(textLength - heredocLength - 1);
  		if (c == ' ' || c == '\t') {
  			lastHeredocIndentation = yytext.substring(0, textLength - heredocLength);
  			// we need to remove the closing label from the symbol value
  			yypushback(heredocLength);
  			yybegin(ST_END_HEREDOC);
  			return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
  		}
  	}
  	if (textLength == heredocLength && yytext.equals(heredoc)) {
  		lastHeredocIndentation = ""; //$NON-NLS-1$
  		heredocIds.pop();
  		yybegin(ST_IN_SCRIPTING);
  		return createFullSymbol(ParserConstants.T_END_HEREDOC);
  	}
  	yybegin(ST_HEREDOC);
              }
            case 244: break;
            case 44: 
              { yypushback(1);
  	yybegin(ST_NOWDOC);
              }
            case 245: break;
            case 45: 
              { String yytext = yytext();
  	int textLength = yytext.length();
  	String nowdoc = heredocIds.peek();
  	int nowdocLength = nowdoc.length();
  	if (textLength > nowdocLength && yytext.substring(textLength - nowdocLength, textLength).equals(nowdoc)) {
  		char c = yytext.charAt(textLength - nowdocLength - 1);
  		if (c == ' ' || c == '\t') {
  			lastHeredocIndentation = yytext.substring(0, textLength - nowdocLength);
  			// we need to remove the closing label from the symbol value
  			yypushback(nowdocLength);
  			yybegin(ST_END_HEREDOC);
  			return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
  		}
  	}
  	if (textLength == nowdocLength && yytext.equals(nowdoc)) {
  		lastHeredocIndentation = ""; //$NON-NLS-1$
  		heredocIds.pop();
  		yybegin(ST_IN_SCRIPTING);
  		return createFullSymbol(ParserConstants.T_END_HEREDOC);
  	}
  	yybegin(ST_NOWDOC);
              }
            case 246: break;
            case 46: 
              { heredocIds.pop();
  	yybegin(ST_IN_SCRIPTING);
  	return createFullSymbol(ParserConstants.T_END_HEREDOC);
              }
            case 247: break;
            case 47: 
              { yypushback(1);
  	popState();
              }
            case 248: break;
            case 48: 
              { popState();
  	return createFullSymbol(ParserConstants.T_STRING);
              }
            case 249: break;
            case 49: 
              { yypushback(1);
  	yybegin(ST_IN_SCRIPTING);
              }
            case 250: break;
            case 50: 
              { yybegin(ST_IN_SCRIPTING);
  	return createFullSymbol(ParserConstants.T_STRING_VARNAME);
              }
            case 251: break;
            case 51: 
              { /* treat numbers (almost) as strings inside encapsulated strings */
  	return createFullSymbol(ParserConstants.T_NUM_STRING);
              }
            case 252: break;
            case 52: 
              { yypushback(1);
  	popState();
  	return createSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
              }
            case 253: break;
            case 53: 
              { return createSymbol(ParserConstants.T_QUATE);
              }
            case 254: break;
            case 54: 
              { return createSymbol(ParserConstants.T_BACKQUATE);
              }
            case 255: break;
            case 55: 
              { return createSymbol(ParserConstants.T_CURLY_OPEN);
              }
            case 256: break;
            case 56: 
              { popState();
  	return createSymbol(ParserConstants.T_CLOSE_RECT);
              }
            case 257: break;
            case 57: 
              { return createSymbol(ParserConstants.T_CURLY_CLOSE);
              }
            case 258: break;
            case 58: 
              { // yymore();
              }
            case 259: break;
            case 59: 
              { String yytext = yytext();
  	switch (yytext.charAt(yytext.length() - 1)) {
  		case '?':
  		case '%':
  		case '>':
  			yypushback(1);
  			break;
  		default:
  			handleLineCommentEnd();
  			yybegin(ST_IN_SCRIPTING);
  	}
  	// yymore();
              }
            case 260: break;
            case 60: 
              { if (asp_tags) {
  		yybegin(ST_IN_SCRIPTING);
  		//return T_OPEN_TAG;
  	} else {
  		return createSymbol(ParserConstants.T_INLINE_HTML);
  	}
              }
            case 261: break;
            case 61: 
              { if (short_tags_allowed) {
  		yybegin(ST_IN_SCRIPTING);
  		//return T_OPEN_TAG;
  	} else {
  		return createSymbol(ParserConstants.T_INLINE_HTML);
  	}
              }
            case 262: break;
            case 62: 
              { return createFullSymbol(ParserConstants.T_DNUMBER);
              }
            case 263: break;
            case 63: 
              { return createSymbol(ParserConstants.T_CONCAT_EQUAL);
              }
            case 264: break;
            case 64: 
              { return createSymbol(ParserConstants.T_INC);
              }
            case 265: break;
            case 65: 
              { return createSymbol(ParserConstants.T_PLUS_EQUAL);
              }
            case 266: break;
            case 66: 
              { return createFullSymbol(ParserConstants.T_AS);
              }
            case 267: break;
            case 67: 
              { return createFullSymbol(ParserConstants.T_VARIABLE);
              }
            case 268: break;
            case 68: 
              { return createFullSymbol(ParserConstants.T_CONSTANT_ENCAPSED_STRING);
              }
            case 269: break;
            case 69: 
              { return createFullSymbol(ParserConstants.T_IF);
              }
            case 270: break;
            case 70: 
              { return createFullSymbol(ParserConstants.T_DO);
              }
            case 271: break;
            case 71: 
              { return createFullSymbol(ParserConstants.T_FN);
              }
            case 272: break;
            case 72: 
              { return createFullSymbol(ParserConstants.T_LOGICAL_OR);
              }
            case 273: break;
            case 73: 
              { return createSymbol(ParserConstants.T_DEC);
              }
            case 274: break;
            case 74: 
              { pushState(ST_LOOKING_FOR_PROPERTY);
  	return createSymbol(ParserConstants.T_OBJECT_OPERATOR);
              }
            case 275: break;
            case 75: 
              { return createSymbol(ParserConstants.T_MINUS_EQUAL);
              }
            case 276: break;
            case 76: 
              { return createSymbol(ParserConstants.T_SR);
              }
            case 277: break;
            case 77: 
              { return createSymbol(ParserConstants.T_IS_GREATER_OR_EQUAL);
              }
            case 278: break;
            case 78: 
              { return createSymbol(ParserConstants.T_PAAMAYIM_NEKUDOTAYIM);
              }
            case 279: break;
            case 79: 
              { return createSymbol(ParserConstants.T_DOUBLE_ARROW);
              }
            case 280: break;
            case 80: 
              { return createSymbol(ParserConstants.T_IS_EQUAL);
              }
            case 281: break;
            case 81: 
              { return createSymbol(ParserConstants.T_IS_NOT_EQUAL);
              }
            case 282: break;
            case 82: 
              { return createSymbol(ParserConstants.T_IS_SMALLER_OR_EQUAL);
              }
            case 283: break;
            case 83: 
              { return createSymbol(ParserConstants.T_SL);
              }
            case 284: break;
            case 84: 
              { return createSymbol(ParserConstants.T_MUL_EQUAL);
              }
            case 285: break;
            case 85: 
              { return createSymbol(ParserConstants.T_POW);
              }
            case 286: break;
            case 86: 
              { return createSymbol(ParserConstants.T_DIV_EQUAL);
              }
            case 287: break;
            case 87: 
              { handleCommentStart();
  	yybegin(ST_COMMENT);
              }
            case 288: break;
            case 88: 
              { if (asp_tags) {
  		yybegin(YYINITIAL);
  		return createSymbol(ParserConstants.T_SEMICOLON); /* implicit ';' at php-end tag */
  	} else {
  		return createSymbol(ParserConstants.T_INLINE_HTML);
  	}
              }
            case 289: break;
            case 89: 
              { return createSymbol(ParserConstants.T_MOD_EQUAL);
              }
            case 290: break;
            case 90: 
              { return createSymbol(ParserConstants.T_AND_EQUAL);
              }
            case 291: break;
            case 91: 
              { return createSymbol(ParserConstants.T_BOOLEAN_AND);
              }
            case 292: break;
            case 92: 
              { return createSymbol(ParserConstants.T_OR_EQUAL);
              }
            case 293: break;
            case 93: 
              { return createSymbol(ParserConstants.T_BOOLEAN_OR);
              }
            case 294: break;
            case 94: 
              { return createSymbol(ParserConstants.T_XOR_EQUAL);
              }
            case 295: break;
            case 95: 
              { yybegin(YYINITIAL);
  	return createSymbol(ParserConstants.T_SEMICOLON); /* implicit ';' at php-end tag */
              }
            case 296: break;
            case 96: 
              { return createSymbol(ParserConstants.T_COALESCE);
              }
            case 297: break;
            case 97: 
              { yypushback(1);
  	return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
              }
            case 298: break;
            case 98: 
              { pushState(ST_LOOKING_FOR_VARNAME);
  	return createSymbol(ParserConstants.T_DOLLAR_OPEN_CURLY_BRACES);
              }
            case 299: break;
            case 99: 
              { pushState(ST_IN_SCRIPTING);
  	yypushback(yylength() - 1);
  	return createSymbol(ParserConstants.T_CURLY_OPEN_WITH_DOLAR);
              }
            case 300: break;
            case 100: 
              { return createSymbol(ParserConstants.T_CHARACTER);
              }
            case 301: break;
            case 101: 
              { String yytext = yytext();
  	int textLength = yytext.length();
  	String heredoc = heredocIds.peek();
  	int heredocLength = heredoc.length();
  	if (textLength > heredocLength && yytext.substring(textLength - heredocLength, textLength).equals(heredoc)) {
  		int pos = textLength - heredocLength - 1;
  		char c = yytext.charAt(pos);
  		if (c == ' ' || c == '\t') {
  			while (pos > 0) {
  				char c2 = yytext.charAt(pos - 1);
  				if (c2 != ' ' && c2 != '\t') {
  					break;
  				}
  				pos--;
  			}
  			lastHeredocIndentation = yytext.substring(pos, textLength - heredocLength);
  			// we need to remove the closing label from the symbol value
  			yypushback(heredocLength);
  			yybegin(ST_END_HEREDOC);
  			return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
  		} else if (c == '\n' || c == '\r') {
  			lastHeredocIndentation = ""; //$NON-NLS-1$
  			// we need to remove the closing label from the symbol value
  			yypushback(heredocLength);
  			yybegin(ST_END_HEREDOC);
  			return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
  		}
  	}
              }
            case 302: break;
            case 102: 
              { String yytext = yytext();
  	int textLength = yytext.length();
  	String nowdoc = heredocIds.peek();
  	int nowdocLength = nowdoc.length();
  	if (textLength > nowdocLength && yytext.substring(textLength - nowdocLength, textLength).equals(nowdoc)) {
  		int pos = textLength - nowdocLength - 1;
  		char c = yytext.charAt(pos);
  		if (c == ' ' || c == '\t') {
  			while (pos > 0) {
  				char c2 = yytext.charAt(pos - 1);
  				if (c2 != ' ' && c2 != '\t') {
  					break;
  				}
  				pos--;
  			}
  			lastHeredocIndentation = yytext.substring(pos, textLength - nowdocLength);
  			// we need to remove the closing label from the symbol value
  			yypushback(nowdocLength);
  			yybegin(ST_END_HEREDOC);
  			return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
  		} else if (c == '\n' || c == '\r') {
  			lastHeredocIndentation = ""; //$NON-NLS-1$
  			// we need to remove the closing label from the symbol value
  			yypushback(nowdocLength);
  			yybegin(ST_END_HEREDOC);
  			return createFullSymbol(ParserConstants.T_ENCAPSED_AND_WHITESPACE);
  		}
  	}
              }
            case 303: break;
            case 103: 
              { return createSymbol(ParserConstants.T_OBJECT_OPERATOR);
              }
            case 304: break;
            case 104: 
              { handleMultilineCommentEnd();
  	yybegin(ST_IN_SCRIPTING);
              }
            case 305: break;
            case 105: 
              { handlePHPDocEnd();
  	yybegin(ST_IN_SCRIPTING);
              }
            case 306: break;
            case 106: 
              { if (asp_tags || yytext().charAt(0) != '%') { /* asp comment? */
  		handleLineCommentEnd();
  		yypushback(yylength());
  		yybegin(ST_IN_SCRIPTING);
  	}
              }
            case 307: break;
            case 107: 
              { String yytext = yytext();
  	if ((yytext.charAt(1) == '%' && asp_tags)
  		|| (yytext.charAt(1) == '?')) {
  		yybegin(ST_IN_SCRIPTING);
  		return createSymbol(ParserConstants.T_OPEN_TAG_WITH_ECHO);
  	} else {
  		return createSymbol(ParserConstants.T_INLINE_HTML);
  	}
              }
            case 308: break;
            case 108: 
              { return createSymbol(ParserConstants.T_ELLIPSIS);
              }
            case 309: break;
            case 109: 
              { return createFullSymbol(ParserConstants.T_BNUMBER);
              }
            case 310: break;
            case 110: 
              { return createFullSymbol(ParserConstants.T_LOGICAL_XOR);
              }
            case 311: break;
            case 111: 
              { return createFullSymbol(ParserConstants.T_LOGICAL_AND);
              }
            case 312: break;
            case 112: 
              { return createFullSymbol(ParserConstants.T_TRY);
              }
            case 313: break;
            case 113: 
              { return createFullSymbol(ParserConstants.T_EXIT);
              }
            case 314: break;
            case 114: 
              { return createFullSymbol(ParserConstants.T_FOR);
              }
            case 315: break;
            case 115: 
              { return createFullSymbol(ParserConstants.T_USE);
              }
            case 316: break;
            case 116: 
              { return createFullSymbol(ParserConstants.T_NEW);
              }
            case 317: break;
            case 117: 
              { return createSymbol(ParserConstants.T_SR_EQUAL);
              }
            case 318: break;
            case 118: 
              { return createFullSymbol(ParserConstants.T_VAR);
              }
            case 319: break;
            case 119: 
              { return createSymbol(ParserConstants.T_IS_IDENTICAL);
              }
            case 320: break;
            case 120: 
              { return createSymbol(ParserConstants.T_IS_NOT_IDENTICAL);
              }
            case 321: break;
            case 121: 
              { return createSymbol(ParserConstants.T_SPACESHIP);
              }
            case 322: break;
            case 122: 
              { return createSymbol(ParserConstants.T_SL_EQUAL);
              }
            case 323: break;
            case 123: 
              { return createSymbol(ParserConstants.T_POW_EQUAL);
              }
            case 324: break;
            case 124: 
              { if (parsePHPDoc()) {
  	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=316077
  	// Reset the internal variables caching the values
  	// previously resetted by parsePHPDoc().
  	// Actually it would be enough to only reset zzEndReadL,
  	// but do it cleanly...
  	// Also be careful that those internal variables could
  	// change from one version of JFlex to another.
  	zzCurrentPosL = zzCurrentPos;
  	zzMarkedPosL = zzMarkedPos;
  	zzBufferL = zzBuffer;
  	zzEndReadL = zzEndRead;
  } else {
  	handleCommentStart();
  	yybegin(ST_DOCBLOCK);
  }
              }
            case 325: break;
            case 125: 
              { return createSymbol(ParserConstants.T_COALESCE_EQUAL);
              }
            case 326: break;
            case 126: 
              { yypushback(1);
  	pushState(ST_VAR_OFFSET);
  	return createFullSymbol(ParserConstants.T_VARIABLE);
              }
            case 327: break;
            case 127: 
              { return createFullSymbol(ParserConstants.T_ECHO);
              }
            case 328: break;
            case 128: 
              { return createFullSymbol(ParserConstants.T_ELSE);
              }
            case 329: break;
            case 129: 
              { return createFullSymbol(ParserConstants.T_EVAL);
              }
            case 330: break;
            case 130: 
              { return createFullSymbol(ParserConstants.T_CASE);
              }
            case 331: break;
            case 131: 
              { return createFullSymbol(ParserConstants.T_LIST);
              }
            case 332: break;
            case 132: 
              { return createFullSymbol(ParserConstants.T_GOTO);
              }
            case 333: break;
            case 133: 
              { handleCommentStart();
  	handleMultilineCommentEnd();
              }
            case 334: break;
            case 134: 
              { return createFullSymbol(ParserConstants.T_ENDIF);
              }
            case 335: break;
            case 135: 
              { return createFullSymbol(ParserConstants.T_EMPTY);
              }
            case 336: break;
            case 136: 
              { return createFullSymbol(ParserConstants.T_ARRAY);
              }
            case 337: break;
            case 137: 
              { return createFullSymbol(ParserConstants.T_BREAK);
              }
            case 338: break;
            case 138: 
              { return createFullSymbol(ParserConstants.T_ISSET);
              }
            case 339: break;
            case 139: 
              { return createFullSymbol(ParserConstants.T_TRAIT);
              }
            case 340: break;
            case 140: 
              { return createFullSymbol(ParserConstants.T_THROW);
              }
            case 341: break;
            case 141: 
              { return createFullSymbol(ParserConstants.T_FINAL);
              }
            case 342: break;
            case 142: 
              { return createFullSymbol(ParserConstants.T_UNSET);
              }
            case 343: break;
            case 143: 
              { return createFullSymbol(ParserConstants.T_CATCH);
              }
            case 344: break;
            case 144: 
              { return createFullSymbol(ParserConstants.T_CONST);
              }
            case 345: break;
            case 145: 
              { return createFullSymbol(ParserConstants.T_CLASS);
              }
            case 346: break;
            case 146: 
              { return createFullSymbol(ParserConstants.T_CLONE);
              }
            case 347: break;
            case 147: 
              { return createFullSymbol(ParserConstants.T_YIELD);
              }
            case 348: break;
            case 148: 
              { return createFullSymbol(ParserConstants.T_WHILE);
              }
            case 349: break;
            case 149: 
              { return createFullSymbol(ParserConstants.T_PRINT);
              }
            case 350: break;
            case 150: 
              { return createSymbol(ParserConstants.T_INT_CAST);
              }
            case 351: break;
            case 151: 
              { String yytext = yytext();
  	int removeChars = (yytext.charAt(0) == 'b') ? 4 : 3;
  	String hereOrNowDoc = yytext.substring(removeChars).trim();    // for 'b<<<' or '<<<'
  	int heredoc_len = hereOrNowDoc.length();
  
  	Symbol sym = createFullSymbol(ParserConstants.T_START_HEREDOC);
  	sym.value = hereOrNowDoc;
  
  	if (hereOrNowDoc.charAt(0) == '\'') {
  		heredocIds.push(hereOrNowDoc.substring(1, heredoc_len - 1));
  		yybegin(ST_START_NOWDOC);
  	} else if (hereOrNowDoc.charAt(0) == '"') {
  		heredocIds.push(hereOrNowDoc.substring(1, heredoc_len - 1));
  		yybegin(ST_START_HEREDOC);
  	} else {
  		heredocIds.push(hereOrNowDoc);
  		yybegin(ST_START_HEREDOC);
  	}
  	return sym;
              }
            case 352: break;
            case 152: 
              { yypushback(3);
  	pushState(ST_LOOKING_FOR_PROPERTY);
  	return createFullSymbol(ParserConstants.T_VARIABLE);
              }
            case 353: break;
            case 153: 
              { yybegin(ST_IN_SCRIPTING);
  	//return T_OPEN_TAG;
              }
            case 354: break;
            case 154: 
              { return createFullSymbol(ParserConstants.T_ENDFOR);
              }
            case 355: break;
            case 155: 
              { return createFullSymbol(ParserConstants.T_ELSEIF);
              }
            case 356: break;
            case 156: 
              { /* not a keyword, used to recognize constants.*/
  	return createFullSymbol(ParserConstants.T_DEFINE);
              }
            case 357: break;
            case 157: 
              { return createFullSymbol(ParserConstants.T_STATIC);
              }
            case 358: break;
            case 158: 
              { return createFullSymbol(ParserConstants.T_SWITCH);
              }
            case 359: break;
            case 159: 
              { return createFullSymbol(ParserConstants.T_RETURN);
              }
            case 360: break;
            case 160: 
              { return createFullSymbol(ParserConstants.T_GLOBAL);
              }
            case 361: break;
            case 161: 
              { return createFullSymbol(ParserConstants.T_PUBLIC);
              }
            case 362: break;
            case 162: 
              { return createSymbol(ParserConstants.T_BOOL_CAST);
              }
            case 363: break;
            case 163: 
              { return createSymbol(ParserConstants.T_DOUBLE_CAST);
              }
            case 364: break;
            case 164: 
              { return createSymbol(ParserConstants.T_DIR);
              }
            case 365: break;
            case 165: 
              { return createFullSymbol(ParserConstants.T_EXTENDS);
              }
            case 366: break;
            case 166: 
              { return createFullSymbol(ParserConstants.T_INCLUDE);
              }
            case 367: break;
            case 167: 
              { return createFullSymbol(ParserConstants.T_DEFAULT);
              }
            case 368: break;
            case 168: 
              { return createFullSymbol(ParserConstants.T_DECLARE);
              }
            case 369: break;
            case 169: 
              { return createFullSymbol(ParserConstants.T_FINALLY);
              }
            case 370: break;
            case 170: 
              { return createFullSymbol(ParserConstants.T_FOREACH);
              }
            case 371: break;
            case 171: 
              { return createFullSymbol(ParserConstants.T_REQUIRE);
              }
            case 372: break;
            case 172: 
              { return createFullSymbol(ParserConstants.T_PRIVATE);
              }
            case 373: break;
            case 173: 
              { return createSymbol(ParserConstants.T_ARRAY_CAST);
              }
            case 374: break;
            case 174: 
              { return createSymbol(ParserConstants.T_UNSET_CAST);
              }
            case 375: break;
            case 175: 
              { return createSymbol(ParserConstants.T_FILE);
              }
            case 376: break;
            case 176: 
              { return createSymbol(ParserConstants.T_LINE);
              }
            case 377: break;
            case 177: 
              { return createFullSymbol(ParserConstants.T_ENDWHILE);
              }
            case 378: break;
            case 178: 
              { return createFullSymbol(ParserConstants.T_ABSTRACT);
              }
            case 379: break;
            case 179: 
              { return createFullSymbol(ParserConstants.T_FUNCTION);
              }
            case 380: break;
            case 180: 
              { return createFullSymbol(ParserConstants.T_CALLABLE);
              }
            case 381: break;
            case 181: 
              { return createFullSymbol(ParserConstants.T_CONTINUE);
              }
            case 382: break;
            case 182: 
              { return createSymbol(ParserConstants.T_STRING_CAST);
              }
            case 383: break;
            case 183: 
              { return createSymbol(ParserConstants.T_OBJECT_CAST);
              }
            case 384: break;
            case 184: 
              { return createSymbol(ParserConstants.T_CLASS_C);
              }
            case 385: break;
            case 185: 
              { return createFullSymbol(ParserConstants.T_ENDSWITCH);
              }
            case 386: break;
            case 186: 
              { return createFullSymbol(ParserConstants.T_INTERFACE);
              }
            case 387: break;
            case 187: 
              { return createFullSymbol(ParserConstants.T_INSTEADOF);
              }
            case 388: break;
            case 188: 
              { return createFullSymbol(ParserConstants.T_NAMESPACE);
              }
            case 389: break;
            case 189: 
              { return createFullSymbol(ParserConstants.T_PROTECTED);
              }
            case 390: break;
            case 190: 
              { return createSymbol(ParserConstants.T_METHOD_C);
              }
            case 391: break;
            case 191: 
              { return createFullSymbol(ParserConstants.T_ENDDECLARE);
              }
            case 392: break;
            case 192: 
              { return createFullSymbol(ParserConstants.T_ENDFOREACH);
              }
            case 393: break;
            case 193: 
              { return createFullSymbol(ParserConstants.T_INSTANCEOF);
              }
            case 394: break;
            case 194: 
              { return createFullSymbol(ParserConstants.T_IMPLEMENTS);
              }
            case 395: break;
            case 195: 
              { return createSymbol(ParserConstants.T_YIELD_FROM);
              }
            case 396: break;
            case 196: 
              { return createSymbol(ParserConstants.T_FUNC_C);
              }
            case 397: break;
            case 197: 
              { return createFullSymbol(ParserConstants.T_INCLUDE_ONCE);
              }
            case 398: break;
            case 198: 
              { return createFullSymbol(ParserConstants.T_REQUIRE_ONCE);
              }
            case 399: break;
            case 199: 
              { return createSymbol(ParserConstants.T_NS_C);
              }
            case 400: break;
            case 200: 
              { handleCommentStart();
  	handleVarComment();
  	//return createFullSymbol(ParserConstants.T_VAR_COMMENT);
              }
            case 401: break;
            case 201: 
              { return createSymbol(ParserConstants.T_HALT_COMPILER);
              }
            case 402: break;
  		default:
              zzScanError(ZZ_NO_MATCH);
  				}
  			}
  		}
  	}
  
    /**
     * Runs the scanner on input files.
     *
     * This is a standalone scanner, it will print any unmatched
     * text to System.out unchanged.
     *
     * @param argv   the command line, contains the filenames to run
     *               the scanner on.
     */
    public static void main(String argv[]) {
      if (argv.length == 0) {
        System.out.println("Usage : java PHPAstLexer [ --encoding <name> ] <inputfile(s)>");
      }
      else {
        int firstFilePos = 0;
        String encodingName = "UTF-8";
        if (argv[0].equals("--encoding")) {
          firstFilePos = 2;
          encodingName = argv[1];
          try {
            java.nio.charset.Charset.forName(encodingName); // Side-effect: is encodingName valid? 
          } catch (Exception e) {
            System.out.println("Invalid encoding '" + encodingName + "'");
            return;
          }
        }
        for (int i = firstFilePos; i < argv.length; i++) {
          PHPAstLexer scanner = null;
          try {
            java.io.FileInputStream stream = new java.io.FileInputStream(argv[i]);
            java.io.Reader reader = new java.io.InputStreamReader(stream, encodingName);
            scanner = new PHPAstLexer(reader);
            while ( !scanner.zzAtEOF ) scanner.next_token();
          }
          catch (java.io.FileNotFoundException e) {
            System.out.println("File not found : \""+argv[i]+"\"");
          }
          catch (java.io.IOException e) {
            System.out.println("IO error scanning file \""+argv[i]+"\"");
            System.out.println(e);
          }
          catch (Exception e) {
            System.out.println("Unexpected exception:");
            e.printStackTrace();
          }
        }
      }
    }
  
  
  }
  