You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@netbeans.apache.org by GitBox <gi...@apache.org> on 2018/09/20 08:06:46 UTC

[GitHub] tmysik closed pull request #889: [NETBEANS-946] PHP 7.3 support (Flexible Heredoc and Nowdoc Syntaxes)

tmysik closed pull request #889:  [NETBEANS-946] PHP 7.3 support (Flexible Heredoc and Nowdoc Syntaxes)
URL: https://github.com/apache/incubator-netbeans/pull/889
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java b/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java
index b9bb77661a..56b02612f7 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/lexer/PHP5ColoringLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 17/07/11 14:07 */
+/* The following code was generated by JFlex 1.4.3 on 18/09/19 21:14 */
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -30,8 +30,8 @@
 /**
  * This class is a scanner generated by
  * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 17/07/11 14:07 from the specification file
- * <tt>/home/junichi11/hg/web-main/php.editor/tools/Php5ColoringScanner.flex</tt>
+ * on 18/09/19 21:14 from the specification file
+ * <tt>/home/junichi11/NetBeansProjects/incubator-netbeans/php/php.editor/tools/Php5ColoringScanner.flex</tt>
  */
 public class PHP5ColoringLexer {
 
@@ -186,47 +186,47 @@
     "\1\14\14\6\1\4\23\5\1\2\1\4\1\15\2\5"+
     "\1\4\2\5\1\16\1\17\1\20\1\21\1\22\2\21"+
     "\1\20\3\21\3\23\1\24\1\23\4\21\1\2\1\21"+
-    "\2\25\3\2\1\0\1\2\2\26\1\2\1\27\1\30"+
-    "\1\27\1\31\2\32\1\3\1\33\1\3\1\34\1\33"+
-    "\1\35\4\0\4\36\2\37\1\40\1\41\1\42\1\0"+
-    "\1\43\1\44\1\0\1\3\2\0\6\5\1\45\2\0"+
-    "\4\5\1\0\1\5\1\0\1\46\2\0\1\21\2\0"+
-    "\2\6\1\0\1\47\1\50\1\51\1\52\4\5\1\53"+
-    "\4\5\1\54\1\5\1\55\33\5\13\0\2\5\1\56"+
-    "\1\5\3\0\2\57\2\60\1\61\1\62\1\60\3\0"+
-    "\1\57\2\60\1\63\1\64\3\0\1\21\2\0\1\65"+
-    "\2\0\1\66\7\0\1\67\2\0\1\70\1\0\1\71"+
-    "\2\0\1\72\1\57\1\0\1\73\1\0\1\74\1\75"+
-    "\1\36\1\76\1\77\3\0\7\5\2\3\1\100\3\5"+
-    "\1\0\1\5\3\0\4\5\1\101\4\5\1\102\3\5"+
-    "\1\103\5\5\1\104\13\5\1\105\14\5\1\106\12\0"+
-    "\12\5\3\107\1\110\1\0\1\111\1\0\1\112\1\21"+
-    "\1\0\1\113\1\0\1\113\1\0\1\114\1\115\1\36"+
-    "\2\0\1\116\6\5\1\117\1\120\1\121\6\5\4\0"+
-    "\1\122\5\5\1\123\11\5\1\124\2\5\1\125\1\5"+
-    "\1\126\3\5\1\127\1\5\1\130\1\131\4\5\1\132"+
-    "\10\5\12\0\13\5\1\110\1\0\1\36\1\133\1\0"+
-    "\3\5\1\134\3\5\1\135\1\5\1\136\1\137\1\5"+
-    "\1\140\2\141\3\0\3\5\1\142\10\5\1\143\1\5"+
-    "\1\144\1\145\1\146\6\5\1\147\1\150\1\5\1\151"+
-    "\1\152\1\5\1\153\3\5\1\154\10\0\1\155\1\0"+
-    "\1\156\1\157\11\5\1\36\1\0\1\5\1\160\3\5"+
-    "\1\161\3\5\3\0\1\162\13\5\1\163\1\164\1\165"+
-    "\1\166\1\167\4\5\1\170\1\171\5\0\11\5\1\36"+
-    "\1\1\1\172\4\5\1\173\1\174\1\5\2\175\1\0"+
-    "\1\176\2\5\1\177\1\200\3\5\1\201\5\5\1\202"+
-    "\3\0\3\5\1\203\5\5\1\36\1\0\3\5\1\204"+
-    "\1\205\1\0\1\5\1\206\5\5\1\207\1\5\1\210"+
-    "\1\211\1\5\1\0\1\212\3\5\1\213\3\5\1\36"+
-    "\1\0\2\5\1\214\1\42\1\5\1\215\1\216\1\217"+
-    "\3\5\1\220\1\0\2\5\1\221\1\222\2\5\1\36"+
-    "\1\0\1\223\1\224\1\5\1\225\1\5\1\226\1\227"+
-    "\3\5\1\230\1\36\1\0\5\5\1\0\1\231\1\232"+
-    "\1\233\2\5\1\0\1\234\1\5\1\0\1\5\1\0"+
-    "\1\235\14\0\1\236\1\0";
+    "\1\25\1\26\1\25\1\27\1\2\1\30\1\2\2\30"+
+    "\3\31\1\32\1\0\2\2\1\33\1\34\1\33\1\35"+
+    "\2\36\1\3\1\37\1\3\1\40\1\37\1\41\4\0"+
+    "\4\42\2\43\1\44\1\45\1\46\1\0\1\47\1\50"+
+    "\1\0\1\3\2\0\6\5\1\51\2\0\4\5\1\0"+
+    "\1\5\1\0\1\52\2\0\1\21\2\0\2\6\1\0"+
+    "\1\53\1\54\1\55\1\56\4\5\1\57\4\5\1\60"+
+    "\1\5\1\61\33\5\13\0\2\5\1\62\1\5\3\0"+
+    "\2\63\2\64\1\65\1\66\1\64\3\0\1\63\2\64"+
+    "\1\67\1\70\3\0\1\71\1\0\1\26\1\0\1\27"+
+    "\3\0\1\72\1\0\1\30\2\73\1\0\1\32\1\0"+
+    "\1\74\2\0\1\75\1\63\1\0\1\76\1\0\1\77"+
+    "\1\100\1\42\1\101\1\102\3\0\7\5\2\3\1\103"+
+    "\3\5\1\0\1\5\3\0\4\5\1\104\4\5\1\105"+
+    "\3\5\1\106\5\5\1\107\13\5\1\110\14\5\1\111"+
+    "\12\0\12\5\3\112\1\113\1\0\1\114\1\0\1\71"+
+    "\1\72\1\115\1\116\1\42\2\0\1\117\6\5\1\120"+
+    "\1\121\1\122\6\5\4\0\1\123\5\5\1\124\11\5"+
+    "\1\125\2\5\1\126\1\5\1\127\3\5\1\130\1\5"+
+    "\1\131\1\132\4\5\1\133\10\5\12\0\13\5\1\113"+
+    "\1\42\1\134\1\0\3\5\1\135\3\5\1\136\1\5"+
+    "\1\137\1\140\1\5\1\141\2\142\3\0\3\5\1\143"+
+    "\10\5\1\144\1\5\1\145\1\146\1\147\6\5\1\150"+
+    "\1\151\1\5\1\152\1\153\1\5\1\154\3\5\1\155"+
+    "\10\0\1\156\1\0\1\157\1\160\11\5\1\42\1\0"+
+    "\1\5\1\161\3\5\1\162\3\5\3\0\1\163\13\5"+
+    "\1\164\1\165\1\166\1\167\1\170\4\5\1\171\1\172"+
+    "\5\0\11\5\1\42\1\1\1\173\4\5\1\174\1\175"+
+    "\1\5\2\176\1\0\1\177\2\5\1\200\1\201\3\5"+
+    "\1\202\5\5\1\203\3\0\3\5\1\204\5\5\1\42"+
+    "\1\0\3\5\1\205\1\206\1\0\1\5\1\207\5\5"+
+    "\1\210\1\5\1\211\1\212\1\5\1\0\1\213\3\5"+
+    "\1\214\3\5\1\42\1\0\2\5\1\215\1\46\1\5"+
+    "\1\216\1\217\1\220\3\5\1\221\1\0\2\5\1\222"+
+    "\1\223\2\5\1\42\1\0\1\224\1\225\1\5\1\226"+
+    "\1\5\1\227\1\230\3\5\1\231\1\42\1\0\5\5"+
+    "\1\0\1\232\1\233\1\234\2\5\1\0\1\235\1\5"+
+    "\1\0\1\5\1\0\1\236\14\0\1\237\1\0";
 
   private static int [] zzUnpackAction() {
-    int [] result = new int[735];
+    int [] result = new int[732];
     int offset = 0;
     offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
     return result;
@@ -264,88 +264,88 @@ private static int zzUnpackAction(String packed, int offset, int [] result) {
     "\0\u17ab\0\u0775\0\u0775\0\u17fe\0\u1851\0\u0775\0\u18a4\0\u18f7"+
     "\0\u194a\0\u199d\0\u19f0\0\u1a43\0\u0775\0\u1a96\0\u1ae9\0\u1b3c"+
     "\0\u1b8f\0\u1be2\0\u1c35\0\u1c88\0\u1cdb\0\u1d2e\0\u1ae9\0\u0775"+
-    "\0\u1d81\0\u1dd4\0\u1e27\0\u1e7a\0\u1ecd\0\u1ecd\0\u0775\0\u1f20"+
-    "\0\u1f73\0\u0775\0\u1fc6\0\u2019\0\u0775\0\u0775\0\u206c\0\u20bf"+
-    "\0\u0775\0\u2112\0\u0775\0\u2165\0\u0775\0\u21b8\0\u220b\0\u225e"+
-    "\0\u22b1\0\u2304\0\u0775\0\u2357\0\u23aa\0\u23fd\0\u2450\0\u0775"+
-    "\0\u24a3\0\u067c\0\u24f6\0\u2549\0\u259c\0\u25ef\0\u2642\0\u2695"+
-    "\0\u26e8\0\u273b\0\u278e\0\u27e1\0\u2834\0\u2887\0\u28da\0\u0775"+
-    "\0\u292d\0\u2980\0\u29d3\0\u2a26\0\u2a79\0\u2acc\0\u2b1f\0\u2b72"+
-    "\0\u15b9\0\u2bc5\0\u0b59\0\u2c18\0\u0775\0\u2c6b\0\u2cbe\0\u2d11"+
-    "\0\u2d64\0\u2db7\0\u2e0a\0\u2e5d\0\u2eb0\0\u0a60\0\u2f03\0\u2f56"+
-    "\0\u2fa9\0\u2ffc\0\u0a60\0\u304f\0\u30a2\0\u30f5\0\u3148\0\u0a60"+
-    "\0\u319b\0\u0a60\0\u31ee\0\u3241\0\u3294\0\u32e7\0\u333a\0\u338d"+
+    "\0\u1d81\0\u1dd4\0\u1e27\0\u1e7a\0\u1ecd\0\u1f20\0\u1f73\0\u1fc6"+
+    "\0\u0775\0\u2019\0\u206c\0\u20bf\0\u2112\0\u2165\0\u2112\0\u0775"+
+    "\0\u21b8\0\u220b\0\u0775\0\u0775\0\u225e\0\u22b1\0\u0775\0\u2304"+
+    "\0\u0775\0\u2357\0\u0775\0\u23aa\0\u23fd\0\u2450\0\u24a3\0\u24f6"+
+    "\0\u0775\0\u2549\0\u259c\0\u25ef\0\u2642\0\u0775\0\u2695\0\u067c"+
+    "\0\u26e8\0\u273b\0\u278e\0\u27e1\0\u2834\0\u2887\0\u28da\0\u292d"+
+    "\0\u2980\0\u29d3\0\u2a26\0\u2a79\0\u2acc\0\u0775\0\u2b1f\0\u2b72"+
+    "\0\u2bc5\0\u2c18\0\u2c6b\0\u2cbe\0\u2d11\0\u2d64\0\u15b9\0\u2db7"+
+    "\0\u0b59\0\u2e0a\0\u0775\0\u2e5d\0\u2eb0\0\u2f03\0\u2f56\0\u2fa9"+
+    "\0\u2ffc\0\u304f\0\u30a2\0\u0a60\0\u30f5\0\u3148\0\u319b\0\u31ee"+
+    "\0\u0a60\0\u3241\0\u3294\0\u32e7\0\u333a\0\u0a60\0\u338d\0\u0a60"+
     "\0\u33e0\0\u3433\0\u3486\0\u34d9\0\u352c\0\u357f\0\u35d2\0\u3625"+
     "\0\u3678\0\u36cb\0\u371e\0\u3771\0\u37c4\0\u3817\0\u386a\0\u38bd"+
     "\0\u3910\0\u3963\0\u39b6\0\u3a09\0\u3a5c\0\u3aaf\0\u3b02\0\u3b55"+
-    "\0\u160c\0\u3ba8\0\u3bfb\0\u3c4e\0\u3ca1\0\u3cf4\0\u3d47\0\u3d9a"+
-    "\0\u3ded\0\u3e40\0\u0775\0\u3e93\0\u3ee6\0\u18a4\0\u3f39\0\u3f8c"+
-    "\0\u3fdf\0\u3ee6\0\u0775\0\u0775\0\u0775\0\u3f39\0\u4032\0\u19f0"+
-    "\0\u4085\0\u40d8\0\u4032\0\u4085\0\u0775\0\u0775\0\u412b\0\u417e"+
-    "\0\u41d1\0\u4224\0\u4277\0\u1d81\0\u0775\0\u42ca\0\u1dd4\0\u0775"+
-    "\0\u431d\0\u1e27\0\u1e7a\0\u4370\0\u43c3\0\u4416\0\u1f20\0\u0775"+
-    "\0\u4469\0\u1f73\0\u0775\0\u44bc\0\u0775\0\u206c\0\u450f\0\u0775"+
-    "\0\u4562\0\u45b5\0\u0775\0\u4608\0\u0775\0\u0775\0\u465b\0\u46ae"+
-    "\0\u0775\0\u4701\0\u4754\0\u20bf\0\u47a7\0\u47fa\0\u484d\0\u48a0"+
-    "\0\u48f3\0\u4946\0\u4999\0\u292d\0\u2980\0\u49ec\0\u4a3f\0\u4a92"+
-    "\0\u4ae5\0\u4b38\0\u4b8b\0\u4bde\0\u4c31\0\u4c84\0\u4cd7\0\u4d2a"+
-    "\0\u4d7d\0\u4dd0\0\u0a60\0\u4e23\0\u4e76\0\u4ec9\0\u4f1c\0\u0a60"+
-    "\0\u4f6f\0\u4fc2\0\u5015\0\u4f6f\0\u5068\0\u50bb\0\u510e\0\u5161"+
-    "\0\u51b4\0\u0a60\0\u5207\0\u525a\0\u52ad\0\u5300\0\u5353\0\u53a6"+
-    "\0\u53f9\0\u544c\0\u549f\0\u54f2\0\u5545\0\u0a60\0\u5598\0\u55eb"+
-    "\0\u563e\0\u5691\0\u56e4\0\u5737\0\u578a\0\u57dd\0\u5830\0\u5883"+
-    "\0\u58d6\0\u5929\0\u0a60\0\u597c\0\u59cf\0\u5a22\0\u5a75\0\u5ac8"+
-    "\0\u5b1b\0\u5b6e\0\u5bc1\0\u5c14\0\u5c67\0\u5cba\0\u5d0d\0\u5d60"+
-    "\0\u5db3\0\u5e06\0\u5e59\0\u5eac\0\u5eff\0\u5f52\0\u5fa5\0\u0775"+
-    "\0\u17fe\0\u194a\0\u5ff8\0\u604b\0\u0775\0\u609e\0\u0775\0\u60f1"+
-    "\0\u6144\0\u0775\0\u6197\0\u1ecd\0\u61ea\0\u0775\0\u0775\0\u623d"+
-    "\0\u6290\0\u62e3\0\u0a60\0\u6336\0\u6389\0\u63dc\0\u642f\0\u6482"+
-    "\0\u64d5\0\u6528\0\u0a60\0\u0a60\0\u657b\0\u65ce\0\u6621\0\u6674"+
-    "\0\u66c7\0\u671a\0\u676d\0\u67c0\0\u6813\0\u6866\0\u4c84\0\u68b9"+
-    "\0\u690c\0\u695f\0\u69b2\0\u6a05\0\u0a60\0\u6a58\0\u6aab\0\u6afe"+
-    "\0\u6b51\0\u6ba4\0\u6bf7\0\u6c4a\0\u6c9d\0\u6cf0\0\u0a60\0\u6d43"+
-    "\0\u6d96\0\u0a60\0\u6de9\0\u0a60\0\u6e3c\0\u6e8f\0\u6ee2\0\u0a60"+
-    "\0\u6f35\0\u0a60\0\u0a60\0\u6f88\0\u6fdb\0\u702e\0\u7081\0\u0a60"+
+    "\0\u3ba8\0\u3bfb\0\u3c4e\0\u3ca1\0\u3cf4\0\u3d47\0\u160c\0\u3d9a"+
+    "\0\u3ded\0\u3e40\0\u3e93\0\u3ee6\0\u3f39\0\u3f8c\0\u3fdf\0\u4032"+
+    "\0\u0775\0\u4085\0\u40d8\0\u18a4\0\u412b\0\u417e\0\u41d1\0\u40d8"+
+    "\0\u0775\0\u0775\0\u0775\0\u412b\0\u4224\0\u19f0\0\u4277\0\u42ca"+
+    "\0\u4224\0\u4277\0\u0775\0\u0775\0\u431d\0\u4370\0\u43c3\0\u4416"+
+    "\0\u4469\0\u0775\0\u1dd4\0\u0775\0\u1e7a\0\u1f20\0\u1ecd\0\u44bc"+
+    "\0\u450f\0\u4562\0\u2019\0\u0775\0\u206c\0\u0775\0\u2165\0\u0775"+
+    "\0\u225e\0\u45b5\0\u0775\0\u4608\0\u465b\0\u0775\0\u46ae\0\u0775"+
+    "\0\u0775\0\u4701\0\u4754\0\u0775\0\u47a7\0\u47fa\0\u22b1\0\u484d"+
+    "\0\u48a0\0\u48f3\0\u4946\0\u4999\0\u49ec\0\u4a3f\0\u2b1f\0\u2b72"+
+    "\0\u4a92\0\u4ae5\0\u4b38\0\u4b8b\0\u4bde\0\u4c31\0\u4c84\0\u4cd7"+
+    "\0\u4d2a\0\u4d7d\0\u4dd0\0\u4e23\0\u4e76\0\u0a60\0\u4ec9\0\u4f1c"+
+    "\0\u4f6f\0\u4fc2\0\u0a60\0\u5015\0\u5068\0\u50bb\0\u5015\0\u510e"+
+    "\0\u5161\0\u51b4\0\u5207\0\u525a\0\u0a60\0\u52ad\0\u5300\0\u5353"+
+    "\0\u53a6\0\u53f9\0\u544c\0\u549f\0\u54f2\0\u5545\0\u5598\0\u55eb"+
+    "\0\u0a60\0\u563e\0\u5691\0\u56e4\0\u5737\0\u578a\0\u57dd\0\u5830"+
+    "\0\u5883\0\u58d6\0\u5929\0\u597c\0\u59cf\0\u0a60\0\u5a22\0\u5a75"+
+    "\0\u5ac8\0\u5b1b\0\u5b6e\0\u5bc1\0\u5c14\0\u5c67\0\u5cba\0\u5d0d"+
+    "\0\u5d60\0\u5db3\0\u5e06\0\u5e59\0\u5eac\0\u5eff\0\u5f52\0\u5fa5"+
+    "\0\u5ff8\0\u604b\0\u0775\0\u17fe\0\u194a\0\u609e\0\u60f1\0\u0775"+
+    "\0\u6144\0\u0775\0\u0775\0\u0775\0\u0775\0\u6197\0\u61ea\0\u623d"+
+    "\0\u0a60\0\u6290\0\u62e3\0\u6336\0\u6389\0\u63dc\0\u642f\0\u6482"+
+    "\0\u0a60\0\u0a60\0\u64d5\0\u6528\0\u657b\0\u65ce\0\u6621\0\u6674"+
+    "\0\u66c7\0\u671a\0\u676d\0\u67c0\0\u4d2a\0\u6813\0\u6866\0\u68b9"+
+    "\0\u690c\0\u695f\0\u0a60\0\u69b2\0\u6a05\0\u6a58\0\u6aab\0\u6afe"+
+    "\0\u6b51\0\u6ba4\0\u6bf7\0\u6c4a\0\u0a60\0\u6c9d\0\u6cf0\0\u0a60"+
+    "\0\u6d43\0\u0a60\0\u6d96\0\u6de9\0\u6e3c\0\u0a60\0\u6e8f\0\u0a60"+
+    "\0\u0a60\0\u6ee2\0\u6f35\0\u6f88\0\u6fdb\0\u0a60\0\u702e\0\u7081"+
     "\0\u70d4\0\u7127\0\u717a\0\u71cd\0\u7220\0\u7273\0\u72c6\0\u7319"+
     "\0\u736c\0\u73bf\0\u7412\0\u7465\0\u74b8\0\u750b\0\u755e\0\u75b1"+
     "\0\u7604\0\u7657\0\u76aa\0\u76fd\0\u7750\0\u77a3\0\u77f6\0\u7849"+
-    "\0\u789c\0\u78ef\0\u7942\0\u7995\0\u79e8\0\u0775\0\u7a3b\0\u7a8e"+
-    "\0\u0775\0\u7ae1\0\u7b34\0\u7b87\0\u7bda\0\u0a60\0\u7c2d\0\u7c80"+
-    "\0\u7cd3\0\u0a60\0\u7d26\0\u0a60\0\u7d79\0\u7dcc\0\u0a60\0\u0775"+
-    "\0\u7e1f\0\u7e72\0\u7ec5\0\u7f18\0\u7f6b\0\u7fbe\0\u8011\0\u0a60"+
-    "\0\u8064\0\u80b7\0\u810a\0\u815d\0\u81b0\0\u8203\0\u8256\0\u82a9"+
-    "\0\u0a60\0\u82fc\0\u0a60\0\u0a60\0\u0a60\0\u834f\0\u83a2\0\u83f5"+
-    "\0\u8448\0\u849b\0\u84ee\0\u0a60\0\u0a60\0\u8541\0\u0a60\0\u0a60"+
-    "\0\u8594\0\u0a60\0\u85e7\0\u863a\0\u868d\0\u0a60\0\u86e0\0\u8733"+
-    "\0\u8786\0\u87d9\0\u882c\0\u887f\0\u88d2\0\u8925\0\u0775\0\u8978"+
-    "\0\u89cb\0\u0a60\0\u8a1e\0\u8a71\0\u8ac4\0\u8b17\0\u8b6a\0\u8bbd"+
-    "\0\u8c10\0\u8c63\0\u8cb6\0\u8d09\0\u8d5c\0\u8daf\0\u8e02\0\u8e55"+
-    "\0\u8ea8\0\u8efb\0\u0a60\0\u8f4e\0\u8fa1\0\u8ff4\0\u9047\0\u909a"+
-    "\0\u90ed\0\u0a60\0\u9140\0\u9193\0\u91e6\0\u9239\0\u928c\0\u92df"+
-    "\0\u9332\0\u9385\0\u93d8\0\u942b\0\u947e\0\u0a60\0\u0a60\0\u0a60"+
-    "\0\u0a60\0\u0a60\0\u94d1\0\u9524\0\u9577\0\u95ca\0\u0a60\0\u0a60"+
+    "\0\u789c\0\u78ef\0\u7942\0\u0775\0\u7995\0\u0775\0\u79e8\0\u7a3b"+
+    "\0\u7a8e\0\u7ae1\0\u0a60\0\u7b34\0\u7b87\0\u7bda\0\u0a60\0\u7c2d"+
+    "\0\u0a60\0\u7c80\0\u7cd3\0\u0a60\0\u0775\0\u7d26\0\u7d79\0\u7dcc"+
+    "\0\u7e1f\0\u7e72\0\u7ec5\0\u7f18\0\u0a60\0\u7f6b\0\u7fbe\0\u8011"+
+    "\0\u8064\0\u80b7\0\u810a\0\u815d\0\u81b0\0\u0a60\0\u8203\0\u0a60"+
+    "\0\u0a60\0\u0a60\0\u8256\0\u82a9\0\u82fc\0\u834f\0\u83a2\0\u83f5"+
+    "\0\u0a60\0\u0a60\0\u8448\0\u0a60\0\u0a60\0\u849b\0\u0a60\0\u84ee"+
+    "\0\u8541\0\u8594\0\u0a60\0\u85e7\0\u863a\0\u868d\0\u86e0\0\u8733"+
+    "\0\u8786\0\u87d9\0\u882c\0\u0775\0\u887f\0\u88d2\0\u0a60\0\u8925"+
+    "\0\u8978\0\u89cb\0\u8a1e\0\u8a71\0\u8ac4\0\u8b17\0\u8b6a\0\u8bbd"+
+    "\0\u8c10\0\u8c63\0\u8cb6\0\u8d09\0\u8d5c\0\u8daf\0\u8e02\0\u0a60"+
+    "\0\u8e55\0\u8ea8\0\u8efb\0\u8f4e\0\u8fa1\0\u8ff4\0\u0a60\0\u9047"+
+    "\0\u909a\0\u90ed\0\u9140\0\u9193\0\u91e6\0\u9239\0\u928c\0\u92df"+
+    "\0\u9332\0\u9385\0\u0a60\0\u0a60\0\u0a60\0\u0a60\0\u0a60\0\u93d8"+
+    "\0\u942b\0\u947e\0\u94d1\0\u0a60\0\u0a60\0\u9524\0\u9577\0\u95ca"+
     "\0\u961d\0\u9670\0\u96c3\0\u9716\0\u9769\0\u97bc\0\u980f\0\u9862"+
-    "\0\u98b5\0\u9908\0\u995b\0\u99ae\0\u9a01\0\u9a54\0\u9aa7\0\u9afa"+
-    "\0\u0a60\0\u9b4d\0\u9ba0\0\u9bf3\0\u9c46\0\u0a60\0\u0a60\0\u9c99"+
-    "\0\u0775\0\u9cec\0\u9d3f\0\u9d92\0\u9de5\0\u9e38\0\u0a60\0\u0a60"+
-    "\0\u9e8b\0\u9ede\0\u9f31\0\u9f84\0\u9fd7\0\ua02a\0\ua07d\0\ua0d0"+
-    "\0\ua123\0\u0a60\0\ua176\0\ua1c9\0\ua21c\0\ua26f\0\ua2c2\0\ua315"+
-    "\0\u0a60\0\ua368\0\ua3bb\0\ua40e\0\ua461\0\ua4b4\0\ua507\0\ua55a"+
-    "\0\ua5ad\0\ua600\0\ua653\0\u0a60\0\u0a60\0\ua6a6\0\ua6f9\0\u0a60"+
-    "\0\ua74c\0\ua79f\0\ua7f2\0\ua845\0\ua898\0\u0a60\0\ua8eb\0\u0a60"+
-    "\0\u0a60\0\ua93e\0\ua991\0\u0a60\0\ua9e4\0\uaa37\0\uaa8a\0\u0a60"+
-    "\0\uaadd\0\uab30\0\uab83\0\uabd6\0\uac29\0\uac7c\0\uaccf\0\u0a60"+
-    "\0\uad22\0\uad75\0\u0a60\0\u0a60\0\u0a60\0\uadc8\0\uae1b\0\uae6e"+
-    "\0\u0a60\0\uaec1\0\uaf14\0\uaf67\0\u0a60\0\u0a60\0\uafba\0\ub00d"+
-    "\0\ub060\0\ub0b3\0\u0a60\0\u0a60\0\ub106\0\u0a60\0\ub159\0\u0a60"+
-    "\0\u0775\0\ub1ac\0\ub1ff\0\ub252\0\u0a60\0\uad22\0\ub2a5\0\ub2f8"+
-    "\0\ub34b\0\ub39e\0\ub3f1\0\ub444\0\ub497\0\u0a60\0\u0a60\0\u0a60"+
-    "\0\ub4ea\0\ub53d\0\ub590\0\u0a60\0\ub5e3\0\ub636\0\ub689\0\ub6dc"+
-    "\0\u0a60\0\ub72f\0\ub782\0\ub7d5\0\ub828\0\ub87b\0\ub8ce\0\ub921"+
-    "\0\ub974\0\ub9c7\0\uba1a\0\uba6d\0\ubac0\0\u0775\0\ubb13";
+    "\0\u98b5\0\u9908\0\u995b\0\u99ae\0\u9a01\0\u0a60\0\u9a54\0\u9aa7"+
+    "\0\u9afa\0\u9b4d\0\u0a60\0\u0a60\0\u9ba0\0\u0775\0\u9bf3\0\u9c46"+
+    "\0\u9c99\0\u9cec\0\u9d3f\0\u0a60\0\u0a60\0\u9d92\0\u9de5\0\u9e38"+
+    "\0\u9e8b\0\u9ede\0\u9f31\0\u9f84\0\u9fd7\0\ua02a\0\u0a60\0\ua07d"+
+    "\0\ua0d0\0\ua123\0\ua176\0\ua1c9\0\ua21c\0\u0a60\0\ua26f\0\ua2c2"+
+    "\0\ua315\0\ua368\0\ua3bb\0\ua40e\0\ua461\0\ua4b4\0\ua507\0\ua55a"+
+    "\0\u0a60\0\u0a60\0\ua5ad\0\ua600\0\u0a60\0\ua653\0\ua6a6\0\ua6f9"+
+    "\0\ua74c\0\ua79f\0\u0a60\0\ua7f2\0\u0a60\0\u0a60\0\ua845\0\ua898"+
+    "\0\u0a60\0\ua8eb\0\ua93e\0\ua991\0\u0a60\0\ua9e4\0\uaa37\0\uaa8a"+
+    "\0\uaadd\0\uab30\0\uab83\0\uabd6\0\u0a60\0\uac29\0\uac7c\0\u0a60"+
+    "\0\u0a60\0\u0a60\0\uaccf\0\uad22\0\uad75\0\u0a60\0\uadc8\0\uae1b"+
+    "\0\uae6e\0\u0a60\0\u0a60\0\uaec1\0\uaf14\0\uaf67\0\uafba\0\u0a60"+
+    "\0\u0a60\0\ub00d\0\u0a60\0\ub060\0\u0a60\0\u0775\0\ub0b3\0\ub106"+
+    "\0\ub159\0\u0a60\0\uac29\0\ub1ac\0\ub1ff\0\ub252\0\ub2a5\0\ub2f8"+
+    "\0\ub34b\0\ub39e\0\u0a60\0\u0a60\0\u0a60\0\ub3f1\0\ub444\0\ub497"+
+    "\0\u0a60\0\ub4ea\0\ub53d\0\ub590\0\ub5e3\0\u0a60\0\ub636\0\ub689"+
+    "\0\ub6dc\0\ub72f\0\ub782\0\ub7d5\0\ub828\0\ub87b\0\ub8ce\0\ub921"+
+    "\0\ub974\0\ub9c7\0\u0775\0\uba1a";
 
   private static int [] zzUnpackRowMap() {
-    int [] result = new int[735];
+    int [] result = new int[732];
     int offset = 0;
     offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
     return result;
@@ -385,983 +385,984 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) {
     "\22\135\25\140\1\135\12\140\3\135\4\140\1\141\4\140"+
     "\3\135\15\142\1\143\3\142\1\144\1\145\1\142\1\146"+
     "\1\142\1\147\74\142\3\150\1\151\2\150\3\151\1\150"+
-    "\2\151\30\150\25\151\1\150\12\151\3\150\4\151\1\150"+
-    "\4\151\3\150\3\30\1\152\2\30\3\152\1\30\2\152"+
-    "\1\30\1\0\26\30\25\152\1\30\12\152\3\30\4\152"+
-    "\1\30\4\152\3\30\3\153\1\154\2\153\3\154\2\153"+
-    "\1\154\1\153\1\155\3\153\1\156\22\153\25\154\1\153"+
-    "\12\154\3\153\4\154\1\153\4\154\3\153\3\157\1\160"+
-    "\2\157\3\160\1\157\2\160\30\157\25\160\1\157\12\160"+
-    "\3\157\4\160\1\157\4\160\3\157\3\30\1\161\2\30"+
-    "\3\161\1\30\2\161\1\30\1\0\26\30\25\161\1\30"+
-    "\12\161\3\30\4\161\1\30\4\161\3\30\3\162\1\163"+
-    "\1\164\1\162\3\163\1\162\2\163\1\162\2\42\2\162"+
-    "\1\42\22\162\25\163\1\162\12\163\3\162\4\163\1\162"+
-    "\4\163\6\162\1\163\2\162\3\163\1\162\2\163\1\162"+
-    "\2\42\2\162\1\42\22\162\25\163\1\162\12\163\1\162"+
-    "\1\165\1\162\4\163\1\162\4\163\3\162\3\166\1\167"+
-    "\2\166\3\167\1\166\2\167\1\166\2\42\2\166\1\42"+
-    "\22\166\25\167\1\166\12\167\3\166\4\167\1\166\4\167"+
-    "\3\166\1\30\1\170\1\171\1\41\1\30\1\172\3\41"+
-    "\1\170\2\41\1\30\2\173\1\165\1\171\1\173\1\174"+
-    "\1\171\1\173\2\171\6\30\1\171\5\30\1\171\25\41"+
-    "\1\171\12\41\1\173\2\171\4\41\1\171\4\41\1\171"+
-    "\1\175\1\173\34\176\1\177\66\176\34\200\1\201\66\200"+
-    "\15\202\1\203\3\202\1\204\11\202\1\205\2\202\1\206"+
-    "\4\202\1\207\57\202\15\210\2\211\2\210\1\211\101\210"+
-    "\123\212\33\26\1\213\122\26\1\0\2\26\1\214\4\26"+
-    "\1\215\5\26\1\0\1\26\1\0\4\26\1\216\1\0"+
-    "\6\26\3\0\12\26\1\0\15\26\124\0\1\31\1\217"+
-    "\1\220\1\0\1\31\3\0\1\31\54\0\1\220\35\0"+
-    "\1\217\1\221\2\0\1\217\3\0\1\217\15\0\1\65"+
-    "\74\0\1\41\1\0\1\41\1\0\1\41\1\222\6\41"+
-    "\27\0\3\41\1\223\2\41\1\223\2\41\1\224\6\41"+
-    "\1\225\3\41\1\226\1\0\2\41\1\226\3\41\1\224"+
-    "\3\41\3\0\1\41\1\227\2\41\1\0\1\225\3\41"+
-    "\7\0\1\65\22\0\1\65\1\230\73\0\1\31\1\217"+
-    "\1\220\1\0\1\31\1\231\1\0\1\232\1\31\51\0"+
-    "\1\232\2\0\1\220\35\0\1\41\1\0\1\41\1\0"+
+    "\2\151\2\150\1\152\25\150\25\151\1\150\12\151\3\150"+
+    "\4\151\1\150\4\151\3\150\3\30\1\153\2\30\3\153"+
+    "\1\30\2\153\1\30\1\0\1\154\25\30\25\153\1\30"+
+    "\12\153\3\30\4\153\1\30\4\153\3\30\3\155\1\156"+
+    "\2\155\3\156\2\155\1\156\1\155\1\157\3\155\1\160"+
+    "\22\155\25\156\1\155\12\156\3\155\4\156\1\155\4\156"+
+    "\3\155\3\161\1\162\2\161\3\162\1\161\2\162\2\161"+
+    "\1\163\25\161\25\162\1\161\12\162\3\161\4\162\1\161"+
+    "\4\162\3\161\3\30\1\164\2\30\3\164\1\30\2\164"+
+    "\1\30\1\165\1\166\2\30\1\167\22\30\25\164\1\30"+
+    "\12\164\3\30\4\164\1\30\4\164\3\30\3\170\1\171"+
+    "\1\172\1\170\3\171\1\170\2\171\1\170\2\42\2\170"+
+    "\1\42\22\170\25\171\1\170\12\171\3\170\4\171\1\170"+
+    "\4\171\6\170\1\171\2\170\3\171\1\170\2\171\1\170"+
+    "\2\42\2\170\1\42\22\170\25\171\1\170\12\171\1\170"+
+    "\1\173\1\170\4\171\1\170\4\171\3\170\3\174\1\175"+
+    "\2\174\3\175\1\174\2\175\1\174\2\42\2\174\1\42"+
+    "\22\174\25\175\1\174\12\175\3\174\4\175\1\174\4\175"+
+    "\3\174\1\30\1\176\1\177\1\41\1\30\1\200\3\41"+
+    "\1\176\2\41\1\30\2\201\1\173\1\177\1\201\1\202"+
+    "\1\177\1\201\2\177\6\30\1\177\5\30\1\177\25\41"+
+    "\1\177\12\41\1\201\2\177\4\41\1\177\4\41\1\177"+
+    "\1\203\1\201\34\204\1\205\66\204\34\206\1\207\66\206"+
+    "\15\210\1\211\3\210\1\212\11\210\1\213\2\210\1\214"+
+    "\4\210\1\215\57\210\15\216\2\217\2\216\1\217\101\216"+
+    "\123\220\33\26\1\221\122\26\1\0\2\26\1\222\4\26"+
+    "\1\223\5\26\1\0\1\26\1\0\4\26\1\224\1\0"+
+    "\6\26\3\0\12\26\1\0\15\26\124\0\1\31\1\225"+
+    "\1\226\1\0\1\31\3\0\1\31\54\0\1\226\35\0"+
+    "\1\225\1\227\2\0\1\225\3\0\1\225\15\0\1\65"+
+    "\74\0\1\41\1\0\1\41\1\0\1\41\1\230\6\41"+
+    "\27\0\3\41\1\231\2\41\1\231\2\41\1\232\6\41"+
+    "\1\233\3\41\1\234\1\0\2\41\1\234\3\41\1\232"+
+    "\3\41\3\0\1\41\1\235\2\41\1\0\1\233\3\41"+
+    "\7\0\1\65\22\0\1\65\1\236\73\0\1\31\1\225"+
+    "\1\226\1\0\1\31\1\237\1\0\1\240\1\31\51\0"+
+    "\1\240\2\0\1\226\35\0\1\41\1\0\1\41\1\0"+
     "\10\41\27\0\1\67\11\41\1\67\12\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\1\233\1\41\1\234\2\41\1\235"+
-    "\4\41\1\233\1\234\11\41\1\0\3\41\1\235\4\41"+
-    "\1\236\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\6\0\1\46\7\0\1\237"+
-    "\10\0\1\41\1\240\13\41\1\240\7\41\1\0\12\41"+
-    "\1\241\2\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\0\10\41\27\0\1\241\1\41\1\242\2\41\1\243"+
+    "\4\41\1\241\1\242\11\41\1\0\3\41\1\243\4\41"+
+    "\1\244\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\6\0\1\46\7\0\1\245"+
+    "\10\0\1\41\1\246\13\41\1\246\7\41\1\0\12\41"+
+    "\1\247\2\0\4\41\1\0\4\41\4\0\1\41\1\0"+
     "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\20\0\2\42\2\0\1\42\104\0"+
-    "\1\242\2\0\3\242\1\0\2\242\30\0\25\242\1\0"+
-    "\12\242\3\0\4\242\1\0\4\242\3\0\22\243\1\244"+
-    "\1\245\1\246\1\243\1\247\74\243\27\0\1\64\1\65"+
+    "\1\250\2\0\3\250\1\0\2\250\30\0\25\250\1\0"+
+    "\12\250\3\0\4\250\1\0\4\250\3\0\22\251\1\252"+
+    "\1\253\1\254\1\251\1\255\74\251\27\0\1\64\1\65"+
     "\121\0\1\65\1\64\121\0\1\65\1\0\1\65\120\0"+
-    "\1\64\122\0\1\250\1\65\2\0\1\251\1\0\1\252"+
-    "\114\0\1\65\4\0\1\64\115\0\1\65\4\0\1\253"+
-    "\1\123\114\0\1\65\1\254\121\0\1\65\7\0\1\65"+
-    "\112\0\1\65\10\0\1\65\111\0\1\65\123\0\1\255"+
+    "\1\64\122\0\1\256\1\65\2\0\1\257\1\0\1\260"+
+    "\114\0\1\65\4\0\1\64\115\0\1\65\4\0\1\261"+
+    "\1\123\114\0\1\65\1\262\121\0\1\65\7\0\1\65"+
+    "\112\0\1\65\10\0\1\65\111\0\1\65\123\0\1\263"+
     "\12\0\1\65\60\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\41\1\256\13\41\1\256\7\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\257"+
-    "\1\0\10\41\27\0\22\41\1\257\2\41\1\0\12\41"+
+    "\27\0\1\41\1\264\13\41\1\264\7\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\265"+
+    "\1\0\10\41\27\0\22\41\1\265\2\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\3\41\1\260\4\41\27\0\1\41\1\261\1\41"+
-    "\1\262\2\41\1\262\5\41\1\263\1\261\1\41\1\260"+
-    "\5\41\1\0\1\41\1\263\10\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\264\1\0\10\41\27\0"+
-    "\2\41\1\265\10\41\1\265\6\41\1\264\2\41\1\0"+
-    "\10\41\1\266\1\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\267\1\0\10\41\27\0\1\270\4\41"+
-    "\1\271\4\41\1\270\7\41\1\267\2\41\1\0\3\41"+
-    "\1\271\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\2\41\1\272\5\41\27\0\3\41"+
-    "\1\273\2\41\1\274\1\275\1\272\3\41\1\276\10\41"+
-    "\1\0\1\41\1\276\10\41\3\0\1\41\1\277\2\41"+
+    "\1\0\3\41\1\266\4\41\27\0\1\41\1\267\1\41"+
+    "\1\270\2\41\1\270\5\41\1\271\1\267\1\41\1\266"+
+    "\5\41\1\0\1\41\1\271\10\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\272\1\0\10\41\27\0"+
+    "\2\41\1\273\10\41\1\273\6\41\1\272\2\41\1\0"+
+    "\10\41\1\274\1\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\275\1\0\10\41\27\0\1\276\4\41"+
+    "\1\277\4\41\1\276\7\41\1\275\2\41\1\0\3\41"+
+    "\1\277\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\2\41\1\300\5\41\27\0\3\41"+
+    "\1\301\2\41\1\302\1\303\1\300\3\41\1\304\10\41"+
+    "\1\0\1\41\1\304\10\41\3\0\1\41\1\305\2\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\41\1\300\13\41\1\300\7\41\1\0\11\41"+
-    "\1\301\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\1\233\1\41\1\234\2\41"+
-    "\1\235\3\41\1\302\1\233\1\234\11\41\1\0\3\41"+
-    "\1\235\4\41\1\236\1\41\3\0\4\41\1\0\4\41"+
+    "\27\0\1\41\1\306\13\41\1\306\7\41\1\0\11\41"+
+    "\1\307\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\1\241\1\41\1\242\2\41"+
+    "\1\243\3\41\1\310\1\241\1\242\11\41\1\0\3\41"+
+    "\1\243\4\41\1\244\1\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+
-    "\1\303\17\41\1\0\3\41\1\303\6\41\3\0\4\41"+
+    "\1\311\17\41\1\0\3\41\1\311\6\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\41\1\256\13\41\1\256\1\41\1\304\5\41"+
+    "\27\0\1\41\1\264\13\41\1\264\1\41\1\312\5\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\305\1\0\10\41\27\0\7\41\1\306\12\41"+
-    "\1\305\2\41\1\0\5\41\1\307\4\41\3\0\2\41"+
-    "\1\310\1\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\1\311\10\41\1\312\1\311\12\41"+
-    "\1\0\6\41\1\312\3\41\3\0\4\41\1\0\4\41"+
+    "\1\0\1\313\1\0\10\41\27\0\7\41\1\314\12\41"+
+    "\1\313\2\41\1\0\5\41\1\315\4\41\3\0\2\41"+
+    "\1\316\1\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\1\317\10\41\1\320\1\317\12\41"+
+    "\1\0\6\41\1\320\3\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\6\0\1\46"+
-    "\7\0\1\237\10\0\1\41\1\240\10\41\1\313\2\41"+
-    "\1\240\7\41\1\0\12\41\1\241\2\0\4\41\1\0"+
+    "\7\0\1\245\10\0\1\41\1\246\10\41\1\321\2\41"+
+    "\1\246\7\41\1\0\12\41\1\247\2\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\2\41\1\314\7\41\1\315\1\314\11\41\1\0\12\41"+
+    "\2\41\1\322\7\41\1\323\1\322\11\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\1\316\1\41\1\317\6\41\1\320"+
-    "\1\316\1\317\11\41\1\0\6\41\1\320\3\41\3\0"+
+    "\1\0\10\41\27\0\1\324\1\41\1\325\6\41\1\326"+
+    "\1\324\1\325\11\41\1\0\6\41\1\326\3\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\1\41\1\321\1\322\10\41\1\322\1\41"+
-    "\1\321\7\41\1\0\10\41\1\323\1\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\305\1\0\10\41"+
-    "\27\0\7\41\1\307\12\41\1\305\2\41\1\0\5\41"+
-    "\1\307\4\41\3\0\2\41\1\310\1\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\2\41\1\272\5\41"+
-    "\27\0\3\41\1\273\2\41\1\273\1\41\1\272\3\41"+
-    "\1\276\10\41\1\0\1\41\1\276\10\41\3\0\1\41"+
-    "\1\277\2\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\3\41\1\324\2\41\1\324\5\41"+
-    "\1\325\10\41\1\0\1\41\1\325\10\41\3\0\4\41"+
-    "\1\0\4\41\3\0\24\241\1\326\57\241\1\245\16\241"+
-    "\7\0\1\327\1\330\5\0\1\331\25\0\1\332\1\333"+
-    "\1\334\1\0\1\335\1\336\2\0\1\327\1\0\1\332"+
-    "\1\334\1\337\1\333\1\0\1\330\1\0\1\335\5\0"+
-    "\1\337\1\0\1\336\4\0\1\340\21\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\5\41\1\341\17\41\1\0"+
-    "\3\41\1\341\6\41\3\0\4\41\1\0\4\41\4\0"+
+    "\10\41\27\0\1\41\1\327\1\330\10\41\1\330\1\41"+
+    "\1\327\7\41\1\0\10\41\1\331\1\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\313\1\0\10\41"+
+    "\27\0\7\41\1\315\12\41\1\313\2\41\1\0\5\41"+
+    "\1\315\4\41\3\0\2\41\1\316\1\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\2\41\1\300\5\41"+
+    "\27\0\3\41\1\301\2\41\1\301\1\41\1\300\3\41"+
+    "\1\304\10\41\1\0\1\41\1\304\10\41\3\0\1\41"+
+    "\1\305\2\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\3\41\1\332\2\41\1\332\5\41"+
+    "\1\333\10\41\1\0\1\41\1\333\10\41\3\0\4\41"+
+    "\1\0\4\41\3\0\24\247\1\334\57\247\1\253\16\247"+
+    "\7\0\1\335\1\336\5\0\1\337\25\0\1\340\1\341"+
+    "\1\342\1\0\1\343\1\344\2\0\1\335\1\0\1\340"+
+    "\1\342\1\345\1\341\1\0\1\336\1\0\1\343\5\0"+
+    "\1\345\1\0\1\344\4\0\1\346\21\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\5\41\1\347\17\41\1\0"+
+    "\3\41\1\347\6\41\3\0\4\41\1\0\4\41\4\0"+
     "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
-    "\11\41\1\342\3\0\4\41\1\0\4\41\116\0\1\343"+
+    "\11\41\1\350\3\0\4\41\1\0\4\41\116\0\1\351"+
     "\10\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+
-    "\1\314\10\41\1\314\11\41\1\0\12\41\3\0\4\41"+
+    "\1\322\10\41\1\322\11\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
     "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+
-    "\1\344\1\41\3\0\22\124\1\345\1\0\1\346\1\124"+
-    "\1\347\77\124\1\350\2\124\3\350\1\124\1\351\1\350"+
-    "\6\124\1\352\1\353\1\346\1\124\1\354\15\124\25\350"+
-    "\1\124\12\350\3\124\4\350\1\124\4\350\150\124\1\355"+
-    "\1\353\1\346\1\124\1\356\74\124\22\131\1\357\1\131"+
-    "\1\360\1\0\1\361\77\131\1\350\2\131\3\350\1\131"+
-    "\1\362\1\350\6\131\1\363\1\131\1\360\1\353\1\354"+
-    "\15\131\25\350\1\131\12\350\3\131\4\350\1\131\4\350"+
-    "\150\131\1\355\1\131\1\360\1\353\1\364\74\131\30\0"+
-    "\1\365\114\0\1\355\101\0\1\140\1\0\1\140\1\0"+
+    "\1\352\1\41\3\0\22\124\1\353\1\0\1\354\1\124"+
+    "\1\355\77\124\1\356\2\124\3\356\1\124\1\357\1\356"+
+    "\6\124\1\360\1\361\1\354\1\124\1\362\15\124\25\356"+
+    "\1\124\12\356\3\124\4\356\1\124\4\356\150\124\1\363"+
+    "\1\361\1\354\1\124\1\364\74\124\22\131\1\365\1\131"+
+    "\1\366\1\0\1\367\77\131\1\356\2\131\3\356\1\131"+
+    "\1\370\1\356\6\131\1\371\1\131\1\366\1\361\1\362"+
+    "\15\131\25\356\1\131\12\356\3\131\4\356\1\131\4\356"+
+    "\150\131\1\363\1\131\1\366\1\361\1\372\74\131\30\0"+
+    "\1\373\114\0\1\363\101\0\1\140\1\0\1\140\1\0"+
     "\10\140\27\0\25\140\1\0\12\140\3\0\4\140\1\0"+
-    "\4\140\116\0\1\366\7\0\15\142\1\0\3\142\1\0"+
-    "\1\367\1\142\1\370\1\142\1\371\77\142\1\372\2\142"+
-    "\3\372\1\142\2\372\1\142\1\0\3\142\1\0\1\367"+
-    "\1\142\1\370\1\142\1\371\15\142\25\372\1\142\12\372"+
-    "\3\142\4\372\1\142\4\372\6\142\1\372\2\142\3\372"+
-    "\1\142\2\372\1\142\1\373\3\142\1\0\1\367\1\142"+
-    "\1\370\1\142\1\371\15\142\25\372\1\142\12\372\3\142"+
-    "\4\372\1\142\4\372\3\142\3\0\1\350\2\0\3\350"+
-    "\1\0\2\350\12\0\1\354\15\0\25\350\1\0\12\350"+
-    "\3\0\4\350\1\0\4\350\3\0\123\142\1\0\1\374"+
-    "\1\0\1\374\1\0\10\374\1\375\2\0\1\376\1\375"+
-    "\22\0\25\374\1\0\12\374\3\0\4\374\1\0\4\374"+
-    "\4\0\1\377\1\0\1\377\1\0\10\377\1\u0100\2\0"+
-    "\1\u0101\1\u0100\22\0\25\377\1\0\12\377\3\0\4\377"+
-    "\1\0\4\377\3\0\15\u0102\1\155\3\u0102\1\155\102\u0102"+
-    "\1\u0103\1\u0102\1\u0103\1\u0102\5\u0103\1\u0102\1\u0103\1\u0102"+
-    "\1\0\2\u0102\1\u0104\1\0\22\u0102\25\u0103\1\u0102\12\u0103"+
-    "\3\u0102\4\u0103\1\u0102\4\u0103\6\u0102\1\u0105\2\u0102\3\u0105"+
-    "\1\u0102\1\u0106\1\u0105\1\u0102\1\155\3\u0102\1\155\22\u0102"+
-    "\25\u0105\1\u0102\12\u0105\3\u0102\4\u0105\1\u0102\4\u0105\3\u0102"+
-    "\1\0\1\u0107\1\0\1\u0107\1\0\10\u0107\1\u0108\2\0"+
-    "\1\u0109\1\u0108\22\0\25\u0107\1\0\12\u0107\3\0\4\u0107"+
-    "\1\0\4\u0107\4\0\1\u010a\1\0\1\u010a\1\0\10\u010a"+
-    "\1\u010b\2\0\1\u010c\1\u010b\22\0\25\u010a\1\0\12\u010a"+
-    "\3\0\4\u010a\1\0\4\u010a\4\0\1\163\1\0\1\163"+
-    "\1\0\10\163\27\0\25\163\1\0\12\163\3\0\4\163"+
-    "\1\0\4\163\33\0\1\u010d\73\0\1\u010e\1\0\1\u010e"+
-    "\1\0\10\u010e\2\u010f\2\0\1\u010f\5\0\1\u0110\14\0"+
-    "\25\u010e\1\0\12\u010e\3\0\4\u010e\1\0\4\u010e\4\0"+
-    "\1\170\3\0\1\170\3\0\1\170\112\0\1\170\3\0"+
-    "\1\170\1\231\2\0\1\170\114\0\1\u0111\2\0\3\u0111"+
-    "\1\0\2\u0111\30\0\25\u0111\1\0\12\u0111\3\0\4\u0111"+
-    "\1\0\4\u0111\3\0\34\176\1\u0112\122\176\1\u0112\1\u0113"+
-    "\65\176\34\200\1\u0114\122\200\1\u0114\1\u0115\65\200\15\202"+
-    "\1\203\3\202\1\203\14\202\1\203\4\202\1\203\57\202"+
-    "\15\0\1\u0116\105\0\15\202\1\203\3\202\1\203\13\202"+
-    "\1\u0117\1\203\4\202\1\203\57\202\30\0\1\u0118\122\0"+
-    "\1\255\107\0\2\211\2\0\1\211\101\0\33\26\1\0"+
-    "\2\26\1\0\4\26\1\0\5\26\1\0\1\26\1\0"+
-    "\4\26\2\0\6\26\3\0\12\26\1\0\15\26\27\0"+
-    "\1\u0119\122\0\1\u0119\42\0\1\u011a\3\0\1\u011a\114\0"+
-    "\1\u011b\3\0\1\u011b\27\0\1\217\1\0\1\220\1\0"+
-    "\1\217\3\0\1\217\54\0\1\220\35\0\1\170\2\0"+
-    "\1\u011c\1\170\3\0\1\170\17\0\1\u011c\73\0\1\65"+
-    "\121\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+
-    "\1\u011d\1\41\1\u011e\15\41\1\0\3\41\1\u011d\1\41"+
-    "\1\u011e\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\4\41\1\u011f\14\41"+
-    "\1\u011f\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+
-    "\1\u0120\10\41\1\0\1\41\1\u0120\10\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\2\41\1\u0121\10\41\1\u0121\11\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\25\41\1\0\11\41\1\u0122\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\25\41\1\0\1\u0123\3\41\1\u0123\5\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\u0124\1\0\1\u0124"+
-    "\1\0\1\u0124\1\0\3\u0124\34\0\1\u0124\1\0\1\u0124"+
-    "\3\0\1\u0124\2\0\1\u0124\3\0\1\u0124\1\0\2\u0124"+
-    "\1\0\1\u0124\3\0\1\u0124\33\0\1\u0125\3\0\1\u0125"+
-    "\112\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+
-    "\1\u0126\13\41\1\u0126\7\41\1\0\12\41\3\0\4\41"+
+    "\4\140\116\0\1\374\7\0\15\142\1\0\3\142\1\0"+
+    "\1\375\1\142\1\376\1\142\1\377\77\142\1\u0100\2\142"+
+    "\3\u0100\1\142\2\u0100\1\142\1\0\1\143\2\142\1\0"+
+    "\1\375\1\142\1\376\1\142\1\377\15\142\25\u0100\1\142"+
+    "\12\u0100\3\142\4\u0100\1\142\4\u0100\6\142\1\u0100\2\142"+
+    "\3\u0100\1\142\2\u0100\1\142\1\u0101\1\143\2\142\1\0"+
+    "\1\375\1\142\1\376\1\142\1\377\15\142\25\u0100\1\142"+
+    "\12\u0100\3\142\4\u0100\1\142\4\u0100\3\142\3\0\1\356"+
+    "\2\0\3\356\1\0\2\356\12\0\1\362\15\0\25\356"+
+    "\1\0\12\356\3\0\4\356\1\0\4\356\3\0\123\142"+
+    "\15\151\1\u0102\3\151\1\u0102\101\151\3\0\1\151\2\0"+
+    "\3\151\1\0\2\151\2\0\1\u0103\25\0\25\151\1\0"+
+    "\12\151\3\0\4\151\1\0\4\151\4\0\1\153\1\0"+
+    "\1\153\1\0\10\153\3\0\1\u0104\23\0\25\153\1\0"+
+    "\12\153\3\0\4\153\1\0\4\153\6\0\1\153\2\0"+
+    "\3\153\1\0\2\153\2\0\1\u0105\25\0\25\153\1\0"+
+    "\12\153\3\0\4\153\1\0\4\153\3\0\15\155\1\0"+
+    "\3\155\1\0\102\155\1\u0106\1\155\1\u0106\1\155\5\u0106"+
+    "\1\155\1\u0106\1\155\1\0\2\155\1\u0107\1\0\22\155"+
+    "\25\u0106\1\155\12\u0106\3\155\4\u0106\1\155\4\u0106\6\155"+
+    "\1\u0108\2\155\3\u0108\1\155\2\u0108\1\155\1\u0109\1\u010a"+
+    "\2\155\1\u0109\22\155\25\u0108\1\155\12\u0108\3\155\4\u0108"+
+    "\1\155\4\u0108\6\155\1\u0108\2\155\3\u0108\1\155\2\u0108"+
+    "\1\155\1\157\1\u010a\2\155\1\u0109\22\155\25\u0108\1\155"+
+    "\12\u0108\3\155\4\u0108\1\155\4\u0108\3\155\15\u010b\1\u010c"+
+    "\3\u010b\1\u010c\101\u010b\3\0\1\u010b\2\0\3\u010b\1\0"+
+    "\2\u010b\2\0\1\u010d\25\0\25\u010b\1\0\12\u010b\3\0"+
+    "\4\u010b\1\0\4\u010b\4\0\1\164\1\0\1\164\1\0"+
+    "\10\164\3\0\1\u010e\23\0\25\164\1\0\12\164\3\0"+
+    "\4\164\1\0\4\164\6\0\1\164\2\0\3\164\1\0"+
+    "\2\164\1\0\1\165\1\u010f\2\0\1\165\22\0\25\164"+
+    "\1\0\12\164\3\0\4\164\1\0\4\164\6\0\1\164"+
+    "\2\0\3\164\1\0\2\164\2\0\1\u010f\25\0\25\164"+
+    "\1\0\12\164\3\0\4\164\1\0\4\164\4\0\1\171"+
+    "\1\0\1\171\1\0\10\171\27\0\25\171\1\0\12\171"+
+    "\3\0\4\171\1\0\4\171\33\0\1\u0110\73\0\1\u0111"+
+    "\1\0\1\u0111\1\0\10\u0111\2\u0112\2\0\1\u0112\5\0"+
+    "\1\u0113\14\0\25\u0111\1\0\12\u0111\3\0\4\u0111\1\0"+
+    "\4\u0111\4\0\1\176\3\0\1\176\3\0\1\176\112\0"+
+    "\1\176\3\0\1\176\1\237\2\0\1\176\114\0\1\u0114"+
+    "\2\0\3\u0114\1\0\2\u0114\30\0\25\u0114\1\0\12\u0114"+
+    "\3\0\4\u0114\1\0\4\u0114\3\0\34\204\1\u0115\122\204"+
+    "\1\u0115\1\u0116\65\204\34\206\1\u0117\122\206\1\u0117\1\u0118"+
+    "\65\206\15\210\1\211\3\210\1\211\14\210\1\211\4\210"+
+    "\1\211\57\210\15\0\1\u0119\105\0\15\210\1\211\3\210"+
+    "\1\211\13\210\1\u011a\1\211\4\210\1\211\57\210\30\0"+
+    "\1\u011b\122\0\1\263\107\0\2\217\2\0\1\217\101\0"+
+    "\33\26\1\0\2\26\1\0\4\26\1\0\5\26\1\0"+
+    "\1\26\1\0\4\26\2\0\6\26\3\0\12\26\1\0"+
+    "\15\26\27\0\1\u011c\122\0\1\u011c\42\0\1\u011d\3\0"+
+    "\1\u011d\114\0\1\u011e\3\0\1\u011e\27\0\1\225\1\0"+
+    "\1\226\1\0\1\225\3\0\1\225\54\0\1\226\35\0"+
+    "\1\176\2\0\1\u011f\1\176\3\0\1\176\17\0\1\u011f"+
+    "\73\0\1\65\121\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\5\41\1\u0120\1\41\1\u0121\15\41\1\0\3\41"+
+    "\1\u0120\1\41\1\u0121\4\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\4\41"+
+    "\1\u0122\14\41\1\u0122\3\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\11\41\1\u0127\13\41\1\0\6\41\1\u0127\3\41"+
+    "\27\0\14\41\1\u0123\10\41\1\0\1\41\1\u0123\10\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\3\41\1\u0128\2\41\1\u0128\16\41"+
+    "\1\0\10\41\27\0\2\41\1\u0124\10\41\1\u0124\11\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\3\41\1\u0129\2\41"+
-    "\1\u0129\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\36\0\1\u012a\70\0\1\41\1\0\1\u012b\1\0\10\41"+
-    "\27\0\22\41\1\u012b\2\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\242\1\0\1\242\1\0\10\242"+
-    "\27\0\25\242\1\0\12\242\3\0\4\242\1\0\4\242"+
-    "\3\0\3\243\1\0\2\243\3\0\2\243\1\0\6\243"+
-    "\1\244\1\245\1\246\1\243\1\0\15\243\25\0\1\243"+
-    "\12\0\3\243\4\0\1\243\4\0\150\243\1\0\1\245"+
-    "\1\246\1\243\1\247\74\243\30\0\1\65\121\0\1\65"+
-    "\3\0\1\u012c\147\0\1\u012d\12\0\1\u012d\63\0\1\u012e"+
-    "\103\0\2\254\2\0\1\254\116\0\2\255\2\0\1\255"+
-    "\102\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u012f\15\41\1\0\5\41\1\u012f\4\41\3\0\4\41"+
-    "\1\0\3\41\1\u0130\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\14\41\1\u0131\10\41\1\0\1\41\1\u0131"+
-    "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\1\41\1\u0132\13\41\1\u0132"+
-    "\7\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\4\41\1\256"+
-    "\14\41\1\256\3\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\25\41\1\0\12\41\3\0\2\41\1\u0133\1\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\25\41\1\0\12\41\3\0\1\41\1\u0134\2\41\1\0"+
+    "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\11\41"+
+    "\1\u0125\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\25\41\1\0\1\u0126\3\41"+
+    "\1\u0126\5\41\3\0\4\41\1\0\4\41\4\0\1\u0127"+
+    "\1\0\1\u0127\1\0\1\u0127\1\0\3\u0127\34\0\1\u0127"+
+    "\1\0\1\u0127\3\0\1\u0127\2\0\1\u0127\3\0\1\u0127"+
+    "\1\0\2\u0127\1\0\1\u0127\3\0\1\u0127\33\0\1\u0128"+
+    "\3\0\1\u0128\112\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\1\41\1\u0129\13\41\1\u0129\7\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\11\41\1\u012a\13\41\1\0\6\41"+
+    "\1\u012a\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\3\41\1\u012b\2\41"+
+    "\1\u012b\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+
+    "\1\u012c\2\41\1\u012c\16\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\36\0\1\u012d\70\0\1\41\1\0\1\u012e"+
+    "\1\0\10\41\27\0\22\41\1\u012e\2\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\250\1\0\1\250"+
+    "\1\0\10\250\27\0\25\250\1\0\12\250\3\0\4\250"+
+    "\1\0\4\250\3\0\3\251\1\0\2\251\3\0\2\251"+
+    "\1\0\6\251\1\252\1\253\1\254\1\251\1\0\15\251"+
+    "\25\0\1\251\12\0\3\251\4\0\1\251\4\0\150\251"+
+    "\1\0\1\253\1\254\1\251\1\255\74\251\30\0\1\65"+
+    "\121\0\1\65\3\0\1\u012f\147\0\1\u0130\12\0\1\u0130"+
+    "\63\0\1\u0131\103\0\2\262\2\0\1\262\116\0\2\263"+
+    "\2\0\1\263\102\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\7\41\1\u0132\15\41\1\0\5\41\1\u0132\4\41"+
+    "\3\0\4\41\1\0\3\41\1\u0133\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\14\41\1\u0134\10\41\1\0"+
+    "\1\41\1\u0134\10\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\1\41\1\u0135"+
+    "\13\41\1\u0135\7\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\11\41\1\u0135\13\41\1\0\6\41\1\u0135\3\41\3\0"+
+    "\4\41\1\264\14\41\1\264\3\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\2\41\1\u0136\5\41\27\0\10\41\1\u0136\13\41\1\u0137"+
-    "\1\0\2\41\1\u0137\7\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\u0138\1\0\10\41\27\0\22\41"+
-    "\1\u0138\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u0139\4\41\1\u013a\7\41\1\u013b\1\0\1\41\1\u013a"+
-    "\1\u013b\2\41\1\u0139\4\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u013c\4\41\1\u013a\7\41\1\u013b\1\0\1\41\1\u013a"+
-    "\1\u013b\2\41\1\u0139\4\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\22\41"+
-    "\1\u013d\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+
-    "\1\u013e\10\41\1\0\1\41\1\u013e\10\41\3\0\4\41"+
+    "\10\41\27\0\25\41\1\0\12\41\3\0\2\41\1\u0136"+
+    "\1\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\25\41\1\0\12\41\3\0\1\41\1\u0137"+
+    "\2\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\11\41\1\u0138\13\41\1\0\6\41\1\u0138"+
+    "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\2\41\1\u0139\5\41\27\0\10\41\1\u0139"+
+    "\13\41\1\u013a\1\0\2\41\1\u013a\7\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\u013b\1\0\10\41"+
+    "\27\0\22\41\1\u013b\2\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\25\41\1\0\1\u013f\3\41\1\u013f\5\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\2\41\1\u0140\10\41\1\u0140\11\41\1\0"+
-    "\10\41\1\u0141\1\41\3\0\1\u0142\3\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+
-    "\1\u0143\13\41\1\u0143\7\41\1\0\12\41\3\0\4\41"+
+    "\27\0\7\41\1\u013c\4\41\1\u013d\7\41\1\u013e\1\0"+
+    "\1\41\1\u013d\1\u013e\2\41\1\u013c\4\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\12\41\1\u0144\12\41\1\0\12\41\3\0\4\41"+
+    "\27\0\7\41\1\u013f\4\41\1\u013d\7\41\1\u013e\1\0"+
+    "\1\41\1\u013d\1\u013e\2\41\1\u013c\4\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\14\41\1\u0145\10\41\1\0\1\41\1\u0145\10\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\23\41\1\u0146\1\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\11\41\1\u0147\13\41\1\0\6\41"+
-    "\1\u0147\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\2\41\1\u0148\10\41"+
-    "\1\u0148\1\41\1\u0149\7\41\1\0\12\41\3\0\4\41"+
+    "\27\0\22\41\1\u0140\2\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\2\41\1\u0148\10\41\1\u0148\11\41\1\0\12\41"+
+    "\27\0\14\41\1\u0141\10\41\1\0\1\41\1\u0141\10\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\5\41\1\u014a\17\41\1\0\3\41"+
-    "\1\u014a\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u014b\15\41"+
-    "\1\0\5\41\1\u014b\4\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u014c"+
-    "\11\41\1\u014c\12\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\12\41\1\u014d\12\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\1\41\1\u014e\13\41\1\u014e\7\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\5\41\1\u014f\17\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\3\41\1\u0150\2\41\1\u0150\16\41\1\0"+
-    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\7\41\1\u0151\1\41\1\u0152"+
-    "\2\41\1\u0153\10\41\1\0\1\41\1\u0153\3\41\1\u0151"+
-    "\1\u0152\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\1\u0154\1\41\1\u0155"+
-    "\7\41\1\u0154\1\u0155\11\41\1\0\12\41\3\0\4\41"+
+    "\1\0\10\41\27\0\25\41\1\0\1\u0142\3\41\1\u0142"+
+    "\5\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\2\41\1\u0143\10\41\1\u0143"+
+    "\11\41\1\0\10\41\1\u0144\1\41\3\0\1\u0145\3\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\u0156\4\41\1\u0157\4\41\1\u0156\12\41\1\0"+
-    "\3\41\1\u0157\6\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\1\41\1\u0158"+
-    "\13\41\1\u0158\7\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\3\41\1\u0159"+
-    "\4\41\27\0\17\41\1\u0159\5\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\14\41\1\u015a\10\41\1\0\1\41\1\u015a"+
-    "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\u015b\1\0\10\41\27\0\22\41\1\u015b\2\41\1\0"+
-    "\12\41\3\0\4\41\1\0\4\41\3\0\123\241\55\0"+
-    "\1\u015c\22\0\1\u015c\66\0\1\u015d\4\0\1\u015e\4\0"+
-    "\1\u015d\16\0\1\u015e\35\0\1\u015f\52\0\1\u015f\42\0"+
-    "\1\u0160\62\0\1\u0160\101\0\1\u0161\13\0\1\u0161\105\0"+
-    "\1\u0162\11\0\1\u0162\113\0\1\u0163\2\0\1\u0163\123\0"+
-    "\1\u0164\23\0\1\u0164\72\0\1\u0165\2\0\1\u0165\51\0"+
-    "\1\41\1\0\1\u0166\1\0\10\41\27\0\22\41\1\u0166"+
-    "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u0167"+
-    "\17\41\1\0\3\41\1\u0167\6\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\2\41\1\u0168"+
-    "\5\41\27\0\3\41\1\u0169\1\u016a\1\41\1\u0169\1\u016b"+
-    "\1\u0168\1\u016c\7\41\1\u016a\2\41\1\u016d\1\0\2\41"+
-    "\1\u016d\2\41\1\u016b\1\u016c\2\41\1\u016e\3\0\1\41"+
-    "\1\u016f\2\41\1\0\4\41\3\0\3\124\1\0\2\124"+
-    "\3\0\2\124\1\0\6\124\1\352\1\353\1\346\1\124"+
-    "\1\0\15\124\25\0\1\124\12\0\3\124\4\0\1\124"+
-    "\4\0\25\124\1\0\1\353\1\346\1\124\1\356\74\124"+
-    "\1\0\1\350\1\0\1\350\1\0\10\350\27\0\25\350"+
-    "\1\0\12\350\3\0\4\350\1\0\4\350\1\0\1\u0170"+
-    "\1\0\1\124\1\351\1\124\1\351\1\124\10\351\5\124"+
-    "\1\345\1\0\1\346\1\124\1\347\15\124\25\351\1\124"+
-    "\12\351\3\124\4\351\1\124\4\351\1\124\1\u0171\1\124"+
-    "\3\131\1\0\2\131\3\0\2\131\1\0\6\131\1\363"+
-    "\1\131\1\360\1\353\1\0\15\131\25\0\1\131\12\0"+
-    "\3\131\4\0\1\131\4\0\25\131\1\0\1\131\1\360"+
-    "\1\353\1\364\75\131\1\362\1\131\1\362\1\131\10\362"+
-    "\5\131\1\357\1\131\1\360\1\0\1\361\15\131\25\362"+
-    "\1\131\12\362\3\131\4\362\1\131\4\362\1\131\1\u0172"+
-    "\1\131\3\142\1\u0173\2\142\3\u0173\2\142\1\u0173\1\142"+
-    "\1\0\3\142\1\0\1\u0174\1\142\1\370\1\142\1\u0175"+
-    "\15\142\25\u0173\1\142\12\u0173\3\142\4\u0173\1\142\4\u0173"+
-    "\20\142\1\0\3\142\1\0\116\142\1\0\3\142\1\0"+
-    "\1\u0175\1\142\1\370\1\142\1\u0176\75\142\1\372\1\142"+
-    "\1\372\1\142\10\372\1\u0177\2\142\1\u0178\1\u0177\1\367"+
-    "\1\142\1\370\1\142\1\371\15\142\25\372\1\142\12\372"+
-    "\3\142\4\372\1\142\4\372\3\142\3\0\1\u0179\2\0"+
-    "\3\u0179\1\0\2\u0179\30\0\25\u0179\1\0\12\u0179\3\0"+
-    "\4\u0179\1\0\4\u0179\20\0\1\375\3\0\1\375\116\0"+
-    "\1\u0100\3\0\1\u0100\101\0\15\u0102\1\0\3\u0102\1\0"+
-    "\102\u0102\1\u0105\1\u0102\1\u0105\1\u0102\5\u0105\1\u0106\1\u0105"+
-    "\1\u0106\1\u017a\2\u0102\1\u017b\1\u017a\22\u0102\25\u0105\1\u0102"+
-    "\12\u0105\3\u0102\4\u0105\1\u0102\4\u0105\4\u0102\1\u0106\1\u0102"+
-    "\1\u0106\1\u0102\10\u0106\1\u017c\2\u0102\1\u017d\1\u017c\22\u0102"+
-    "\25\u0106\1\u0102\12\u0106\3\u0102\4\u0106\1\u0102\4\u0106\3\u0102"+
-    "\15\0\1\u0108\3\0\1\u0108\116\0\1\u010b\3\0\1\u010b"+
-    "\116\0\2\u010f\2\0\1\u010f\5\0\1\u0110\74\0\1\u0111"+
-    "\1\0\1\u0111\1\0\10\u0111\27\0\25\u0111\1\0\12\u0111"+
-    "\3\0\4\u0111\1\0\4\u0111\3\0\34\176\1\u0112\1\u017e"+
-    "\65\176\34\200\1\u0114\1\u017f\65\200\15\202\1\203\3\202"+
-    "\1\203\14\202\1\203\4\202\1\203\14\202\1\u0180\12\202"+
-    "\1\u0180\27\202\15\0\2\u0118\2\0\1\u0118\204\0\1\u0181"+
-    "\64\0\1\u0182\13\0\1\u0182\42\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\7\41\1\u0183\15\41\1\0\5\41"+
-    "\1\u0183\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u0184\1\0\10\41\27\0\22\41\1\u0184\2\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\2\41\1\u0185\5\41\27\0\4\41"+
-    "\1\u0186\1\u0187\2\41\1\u0185\3\41\1\u0188\4\41\1\u0186"+
-    "\3\41\1\0\1\41\1\u0188\1\41\1\u0187\6\41\3\0"+
-    "\2\41\1\u0189\1\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\u018a\1\0\10\41\27\0\22\41\1\u018a\2\41\1\0"+
-    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\11\41\1\u018b\13\41\1\0"+
-    "\6\41\1\u018b\3\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\1\u018c\11\41"+
-    "\1\u018c\12\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u018d\15\41\1\0\5\41\1\u018d\4\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u018e\1\0\10\41"+
-    "\27\0\22\41\1\u018e\2\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\14\41\1\u018f\10\41\1\0\1\41\1\u018f\10\41"+
+    "\27\0\1\41\1\u0146\13\41\1\u0146\7\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\12\41\1\u0147\12\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\2\41\1\u0190\10\41\1\u0190\11\41"+
+    "\1\0\10\41\27\0\14\41\1\u0148\10\41\1\0\1\41"+
+    "\1\u0148\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\23\41\1\u0149\1\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\24\41\1\u0191\1\0"+
-    "\2\41\1\u0191\7\41\3\0\4\41\1\0\4\41\36\0"+
-    "\1\u012c\70\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\2\41\1\u0192\10\41\1\u0192\11\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\6\0\1\u0193\2\0\3\u0193\1\0"+
-    "\2\u0193\2\0\1\u012c\4\0\1\u0194\20\0\25\u0193\1\0"+
-    "\12\u0193\1\u0195\2\0\4\u0193\1\0\4\u0193\73\0\1\u0196"+
-    "\3\0\1\u0196\43\0\2\u0197\2\0\1\u0197\102\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\10\41"+
-    "\1\u0198\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\10\41"+
-    "\1\u0199\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u019a\15\41"+
-    "\1\0\5\41\1\u019a\4\41\3\0\4\41\1\0\4\41"+
+    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u014a\13\41"+
+    "\1\0\6\41\1\u014a\3\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+
-    "\1\u019b\10\41\1\u019b\11\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u019c\1\0\10\41"+
-    "\27\0\22\41\1\u019c\2\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\11\41\1\u019d\13\41\1\0\6\41\1\u019d\3\41"+
+    "\1\u014b\10\41\1\u014b\1\41\1\u014c\7\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\2\41\1\u019e\10\41\1\u019e\11\41"+
+    "\1\0\10\41\27\0\2\41\1\u014b\10\41\1\u014b\11\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u019f\13\41"+
-    "\1\0\6\41\1\u019f\3\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\u01a0\1\0\10\41\27\0\22\41"+
-    "\1\u01a0\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\1\0\1\41\1\0\10\41\27\0\5\41\1\u014d\17\41"+
+    "\1\0\3\41\1\u014d\6\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u01a1\15\41\1\0\5\41\1\u01a1\4\41\3\0\4\41"+
+    "\1\u014e\15\41\1\0\5\41\1\u014e\4\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\11\41\1\u01a2\13\41\1\0\6\41\1\u01a2\3\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\15\41\1\u01a3\7\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u01a4"+
-    "\1\0\10\41\27\0\22\41\1\u01a4\2\41\1\0\12\41"+
+    "\27\0\1\u014f\11\41\1\u014f\12\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\12\41\1\u0150\12\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\1\41\1\u0151\13\41\1\u0151\7\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\5\41\1\u0152\17\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\3\41\1\u0153\2\41\1\u0153"+
+    "\16\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0154"+
+    "\1\41\1\u0155\2\41\1\u0156\10\41\1\0\1\41\1\u0156"+
+    "\3\41\1\u0154\1\u0155\3\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u0157"+
+    "\1\41\1\u0158\7\41\1\u0157\1\u0158\11\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\11\41\1\u01a5\13\41\1\0\6\41"+
-    "\1\u01a5\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\5\41\1\u01a6\17\41"+
-    "\1\0\3\41\1\u01a6\6\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\u01a7\1\0\10\41\27\0\22\41"+
-    "\1\u01a7\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u01a8"+
-    "\11\41\1\u01a8\12\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\0\10\41\27\0\1\u0159\4\41\1\u015a\4\41\1\u0159"+
+    "\12\41\1\0\3\41\1\u015a\6\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\13\41\1\u01a9\11\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\u015b\13\41\1\u015b\7\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\3\41\1\u015c\4\41\27\0\17\41\1\u015c\5\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\14\41\1\u015d\10\41\1\0"+
+    "\1\41\1\u015d\10\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\u015e\1\0\10\41\27\0\22\41\1\u015e"+
+    "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\3\0"+
+    "\123\247\55\0\1\u015f\22\0\1\u015f\66\0\1\u0160\4\0"+
+    "\1\u0161\4\0\1\u0160\16\0\1\u0161\35\0\1\u0162\52\0"+
+    "\1\u0162\42\0\1\u0163\62\0\1\u0163\101\0\1\u0164\13\0"+
+    "\1\u0164\105\0\1\u0165\11\0\1\u0165\113\0\1\u0166\2\0"+
+    "\1\u0166\123\0\1\u0167\23\0\1\u0167\72\0\1\u0168\2\0"+
+    "\1\u0168\51\0\1\41\1\0\1\u0169\1\0\10\41\27\0"+
+    "\22\41\1\u0169\2\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\7\41\1\u01aa\15\41\1\0\5\41\1\u01aa\4\41\3\0"+
+    "\5\41\1\u016a\17\41\1\0\3\41\1\u016a\6\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\22\41\1\u01ab\2\41\1\0\12\41\3\0"+
+    "\2\41\1\u016b\5\41\27\0\3\41\1\u016c\1\u016d\1\41"+
+    "\1\u016c\1\u016e\1\u016b\1\u016f\7\41\1\u016d\2\41\1\u0170"+
+    "\1\0\2\41\1\u0170\2\41\1\u016e\1\u016f\2\41\1\u0171"+
+    "\3\0\1\41\1\u0172\2\41\1\0\4\41\3\0\3\124"+
+    "\1\0\2\124\3\0\2\124\1\0\6\124\1\360\1\361"+
+    "\1\354\1\124\1\0\15\124\25\0\1\124\12\0\3\124"+
+    "\4\0\1\124\4\0\25\124\1\0\1\361\1\354\1\124"+
+    "\1\364\74\124\1\0\1\356\1\0\1\356\1\0\10\356"+
+    "\27\0\25\356\1\0\12\356\3\0\4\356\1\0\4\356"+
+    "\1\0\1\u0173\1\0\1\124\1\357\1\124\1\357\1\124"+
+    "\10\357\5\124\1\353\1\0\1\354\1\124\1\355\15\124"+
+    "\25\357\1\124\12\357\3\124\4\357\1\124\4\357\1\124"+
+    "\1\u0174\1\124\3\131\1\0\2\131\3\0\2\131\1\0"+
+    "\6\131\1\371\1\131\1\366\1\361\1\0\15\131\25\0"+
+    "\1\131\12\0\3\131\4\0\1\131\4\0\25\131\1\0"+
+    "\1\131\1\366\1\361\1\372\75\131\1\370\1\131\1\370"+
+    "\1\131\10\370\5\131\1\365\1\131\1\366\1\0\1\367"+
+    "\15\131\25\370\1\131\12\370\3\131\4\370\1\131\4\370"+
+    "\1\131\1\u0175\1\131\3\142\1\u0176\2\142\3\u0176\2\142"+
+    "\1\u0176\1\142\1\0\3\142\1\0\1\u0177\1\142\1\376"+
+    "\1\142\1\u0178\15\142\25\u0176\1\142\12\u0176\3\142\4\u0176"+
+    "\1\142\4\u0176\20\142\1\0\3\142\1\0\116\142\1\0"+
+    "\3\142\1\0\1\u0178\1\142\1\376\1\142\1\u0179\74\142"+
+    "\15\u0100\1\u017a\3\u0100\1\u017a\101\u0100\3\0\1\u0100\2\0"+
+    "\3\u0100\1\0\2\u0100\2\0\1\u0101\25\0\25\u0100\1\0"+
+    "\12\u0100\3\0\4\u0100\1\0\4\u0100\3\0\15\u0108\1\u017b"+
+    "\3\u0108\1\u017b\101\u0108\3\155\1\u0106\2\155\3\u0106\2\155"+
+    "\1\u0106\1\155\1\u0109\3\155\1\u0109\22\155\25\u0106\1\155"+
+    "\12\u0106\3\155\4\u0106\1\155\4\u0106\6\155\1\u0108\2\155"+
+    "\3\u0108\1\155\2\u0108\1\155\1\0\1\u010a\2\155\1\0"+
+    "\22\155\25\u0108\1\155\12\u0108\3\155\4\u0108\1\155\4\u0108"+
+    "\3\155\15\0\2\u0112\2\0\1\u0112\5\0\1\u0113\74\0"+
+    "\1\u0114\1\0\1\u0114\1\0\10\u0114\27\0\25\u0114\1\0"+
+    "\12\u0114\3\0\4\u0114\1\0\4\u0114\3\0\34\204\1\u0115"+
+    "\1\u017c\65\204\34\206\1\u0117\1\u017d\65\206\15\210\1\211"+
+    "\3\210\1\211\14\210\1\211\4\210\1\211\14\210\1\u017e"+
+    "\12\210\1\u017e\27\210\15\0\2\u011b\2\0\1\u011b\204\0"+
+    "\1\u017f\64\0\1\u0180\13\0\1\u0180\42\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\7\41\1\u0181\15\41\1\0"+
+    "\5\41\1\u0181\4\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\u0182\1\0\10\41\27\0\22\41\1\u0182"+
+    "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\2\41\1\u0183\5\41\27\0"+
+    "\4\41\1\u0184\1\u0185\2\41\1\u0183\3\41\1\u0186\4\41"+
+    "\1\u0184\3\41\1\0\1\41\1\u0186\1\41\1\u0185\6\41"+
+    "\3\0\2\41\1\u0187\1\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\u0188\1\0\10\41\27\0\22\41\1\u0188\2\41"+
+    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u0189\13\41"+
+    "\1\0\6\41\1\u0189\3\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u018a"+
+    "\11\41\1\u018a\12\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\7\41\1\u018b\15\41\1\0\5\41\1\u018b\4\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\u018c\1\0"+
+    "\10\41\27\0\22\41\1\u018c\2\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\2\41\1\u01ac\5\41\27\0\10\41\1\u01ac\14\41\1\0"+
-    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\7\41\1\u01ad\15\41\1\0"+
-    "\5\41\1\u01ad\4\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01ae"+
-    "\17\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u01af"+
-    "\15\41\1\0\5\41\1\u01af\4\41\3\0\4\41\1\0"+
+    "\10\41\27\0\14\41\1\u018d\10\41\1\0\1\41\1\u018d"+
+    "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\2\41\1\u018e\10\41\1\u018e"+
+    "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\24\41\1\u018f"+
+    "\1\0\2\41\1\u018f\7\41\3\0\4\41\1\0\4\41"+
+    "\36\0\1\u012f\70\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\2\41\1\u0190\10\41\1\u0190\11\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\6\0\1\u0191\2\0\3\u0191"+
+    "\1\0\2\u0191\2\0\1\u012f\4\0\1\u0192\20\0\25\u0191"+
+    "\1\0\12\u0191\1\u0193\2\0\4\u0191\1\0\4\u0191\73\0"+
+    "\1\u0194\3\0\1\u0194\43\0\2\u0195\2\0\1\u0195\102\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
+    "\10\41\1\u0196\1\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
+    "\10\41\1\u0197\1\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0198"+
+    "\15\41\1\0\5\41\1\u0198\4\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\1\u01b0\11\41\1\u01b0\12\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\3\41"+
-    "\1\u01b1\4\41\27\0\17\41\1\u01b1\5\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\11\41\1\u01b2\13\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\21\41\1\u01b3\3\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\7\41\1\u01b4\4\41\1\u01b5\10\41"+
-    "\1\0\1\41\1\u01b5\3\41\1\u01b4\4\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\24\41\1\u01b6\1\0\2\41\1\u01b6\7\41\3\0"+
+    "\2\41\1\u0199\10\41\1\u0199\11\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\u019a\1\0"+
+    "\10\41\27\0\22\41\1\u019a\2\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\11\41\1\u01b7\13\41\1\0\6\41\1\u01b7"+
+    "\10\41\27\0\11\41\1\u019b\13\41\1\0\6\41\1\u019b"+
     "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\u01b8\1\0\10\41\27\0\22\41\1\u01b8\2\41\1\0"+
-    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\3\41\1\u01b9\2\41\1\u01b9"+
-    "\16\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u01ba"+
-    "\10\41\1\0\1\41\1\u01ba\10\41\3\0\4\41\1\0"+
+    "\1\41\1\0\10\41\27\0\2\41\1\u019c\10\41\1\u019c"+
+    "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\11\41\1\u019d"+
+    "\13\41\1\0\6\41\1\u019d\3\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u019e\1\0\10\41\27\0"+
+    "\22\41\1\u019e\2\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\7\41\1\u01bb\15\41\1\0\5\41\1\u01bb\4\41\3\0"+
+    "\7\41\1\u019f\15\41\1\0\5\41\1\u019f\4\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\3\41\1\u01bc\2\41\1\u01bc\11\41\1\u01bd"+
-    "\4\41\1\0\12\41\3\0\4\41\1\0\1\u01bd\3\41"+
-    "\4\0\1\41\1\0\1\u01be\1\0\10\41\27\0\22\41"+
-    "\1\u01be\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+
-    "\1\u01bf\13\41\1\0\6\41\1\u01bf\3\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u01c0\1\0\10\41"+
-    "\27\0\22\41\1\u01c0\2\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\47\0\1\u01c1\11\0\1\u01c1\110\0\1\u01c2"+
-    "\11\0\1\u01c2\113\0\1\u01c3\2\0\1\u01c3\137\0\1\u01c4"+
-    "\25\0\1\u01c4\53\0\1\u01c5\10\0\1\u01c5\110\0\1\u01c6"+
-    "\13\0\1\u01c6\143\0\1\u01c7\73\0\1\u01c8\23\0\1\u01c8"+
-    "\70\0\1\u01c9\13\0\1\u01c9\121\0\1\u01ca\12\0\1\u01ca"+
-    "\30\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+
-    "\1\u01cb\13\41\1\0\6\41\1\u01cb\3\41\3\0\4\41"+
+    "\10\41\27\0\11\41\1\u01a0\13\41\1\0\6\41\1\u01a0"+
+    "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\15\41\1\u01a1\7\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\u01a2\1\0\10\41\27\0\22\41\1\u01a2\2\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\11\41\1\u01a3\13\41\1\0"+
+    "\6\41\1\u01a3\3\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01a4"+
+    "\17\41\1\0\3\41\1\u01a4\6\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u01a5\1\0\10\41\27\0"+
+    "\22\41\1\u01a5\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\1\u01a6\11\41\1\u01a6\12\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\11\41\1\u01cc\13\41\1\0\6\41\1\u01cc\3\41"+
+    "\27\0\13\41\1\u01a7\11\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\7\41\1\u01a8\15\41\1\0\5\41\1\u01a8\4\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\5\41\1\u01cd\17\41\1\0\3\41"+
-    "\1\u01cd\4\41\1\u01ce\1\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+
-    "\1\u01cf\10\41\1\u01cf\11\41\1\0\12\41\3\0\4\41"+
+    "\1\0\10\41\27\0\22\41\1\u01a9\2\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\2\41\1\u01aa\5\41\27\0\10\41\1\u01aa\14\41"+
+    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u01ab\15\41"+
+    "\1\0\5\41\1\u01ab\4\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+
+    "\1\u01ac\17\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
+    "\1\u01ad\15\41\1\0\5\41\1\u01ad\4\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\5\41\1\u01d0\17\41\1\0\3\41\1\u01d0\6\41"+
+    "\27\0\1\u01ae\11\41\1\u01ae\12\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\3\41\1\u01af\4\41\27\0\17\41\1\u01af\5\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\11\41\1\u01b0\13\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\21\41\1\u01b1\3\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\7\41\1\u01b2\4\41\1\u01b3"+
+    "\10\41\1\0\1\41\1\u01b3\3\41\1\u01b2\4\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\24\41\1\u01b4\1\0\2\41\1\u01b4\7\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\1\41\1\u01d1\13\41\1\u01d1\7\41"+
+    "\1\0\10\41\27\0\11\41\1\u01b5\13\41\1\0\6\41"+
+    "\1\u01b5\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\u01b6\1\0\10\41\27\0\22\41\1\u01b6\2\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\5\41\1\u01d2\17\41"+
-    "\1\0\3\41\1\u01d2\6\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+
-    "\1\u01d3\13\41\1\0\6\41\1\u01d3\3\41\3\0\4\41"+
+    "\1\0\1\41\1\0\10\41\27\0\3\41\1\u01b7\2\41"+
+    "\1\u01b7\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+
+    "\1\u01b8\10\41\1\0\1\41\1\u01b8\10\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\2\41\1\u01d4\10\41\1\u01d4\11\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u01d5"+
-    "\1\0\10\41\27\0\22\41\1\u01d5\2\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\u0173\1\0\1\u0173"+
-    "\1\0\10\u0173\27\0\25\u0173\1\0\12\u0173\3\0\4\u0173"+
-    "\1\0\4\u0173\1\0\1\u01d6\1\0\3\142\1\0\2\142"+
-    "\3\0\2\142\1\0\1\142\1\0\3\142\1\0\1\u0174"+
-    "\1\142\1\370\1\142\1\0\15\142\25\0\1\142\12\0"+
-    "\3\142\4\0\1\142\4\0\20\142\1\0\3\142\2\0"+
-    "\1\142\1\370\1\142\1\u0176\111\142\1\u0177\3\142\1\u0177"+
-    "\1\367\1\142\1\370\1\142\1\371\74\142\1\0\1\u0179"+
-    "\1\0\1\u0179\1\0\10\u0179\1\u0177\2\0\1\u01d7\1\u0177"+
-    "\22\0\25\u0179\1\0\12\u0179\3\0\4\u0179\1\0\4\u0179"+
-    "\3\0\15\u0102\1\u017a\3\u0102\1\u017a\116\u0102\1\u017c\3\u0102"+
-    "\1\u017c\101\u0102\15\202\1\203\3\202\1\203\14\202\1\203"+
-    "\4\202\1\203\24\202\1\u01d8\3\202\1\u01d8\26\202\72\0"+
-    "\1\u01d9\3\0\1\u01d9\75\0\1\u01da\23\0\1\u01da\26\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\3\41\1\u01db"+
-    "\2\41\1\u01db\16\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\1\u01dc\11\41\1\u01dc\12\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u01dd\1\0\10\41"+
-    "\27\0\22\41\1\u01dd\2\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\2\41"+
-    "\1\u01de\5\41\27\0\10\41\1\u01de\14\41\1\0\12\41"+
+    "\27\0\7\41\1\u01b9\15\41\1\0\5\41\1\u01b9\4\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\2\41"+
-    "\1\u01df\1\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\25\41\1\0\11\41\1\u01e0\3\0"+
+    "\1\0\10\41\27\0\3\41\1\u01ba\2\41\1\u01ba\11\41"+
+    "\1\u01bb\4\41\1\0\12\41\3\0\4\41\1\0\1\u01bb"+
+    "\3\41\4\0\1\41\1\0\1\u01bc\1\0\10\41\27\0"+
+    "\22\41\1\u01bc\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\11\41\1\u01bd\13\41\1\0\6\41\1\u01bd\3\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\u01be\1\0"+
+    "\10\41\27\0\22\41\1\u01be\2\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\47\0\1\u01bf\11\0\1\u01bf\110\0"+
+    "\1\u01c0\11\0\1\u01c0\113\0\1\u01c1\2\0\1\u01c1\137\0"+
+    "\1\u01c2\25\0\1\u01c2\53\0\1\u01c3\10\0\1\u01c3\110\0"+
+    "\1\u01c4\13\0\1\u01c4\143\0\1\u01c5\73\0\1\u01c6\23\0"+
+    "\1\u01c6\70\0\1\u01c7\13\0\1\u01c7\121\0\1\u01c8\12\0"+
+    "\1\u01c8\30\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\11\41\1\u01c9\13\41\1\0\6\41\1\u01c9\3\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\11\41\1\u01ca\13\41\1\0\6\41\1\u01ca"+
+    "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\5\41\1\u01cb\17\41\1\0"+
+    "\3\41\1\u01cb\4\41\1\u01cc\1\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\2\41\1\u01cd\10\41\1\u01cd\11\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\5\41\1\u01e1\17\41\1\0\3\41\1\u01e1"+
+    "\10\41\27\0\5\41\1\u01ce\17\41\1\0\3\41\1\u01ce"+
     "\6\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+
-    "\1\u01e2\3\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\2\41\1\u01e3\10\41\1\u01e3\11\41"+
+    "\1\41\1\0\10\41\27\0\1\41\1\u01cf\13\41\1\u01cf"+
+    "\7\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01d0"+
+    "\17\41\1\0\3\41\1\u01d0\6\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\11\41\1\u01d1\13\41\1\0\6\41\1\u01d1\3\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\2\41\1\u01d2\10\41\1\u01d2\11\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\u01d3\1\0\10\41\27\0\22\41\1\u01d3\2\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\u0176\1\0"+
+    "\1\u0176\1\0\10\u0176\27\0\25\u0176\1\0\12\u0176\3\0"+
+    "\4\u0176\1\0\4\u0176\1\0\1\u01d4\1\0\3\142\1\0"+
+    "\2\142\3\0\2\142\1\0\1\142\1\0\3\142\1\0"+
+    "\1\u0177\1\142\1\376\1\142\1\0\15\142\25\0\1\142"+
+    "\12\0\3\142\4\0\1\142\4\0\20\142\1\0\3\142"+
+    "\2\0\1\142\1\376\1\142\1\u0179\74\142\15\210\1\211"+
+    "\3\210\1\211\14\210\1\211\4\210\1\211\24\210\1\u01d5"+
+    "\3\210\1\u01d5\26\210\72\0\1\u01d6\3\0\1\u01d6\75\0"+
+    "\1\u01d7\23\0\1\u01d7\26\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\3\41\1\u01d8\2\41\1\u01d8\16\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\1\u01d9\11\41\1\u01d9\12\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u01e4\1\0\10\41\27\0\22\41\1\u01e4\2\41"+
+    "\1\0\1\u01da\1\0\10\41\27\0\22\41\1\u01da\2\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u01e5\13\41"+
-    "\1\0\6\41\1\u01e5\3\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u01e6\15\41\1\0\5\41\1\u01e6\4\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\25\41\1\0\12\41\3\0\3\41\1\u01e7\1\0"+
-    "\4\41\4\0\1\u0193\1\0\1\u0193\1\0\10\u0193\1\u01e8"+
-    "\3\0\1\u01e9\22\0\25\u0193\1\0\12\u0193\3\0\4\u0193"+
-    "\1\0\4\u0193\6\0\1\u01ea\2\0\3\u01ea\1\0\2\u01ea"+
-    "\30\0\25\u01ea\1\0\12\u01ea\3\0\4\u01ea\1\0\4\u01ea"+
-    "\6\0\1\u01eb\2\0\3\u01eb\1\0\2\u01eb\30\0\25\u01eb"+
-    "\1\0\12\u01eb\3\0\4\u01eb\1\0\4\u01eb\50\0\1\u01ec"+
-    "\13\0\1\u01ec\42\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\41\1\u01ed\13\41\1\u01ed\7\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\5\41\1\u01ee\17\41\1\0\3\41"+
-    "\1\u01ee\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\1\41\1\u01ef\13\41"+
-    "\1\u01ef\7\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\1\0\1\41\1\0\2\41\1\u01db\5\41\27\0\10\41"+
+    "\1\u01db\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\1\u01f0\3\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u01f1"+
-    "\10\41\1\0\1\41\1\u01f1\10\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\25\41\1\0\10\41\1\u01f2\1\41\3\0\4\41\1\0"+
+    "\1\0\12\41\3\0\2\41\1\u01dc\1\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
+    "\1\0\11\41\1\u01dd\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\5\41\1\u01de"+
+    "\17\41\1\0\3\41\1\u01de\6\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\2\41\1\u01f3\10\41\1\u01f3\11\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\1\41\1\u01f4\13\41\1\u01f4\7\41\1\0"+
+    "\25\41\1\0\12\41\3\0\1\u01df\3\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+
+    "\1\u01e0\10\41\1\u01e0\11\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\u01e1\1\0\10\41"+
+    "\27\0\22\41\1\u01e1\2\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\11\41\1\u01e2\13\41\1\0\6\41\1\u01e2\3\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\7\41\1\u01e3\15\41\1\0\5\41"+
+    "\1\u01e3\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+
+    "\3\0\3\41\1\u01e4\1\0\4\41\4\0\1\u0191\1\0"+
+    "\1\u0191\1\0\10\u0191\1\u01e5\3\0\1\u01e6\22\0\25\u0191"+
+    "\1\0\12\u0191\3\0\4\u0191\1\0\4\u0191\6\0\1\u01e7"+
+    "\2\0\3\u01e7\1\0\2\u01e7\30\0\25\u01e7\1\0\12\u01e7"+
+    "\3\0\4\u01e7\1\0\4\u01e7\6\0\1\u01e8\2\0\3\u01e8"+
+    "\1\0\2\u01e8\30\0\25\u01e8\1\0\12\u01e8\3\0\4\u01e8"+
+    "\1\0\4\u01e8\50\0\1\u01e9\13\0\1\u01e9\42\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\1\41\1\u01ea\13\41"+
+    "\1\u01ea\7\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+
+    "\1\u01eb\17\41\1\0\3\41\1\u01eb\6\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\1\41\1\u01ec\13\41\1\u01ec\7\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\1\u01ed"+
+    "\3\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\14\41\1\u01ee\10\41\1\0\1\41\1\u01ee"+
+    "\10\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\25\41\1\0\10\41\1\u01ef"+
+    "\1\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\2\41\1\u01f0\10\41\1\u01f0"+
+    "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\1\41\1\u01f1"+
+    "\13\41\1\u01f1\7\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u01f2\1\0\10\41\27\0"+
+    "\2\41\1\u01f3\10\41\1\u01f3\6\41\1\u01f2\2\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\25\41\1\0\10\41\1\u01f4"+
+    "\1\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\13\41\1\u01f5\11\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\u01f5\1\0\10\41\27\0\2\41\1\u01f6\10\41\1\u01f6"+
-    "\6\41\1\u01f5\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\0\10\41\27\0\7\41\1\u01f6\15\41\1\0"+
+    "\5\41\1\u01f6\4\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\u01f7\1\0\10\41\27\0\22\41\1\u01f7"+
+    "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u01f8"+
+    "\15\41\1\0\5\41\1\u01f8\4\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\25\41\1\0\10\41\1\u01f7\1\41\3\0\4\41\1\0"+
+    "\25\41\1\0\12\41\3\0\2\41\1\u01f9\1\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\13\41\1\u01f8\11\41\1\0\12\41\3\0\4\41\1\0"+
+    "\7\41\1\u01fa\15\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\7\41\1\u01f9\15\41\1\0\5\41\1\u01f9\4\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\u01fa\1\0"+
-    "\10\41\27\0\22\41\1\u01fa\2\41\1\0\12\41\3\0"+
+    "\24\41\1\u01fb\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\5\41"+
+    "\1\u01fc\17\41\1\0\3\41\1\u01fc\6\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\6\41\1\u01fd\16\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\24\41\1\u01fe\1\0\2\41\1\u01fe\7\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\7\41\1\u01fb\15\41\1\0\5\41\1\u01fb"+
-    "\4\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+
-    "\2\41\1\u01fc\1\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\7\41\1\u01fd\15\41\1\0"+
+    "\10\41\27\0\2\41\1\u01ff\10\41\1\u01ff\11\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\24\41\1\u01fe\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\5\41\1\u01ff\17\41\1\0\3\41"+
-    "\1\u01ff\6\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\6\41\1\u0200\16\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\24\41\1\u0201\1\0"+
-    "\2\41\1\u0201\7\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0202"+
-    "\10\41\1\u0202\11\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\0\10\41\27\0\5\41\1\u0200\17\41\1\0"+
+    "\3\41\1\u0200\6\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0201"+
+    "\15\41\1\0\5\41\1\u0201\4\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\5\41\1\u0203\17\41\1\0\3\41\1\u0203\6\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\7\41\1\u0204\15\41\1\0\5\41\1\u0204"+
-    "\4\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\25\41\1\0\11\41\1\u0205"+
+    "\25\41\1\0\11\41\1\u0202\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+
+    "\1\u0203\10\41\1\u0203\11\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\u0204\1\0\10\41"+
+    "\27\0\22\41\1\u0204\2\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\14\41\1\u0205\10\41\1\0\1\41\1\u0205\10\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0206"+
+    "\1\0\10\41\27\0\22\41\1\u0206\2\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\2\41\1\u0206\10\41\1\u0206\11\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u0207\1\0\10\41\27\0\22\41\1\u0207\2\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\14\41\1\u0208\10\41"+
-    "\1\0\1\41\1\u0208\10\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\u0209\1\0\10\41\27\0\22\41"+
-    "\1\u0209\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u020a\15\41\1\0\5\41\1\u020a\4\41\3\0\4\41"+
+    "\1\0\10\41\27\0\7\41\1\u0207\15\41\1\0\5\41"+
+    "\1\u0207\4\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\2\41\1\u0208\10\41"+
+    "\1\u0208\11\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+
+    "\1\u0209\2\41\1\u0209\16\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\2\41\1\u020b\10\41\1\u020b\11\41\1\0\12\41"+
+    "\27\0\5\41\1\u020a\17\41\1\0\3\41\1\u020a\6\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\3\41\1\u020c\2\41\1\u020c\16\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\5\41\1\u020d\17\41"+
-    "\1\0\3\41\1\u020d\6\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u020e\15\41\1\0\5\41\1\u020e\4\41\3\0\4\41"+
-    "\1\0\4\41\51\0\1\u020f\10\0\1\u020f\120\0\1\u0210"+
-    "\22\0\1\u0210\70\0\1\u0211\10\0\1\u0211\46\0\1\u0212"+
-    "\62\0\1\u0212\111\0\1\u0213\22\0\1\u0213\70\0\1\u0214"+
-    "\10\0\1\u0214\53\0\1\u0215\52\0\1\u0215\42\0\1\u0216"+
-    "\12\0\1\u0213\47\0\1\u0216\2\0\1\u0217\102\0\1\u0218"+
-    "\23\0\1\u0218\30\0\1\u020f\62\0\1\u020f\35\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\4\41\1\u0219\14\41"+
-    "\1\u0219\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\u021a\1\0\10\41\27\0\22\41"+
-    "\1\u021a\2\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+
-    "\1\u021b\13\41\1\0\6\41\1\u021b\3\41\3\0\4\41"+
+    "\1\0\10\41\27\0\7\41\1\u020b\15\41\1\0\5\41"+
+    "\1\u020b\4\41\3\0\4\41\1\0\4\41\51\0\1\u020c"+
+    "\10\0\1\u020c\120\0\1\u020d\22\0\1\u020d\70\0\1\u020e"+
+    "\10\0\1\u020e\46\0\1\u020f\62\0\1\u020f\111\0\1\u0210"+
+    "\22\0\1\u0210\70\0\1\u0211\10\0\1\u0211\53\0\1\u0212"+
+    "\52\0\1\u0212\42\0\1\u0213\12\0\1\u0210\47\0\1\u0213"+
+    "\2\0\1\u0214\102\0\1\u0215\23\0\1\u0215\30\0\1\u020c"+
+    "\62\0\1\u020c\35\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\4\41\1\u0216\14\41\1\u0216\3\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0217"+
+    "\1\0\10\41\27\0\22\41\1\u0217\2\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\11\41\1\u0218\13\41\1\0\6\41"+
+    "\1\u0218\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\3\41\1\u0219\2\41"+
+    "\1\u0219\16\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
+    "\1\0\12\41\3\0\1\41\1\u021a\2\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+
+    "\1\u021b\13\41\1\u021b\7\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\3\41\1\u021c\2\41\1\u021c\16\41\1\0\12\41"+
+    "\27\0\2\41\1\u021c\10\41\1\u021c\11\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\1\41"+
-    "\1\u021d\2\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\1\41\1\u021e\13\41\1\u021e\7\41"+
+    "\1\0\10\41\27\0\3\41\1\u021d\2\41\1\u021d\16\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\2\41\1\u021f\10\41"+
-    "\1\u021f\11\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+
-    "\1\u0220\2\41\1\u0220\16\41\1\0\12\41\3\0\4\41"+
+    "\1\0\1\41\1\0\10\41\27\0\2\41\1\u021e\10\41"+
+    "\1\u021e\11\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+
+    "\1\u021f\13\41\1\0\6\41\1\u021f\3\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\2\41\1\u0221\10\41\1\u0221\11\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\11\41\1\u0222\13\41\1\0\6\41"+
-    "\1\u0222\3\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0223\15\41"+
-    "\1\0\5\41\1\u0223\4\41\3\0\4\41\1\0\4\41"+
-    "\20\0\1\u0177\3\0\1\u0177\101\0\15\202\1\203\3\202"+
-    "\1\203\14\202\1\203\4\202\1\203\1\202\1\u0224\13\202"+
-    "\1\u0224\41\202\72\0\1\u0225\3\0\1\u0225\25\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\4\41\1\u0226\14\41"+
-    "\1\u0226\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\27\0\7\41\1\u0220\15\41\1\0\5\41\1\u0220\4\41"+
+    "\3\0\4\41\1\0\4\41\3\0\15\210\1\211\3\210"+
+    "\1\211\14\210\1\211\4\210\1\211\1\210\1\u0221\13\210"+
+    "\1\u0221\41\210\72\0\1\u0222\3\0\1\u0222\25\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\4\41\1\u0223\14\41"+
+    "\1\u0223\3\41\1\0\12\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\41"+
-    "\1\u0227\13\41\1\u0227\7\41\1\0\12\41\3\0\4\41"+
+    "\1\u0224\13\41\1\u0224\7\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\24\41\1\u0228\1\0\2\41\1\u0228\7\41\3\0"+
+    "\27\0\24\41\1\u0225\1\0\2\41\1\u0225\7\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\5\41\1\u0229\17\41\1\0\3\41\1\u0229"+
+    "\10\41\27\0\5\41\1\u0226\17\41\1\0\3\41\1\u0226"+
     "\6\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\5\41\1\u022a\17\41\1\0"+
-    "\3\41\1\u022a\6\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\2\41\1\u022b\5\41\27\0"+
-    "\10\41\1\u022b\14\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\0\10\41\27\0\5\41\1\u0227\17\41\1\0"+
+    "\3\41\1\u0227\6\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\2\41\1\u0228\5\41\27\0"+
+    "\10\41\1\u0228\14\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\24\41\1\u022c\1\0\2\41\1\u022c\7\41\3\0\4\41"+
+    "\24\41\1\u0229\1\0\2\41\1\u0229\7\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\11\41\1\u022d\13\41\1\0\6\41\1\u022d\3\41"+
+    "\27\0\11\41\1\u022a\13\41\1\0\6\41\1\u022a\3\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\5\41\1\u022e\17\41\1\0\3\41"+
-    "\1\u022e\6\41\3\0\4\41\1\0\4\41\20\0\1\u01e8"+
-    "\106\0\1\u01ea\1\0\1\u01ea\1\0\10\u01ea\6\0\1\u022f"+
-    "\20\0\25\u01ea\1\0\12\u01ea\3\0\4\u01ea\1\0\4\u01ea"+
-    "\4\0\1\u01eb\1\0\1\u01eb\1\0\10\u01eb\27\0\25\u01eb"+
-    "\1\0\12\u01eb\1\u0230\2\0\4\u01eb\1\0\4\u01eb\54\0"+
-    "\1\u0231\23\0\1\u0231\26\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\3\41\1\u0232\2\41\1\u0232\16\41\1\0"+
+    "\1\0\10\41\27\0\5\41\1\u022b\17\41\1\0\3\41"+
+    "\1\u022b\6\41\3\0\4\41\1\0\4\41\20\0\1\u01e5"+
+    "\106\0\1\u01e7\1\0\1\u01e7\1\0\10\u01e7\6\0\1\u022c"+
+    "\20\0\25\u01e7\1\0\12\u01e7\3\0\4\u01e7\1\0\4\u01e7"+
+    "\4\0\1\u01e8\1\0\1\u01e8\1\0\10\u01e8\27\0\25\u01e8"+
+    "\1\0\12\u01e8\1\u022d\2\0\4\u01e8\1\0\4\u01e8\54\0"+
+    "\1\u022e\23\0\1\u022e\26\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\3\41\1\u022f\2\41\1\u022f\16\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\1\41\1\u0233\13\41\1\u0233"+
+    "\1\41\1\0\10\41\27\0\1\41\1\u0230\13\41\1\u0230"+
     "\7\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0234"+
-    "\10\41\1\u0234\11\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0231"+
+    "\10\41\1\u0231\11\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\25\41\1\0\1\u0235\3\41\1\u0235\5\41\3\0\4\41"+
+    "\25\41\1\0\1\u0232\3\41\1\u0232\5\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\11\41\1\u0236\13\41\1\0\6\41\1\u0236\3\41"+
+    "\27\0\11\41\1\u0233\13\41\1\0\6\41\1\u0233\3\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\1\41\1\u0237\13\41\1\u0237\7\41"+
+    "\1\0\10\41\27\0\1\41\1\u0234\13\41\1\u0234\7\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\2\41\1\u0238\5\41\27\0\10\41"+
-    "\1\u0238\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\1\0\1\41\1\0\2\41\1\u0235\5\41\27\0\10\41"+
+    "\1\u0235\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\2\41"+
-    "\1\u0239\10\41\1\u0239\11\41\1\0\12\41\3\0\4\41"+
+    "\1\u0236\10\41\1\u0236\11\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\3\41\1\u023a\2\41\1\u023a\16\41\1\0\12\41"+
+    "\27\0\3\41\1\u0237\2\41\1\u0237\16\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\4\41\1\u023b\14\41\1\u023b\3\41"+
+    "\1\0\10\41\27\0\4\41\1\u0238\14\41\1\u0238\3\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\17\41\1\u023c\5\41"+
+    "\1\0\1\41\1\0\10\41\27\0\17\41\1\u0239\5\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+
-    "\3\0\1\41\1\u023d\2\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u023e\15\41"+
+    "\3\0\1\41\1\u023a\2\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u023b\15\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\24\41\1\u023f\1\0"+
-    "\2\41\1\u023f\7\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\16\41\1\u0240"+
+    "\1\0\1\41\1\0\10\41\27\0\24\41\1\u023c\1\0"+
+    "\2\41\1\u023c\7\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\16\41\1\u023d"+
     "\6\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
     "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
-    "\11\41\1\u0241\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u0242\13\41"+
-    "\1\0\6\41\1\u0242\3\41\3\0\4\41\1\0\4\41"+
+    "\11\41\1\u023e\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u023f\13\41"+
+    "\1\0\6\41\1\u023f\3\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\3\41"+
-    "\1\u0243\2\41\1\u0243\16\41\1\0\12\41\3\0\4\41"+
+    "\1\u0240\2\41\1\u0240\16\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\3\41"+
-    "\1\u0244\4\41\27\0\17\41\1\u0244\5\41\1\0\12\41"+
+    "\1\u0241\4\41\27\0\17\41\1\u0241\5\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\24\41\1\u0245\1\0\2\41\1\u0245"+
+    "\1\0\10\41\27\0\24\41\1\u0242\1\0\2\41\1\u0242"+
     "\7\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\7\41\1\u0246\15\41\1\0"+
-    "\5\41\1\u0246\4\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0247"+
-    "\15\41\1\0\5\41\1\u0247\4\41\3\0\4\41\1\0"+
+    "\1\41\1\0\10\41\27\0\7\41\1\u0243\15\41\1\0"+
+    "\5\41\1\u0243\4\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0244"+
+    "\15\41\1\0\5\41\1\u0244\4\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\24\41\1\u0248\1\0\2\41\1\u0248\7\41\3\0\4\41"+
-    "\1\0\4\41\56\0\1\u0213\23\0\1\u0213\26\0\1\u0249"+
-    "\12\0\1\u0213\47\0\1\u0249\2\0\1\u0217\76\0\1\u0214"+
-    "\13\0\1\u0214\131\0\1\u020f\3\0\1\u020f\44\0\1\u0213"+
-    "\52\0\1\u0217\140\0\1\u0213\70\0\1\u024a\22\0\1\u024a"+
-    "\104\0\1\u024b\16\0\1\u024b\70\0\1\u024c\2\0\1\u024c"+
-    "\51\0\1\41\1\0\1\41\1\0\10\41\2\u024d\2\0"+
-    "\1\u024d\22\0\25\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\u024e\1\0\10\41\27\0"+
-    "\22\41\1\u024e\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\24\41\1\u0245\1\0\2\41\1\u0245\7\41\3\0\4\41"+
+    "\1\0\4\41\56\0\1\u0210\23\0\1\u0210\26\0\1\u0246"+
+    "\12\0\1\u0210\47\0\1\u0246\2\0\1\u0214\76\0\1\u0211"+
+    "\13\0\1\u0211\131\0\1\u020c\3\0\1\u020c\44\0\1\u0210"+
+    "\52\0\1\u0214\140\0\1\u0210\70\0\1\u0247\22\0\1\u0247"+
+    "\104\0\1\u0248\16\0\1\u0248\70\0\1\u0249\2\0\1\u0249"+
+    "\51\0\1\41\1\0\1\41\1\0\10\41\2\u024a\2\0"+
+    "\1\u024a\22\0\25\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u024b\1\0\10\41\27\0"+
+    "\22\41\1\u024b\2\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\24\41\1\u024f\1\0\2\41\1\u024f\7\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u0250\1\0\10\41"+
-    "\27\0\22\41\1\u0250\2\41\1\0\12\41\3\0\4\41"+
+    "\24\41\1\u024c\1\0\2\41\1\u024c\7\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\u024d\1\0\10\41"+
+    "\27\0\22\41\1\u024d\2\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
     "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+
-    "\1\u0251\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\5\41\1\u0252\17\41\1\0\3\41\1\u0252\6\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0253"+
-    "\1\0\10\41\27\0\22\41\1\u0253\2\41\1\0\12\41"+
+    "\1\u024e\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\5\41\1\u024f\17\41\1\0\3\41\1\u024f\6\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u0250"+
+    "\1\0\10\41\27\0\22\41\1\u0250\2\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\14\41\1\u0254\10\41\1\0\1\41"+
-    "\1\u0254\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0255\15\41"+
-    "\1\0\5\41\1\u0255\4\41\3\0\4\41\1\0\4\41"+
+    "\1\0\10\41\27\0\14\41\1\u0251\10\41\1\0\1\41"+
+    "\1\u0251\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0252\15\41"+
+    "\1\0\5\41\1\u0252\4\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\11\41\1\u0256\3\0\4\41\1\0\4\41\3\0"+
-    "\15\202\1\203\3\202\1\203\14\202\1\203\4\202\1\203"+
-    "\5\202\1\u0257\23\202\1\u0257\25\202\53\0\1\u0258\23\0"+
-    "\1\u0258\24\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\14\41\1\u0259\10\41\1\0\1\41\1\u0259\10\41\3\0"+
-    "\4\41\1\0\4\41\4\0\1\41\1\0\1\u025a\1\0"+
-    "\10\41\27\0\22\41\1\u025a\2\41\1\0\12\41\3\0"+
+    "\1\0\11\41\1\u0253\3\0\4\41\1\0\4\41\3\0"+
+    "\15\210\1\211\3\210\1\211\14\210\1\211\4\210\1\211"+
+    "\5\210\1\u0254\23\210\1\u0254\25\210\53\0\1\u0255\23\0"+
+    "\1\u0255\24\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\14\41\1\u0256\10\41\1\0\1\41\1\u0256\10\41\3\0"+
+    "\4\41\1\0\4\41\4\0\1\41\1\0\1\u0257\1\0"+
+    "\10\41\27\0\22\41\1\u0257\2\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\11\41\1\u025b\13\41\1\0\6\41\1\u025b"+
+    "\10\41\27\0\11\41\1\u0258\13\41\1\0\6\41\1\u0258"+
     "\3\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\7\41\1\u025c\15\41\1\0"+
-    "\5\41\1\u025c\4\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\11\41\1\u025d"+
-    "\13\41\1\0\6\41\1\u025d\3\41\3\0\4\41\1\0"+
+    "\1\41\1\0\10\41\27\0\7\41\1\u0259\15\41\1\0"+
+    "\5\41\1\u0259\4\41\3\0\4\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\11\41\1\u025a"+
+    "\13\41\1\0\6\41\1\u025a\3\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\25\41\1\0\11\41\1\u025e\3\0\4\41\1\0\4\41"+
+    "\25\41\1\0\11\41\1\u025b\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\1\u025f\3\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\1\u0260\11\41"+
-    "\1\u0260\12\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\20\0\1\u01e8\3\0\1\u01e9\116\0\1\u0261\3\0\1\u0262"+
-    "\173\0\1\u0263\3\0\1\u0263\25\0\1\41\1\0\1\u0264"+
-    "\1\0\10\41\27\0\22\41\1\u0264\2\41\1\0\12\41"+
+    "\1\0\12\41\3\0\1\u025c\3\41\1\0\4\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\1\u025d\11\41"+
+    "\1\u025d\12\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\20\0\1\u01e5\3\0\1\u01e6\116\0\1\u025e\3\0\1\u025f"+
+    "\173\0\1\u0260\3\0\1\u0260\25\0\1\41\1\0\1\u0261"+
+    "\1\0\10\41\27\0\22\41\1\u0261\2\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\24\41\1\u0265\1\0\2\41\1\u0265"+
+    "\1\0\10\41\27\0\24\41\1\u0262\1\0\2\41\1\u0262"+
     "\7\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\2\41\1\u0266\10\41\1\u0266"+
+    "\1\41\1\0\10\41\27\0\2\41\1\u0263\10\41\1\u0263"+
     "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0267"+
-    "\15\41\1\0\5\41\1\u0267\4\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\u0268\1\0\10\41\27\0"+
-    "\22\41\1\u0268\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\7\41\1\u0264"+
+    "\15\41\1\0\5\41\1\u0264\4\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u0265\1\0\10\41\27\0"+
+    "\22\41\1\u0265\2\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\2\41\1\u0269\10\41\1\u0269\11\41\1\0\12\41\3\0"+
+    "\2\41\1\u0266\10\41\1\u0266\11\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\4\41\1\u026a\14\41\1\u026a\3\41\1\0"+
+    "\10\41\27\0\4\41\1\u0267\14\41\1\u0267\3\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\24\41\1\u026b\1\0\2\41"+
-    "\1\u026b\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u026c\1\0\10\41\27\0\22\41\1\u026c\2\41"+
+    "\1\41\1\0\10\41\27\0\24\41\1\u0268\1\0\2\41"+
+    "\1\u0268\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\u0269\1\0\10\41\27\0\22\41\1\u0269\2\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u026d\13\41"+
+    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u026a\13\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u026e\1\0\10\41\27\0\22\41\1\u026e\2\41"+
+    "\1\0\1\u026b\1\0\10\41\27\0\22\41\1\u026b\2\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\10\41"+
-    "\1\u026f\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u0270\13\41"+
-    "\1\0\6\41\1\u0270\3\41\3\0\4\41\1\0\4\41"+
+    "\1\u026c\1\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\11\41\1\u026d\13\41"+
+    "\1\0\6\41\1\u026d\3\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\7\41"+
-    "\1\u0271\15\41\1\0\5\41\1\u0271\4\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u0272\1\0\10\41"+
-    "\27\0\22\41\1\u0272\2\41\1\0\12\41\3\0\4\41"+
-    "\1\0\4\41\51\0\1\u0273\10\0\1\u0273\46\0\1\u0213"+
-    "\62\0\1\u0213\37\0\1\u0274\62\0\1\u0274\116\0\1\u0213"+
-    "\16\0\1\u0213\30\0\1\u0275\5\0\2\u024d\2\0\1\u024d"+
-    "\32\0\1\u0275\47\0\1\41\1\0\1\41\1\0\10\41"+
+    "\1\u026e\15\41\1\0\5\41\1\u026e\4\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\u026f\1\0\10\41"+
+    "\27\0\22\41\1\u026f\2\41\1\0\12\41\3\0\4\41"+
+    "\1\0\4\41\51\0\1\u0270\10\0\1\u0270\46\0\1\u0210"+
+    "\62\0\1\u0210\37\0\1\u0271\62\0\1\u0271\116\0\1\u0210"+
+    "\16\0\1\u0210\30\0\1\u0272\5\0\2\u024a\2\0\1\u024a"+
+    "\32\0\1\u0272\47\0\1\41\1\0\1\41\1\0\10\41"+
     "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+
-    "\1\u0276\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\7\41\1\u0277\15\41\1\0\5\41\1\u0277\4\41"+
+    "\1\u0273\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\7\41\1\u0274\15\41\1\0\5\41\1\u0274\4\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\14\41\1\u0278\10\41\1\0\1\41"+
-    "\1\u0278\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\10\41\27\0\14\41\1\u0275\10\41\1\0\1\41"+
+    "\1\u0275\10\41\3\0\4\41\1\0\4\41\4\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+
-    "\3\0\4\41\1\0\2\41\1\u0279\1\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u027a\15\41"+
-    "\1\0\5\41\1\u027a\4\41\3\0\4\41\1\0\4\41"+
+    "\3\0\4\41\1\0\2\41\1\u0276\1\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\7\41\1\u0277\15\41"+
+    "\1\0\5\41\1\u0277\4\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u027b\1\41"+
+    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0278\1\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\14\41"+
-    "\1\u027c\10\41\1\0\1\41\1\u027c\10\41\3\0\4\41"+
+    "\1\u0279\10\41\1\0\1\41\1\u0279\10\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
     "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+
-    "\1\u027d\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\u027e\11\41\1\u027e\12\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\3\0\15\202\1\203\3\202\1\203"+
-    "\14\202\1\203\4\202\1\203\26\202\1\u027f\3\202\1\u027f"+
-    "\24\202\15\0\2\u0280\2\0\1\u0280\102\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\2\41\1\u0281\10\41\1\u0281"+
+    "\1\u027a\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\1\u027b\11\41\1\u027b\12\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\3\0\15\210\1\211\3\210\1\211"+
+    "\14\210\1\211\4\210\1\211\26\210\1\u027c\3\210\1\u027c"+
+    "\24\210\15\0\2\u027d\2\0\1\u027d\102\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\2\41\1\u027e\10\41\1\u027e"+
     "\11\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u0282"+
-    "\10\41\1\u0282\11\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\2\41\1\u027f"+
+    "\10\41\1\u027f\11\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\24\41\1\u0283\1\0\2\41\1\u0283\7\41\3\0\4\41"+
-    "\1\0\4\41\4\0\1\41\1\0\1\u0284\1\0\10\41"+
-    "\27\0\22\41\1\u0284\2\41\1\0\12\41\3\0\4\41"+
+    "\24\41\1\u0280\1\0\2\41\1\u0280\7\41\3\0\4\41"+
+    "\1\0\4\41\4\0\1\41\1\0\1\u0281\1\0\10\41"+
+    "\27\0\22\41\1\u0281\2\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\3\41\1\u0285\2\41\1\u0285\16\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\20\0\1\u0261\160\0\1\u0286"+
-    "\23\0\1\u0286\24\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\3\41\1\u0282\2\41\1\u0282\16\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\20\0\1\u025e\160\0\1\u0283"+
+    "\23\0\1\u0283\24\0\1\41\1\0\1\41\1\0\10\41"+
     "\27\0\25\41\1\0\12\41\3\0\4\41\1\0\2\41"+
-    "\1\u0287\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\7\41\1\u0288\15\41\1\0\5\41\1\u0288\4\41"+
+    "\1\u0284\1\41\4\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\7\41\1\u0285\15\41\1\0\5\41\1\u0285\4\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\24\41\1\u0289\1\0\2\41\1\u0289"+
+    "\1\0\10\41\27\0\24\41\1\u0286\1\0\2\41\1\u0286"+
     "\7\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\24\41\1\u028a\1\0\2\41"+
-    "\1\u028a\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\1\u028b\11\41\1\u028b"+
+    "\1\41\1\0\10\41\27\0\24\41\1\u0287\1\0\2\41"+
+    "\1\u0287\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\1\u0288\11\41\1\u0288"+
     "\12\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\u028c\1\0\10\41\27\0\22\41\1\u028c"+
+    "\1\41\1\0\1\u0289\1\0\10\41\27\0\22\41\1\u0289"+
     "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
     "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
-    "\12\41\3\0\4\41\1\0\2\41\1\u028d\1\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\22\41\1\u028e"+
+    "\12\41\3\0\4\41\1\0\2\41\1\u028a\1\41\4\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\22\41\1\u028b"+
     "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\3\41\1\u028f"+
-    "\2\41\1\u028f\16\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\u0290\1\0\10\41\27\0"+
-    "\22\41\1\u0290\2\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\u0291\1\0\10\41\27\0"+
-    "\22\41\1\u0291\2\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\4\0\1\41\1\0\1\u0292\1\0\10\41\27\0"+
-    "\22\41\1\u0292\2\41\1\0\12\41\3\0\4\41\1\0"+
-    "\4\41\52\0\1\u0213\2\0\1\u0213\115\0\1\u0213\13\0"+
-    "\1\u0213\106\0\1\u0293\13\0\1\u0293\42\0\1\41\1\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\3\41\1\u028c"+
+    "\2\41\1\u028c\16\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u028d\1\0\10\41\27\0"+
+    "\22\41\1\u028d\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u028e\1\0\10\41\27\0"+
+    "\22\41\1\u028e\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\4\0\1\41\1\0\1\u028f\1\0\10\41\27\0"+
+    "\22\41\1\u028f\2\41\1\0\12\41\3\0\4\41\1\0"+
+    "\4\41\52\0\1\u0210\2\0\1\u0210\115\0\1\u0210\13\0"+
+    "\1\u0210\106\0\1\u0290\13\0\1\u0290\42\0\1\41\1\0"+
     "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+
-    "\4\41\1\0\2\41\1\u0294\1\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\5\41\1\u0295\17\41\1\0"+
-    "\3\41\1\u0295\6\41\3\0\4\41\1\0\4\41\4\0"+
+    "\4\41\1\0\2\41\1\u0291\1\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\5\41\1\u0292\17\41\1\0"+
+    "\3\41\1\u0292\6\41\3\0\4\41\1\0\4\41\4\0"+
     "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
-    "\1\u0296\3\41\1\u0296\5\41\3\0\4\41\1\0\4\41"+
+    "\1\u0293\3\41\1\u0293\5\41\3\0\4\41\1\0\4\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0297\1\41"+
+    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0294\1\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0298\1\41"+
+    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0295\1\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0299\1\41"+
+    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u0296\1\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\24\41"+
-    "\1\u029a\1\0\2\41\1\u029a\7\41\3\0\4\41\1\0"+
+    "\1\u0297\1\0\2\41\1\u0297\7\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\4\41\1\u029b\14\41\1\u029b\3\41\1\0\12\41\3\0"+
-    "\4\41\1\0\4\41\3\0\15\202\1\203\3\202\1\203"+
-    "\14\202\1\203\4\202\1\203\7\202\1\u029c\23\202\1\u029c"+
-    "\23\202\15\0\2\u0280\2\0\1\u0280\33\0\1\u029d\22\0"+
-    "\1\u029d\23\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\24\41\1\u029e\1\0\2\41\1\u029e\7\41\3\0\4\41"+
+    "\4\41\1\u0298\14\41\1\u0298\3\41\1\0\12\41\3\0"+
+    "\4\41\1\0\4\41\3\0\15\210\1\211\3\210\1\211"+
+    "\14\210\1\211\4\210\1\211\7\210\1\u0299\23\210\1\u0299"+
+    "\23\210\15\0\2\u027d\2\0\1\u027d\33\0\1\u029a\22\0"+
+    "\1\u029a\23\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\24\41\1\u029b\1\0\2\41\1\u029b\7\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\41\1\u029f\13\41\1\u029f\7\41\1\0\12\41"+
+    "\27\0\1\41\1\u029c\13\41\1\u029c\7\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\25\41\1\0\11\41\1\u02a0\3\0"+
-    "\4\41\1\0\4\41\33\0\1\u02a1\73\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\1\u02a2\11\41\1\u02a2\12\41"+
+    "\1\0\10\41\27\0\25\41\1\0\11\41\1\u029d\3\0"+
+    "\4\41\1\0\4\41\33\0\1\u029e\73\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\1\u029f\11\41\1\u029f\12\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u02a3\1\0\10\41\27\0\22\41\1\u02a3\2\41"+
+    "\1\0\1\u02a0\1\0\10\41\27\0\22\41\1\u02a0\2\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\u02a4\1\0\10\41\27\0\22\41\1\u02a4\2\41"+
+    "\1\0\1\u02a1\1\0\10\41\27\0\22\41\1\u02a1\2\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\2\41\1\u02a5\5\41\27\0\10\41"+
-    "\1\u02a5\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+
-    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u02a6"+
-    "\11\41\1\u02a6\12\41\1\0\12\41\3\0\4\41\1\0"+
+    "\1\0\1\41\1\0\2\41\1\u02a2\5\41\27\0\10\41"+
+    "\1\u02a2\14\41\1\0\12\41\3\0\4\41\1\0\4\41"+
+    "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\1\u02a3"+
+    "\11\41\1\u02a3\12\41\1\0\12\41\3\0\4\41\1\0"+
     "\4\41\4\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\1\u02a7\11\41\1\u02a7\12\41\1\0\12\41\3\0\4\41"+
+    "\1\u02a4\11\41\1\u02a4\12\41\1\0\12\41\3\0\4\41"+
     "\1\0\4\41\4\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\7\41\1\u02a8\15\41\1\0\5\41\1\u02a8\4\41"+
+    "\27\0\7\41\1\u02a5\15\41\1\0\5\41\1\u02a5\4\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\4\41\1\u02a9\14\41\1\u02a9\3\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\47\0\1\u02aa"+
-    "\11\0\1\u02aa\45\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\u02ab\11\41\1\u02ab\12\41\1\0\12\41\3\0"+
+    "\1\0\10\41\27\0\4\41\1\u02a6\14\41\1\u02a6\3\41"+
+    "\1\0\12\41\3\0\4\41\1\0\4\41\47\0\1\u02a7"+
+    "\11\0\1\u02a7\45\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\1\u02a8\11\41\1\u02a8\12\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\2\41\1\u02ac\10\41\1\u02ac\11\41\1\0"+
+    "\10\41\27\0\2\41\1\u02a9\10\41\1\u02a9\11\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
     "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+
-    "\4\41\1\0\2\41\1\u02ad\1\41\4\0\1\41\1\0"+
+    "\4\41\1\0\2\41\1\u02aa\1\41\4\0\1\41\1\0"+
     "\1\41\1\0\10\41\27\0\25\41\1\0\12\41\3\0"+
-    "\4\41\1\0\2\41\1\u02ae\1\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\1\u02af\11\41\1\u02af\12\41"+
+    "\4\41\1\0\2\41\1\u02ab\1\41\4\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\1\u02ac\11\41\1\u02ac\12\41"+
     "\1\0\12\41\3\0\4\41\1\0\4\41\4\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+
-    "\3\0\4\41\1\0\2\41\1\u02b0\1\41\3\0\15\202"+
-    "\1\203\3\202\1\203\6\202\1\u02b1\5\202\1\203\4\202"+
-    "\1\203\57\202\46\0\1\u02b2\10\0\1\u02b2\44\0\1\41"+
+    "\3\0\4\41\1\0\2\41\1\u02ad\1\41\3\0\15\210"+
+    "\1\211\3\210\1\211\6\210\1\u02ae\5\210\1\211\4\210"+
+    "\1\211\57\210\46\0\1\u02af\10\0\1\u02af\44\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\11\41"+
-    "\1\u02b3\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\u02b4\1\0\10\41\27\0\22\41\1\u02b4\2\41\1\0"+
-    "\12\41\3\0\4\41\1\0\4\41\20\0\2\u02a1\2\0"+
-    "\1\u02a1\102\0\1\41\1\0\1\41\1\0\10\41\27\0"+
-    "\3\41\1\u02b5\2\41\1\u02b5\16\41\1\0\12\41\3\0"+
+    "\1\u02b0\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
+    "\1\u02b1\1\0\10\41\27\0\22\41\1\u02b1\2\41\1\0"+
+    "\12\41\3\0\4\41\1\0\4\41\20\0\2\u029e\2\0"+
+    "\1\u029e\102\0\1\41\1\0\1\41\1\0\10\41\27\0"+
+    "\3\41\1\u02b2\2\41\1\u02b2\16\41\1\0\12\41\3\0"+
     "\4\41\1\0\4\41\4\0\1\41\1\0\1\41\1\0"+
-    "\2\41\1\u02b6\5\41\27\0\10\41\1\u02b6\14\41\1\0"+
+    "\2\41\1\u02b3\5\41\27\0\10\41\1\u02b3\14\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\3\41\1\u02b7\2\41\1\u02b7"+
+    "\1\41\1\0\10\41\27\0\3\41\1\u02b4\2\41\1\u02b4"+
     "\16\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
-    "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u02b8"+
-    "\10\41\1\0\1\41\1\u02b8\10\41\3\0\4\41\1\0"+
-    "\4\41\113\0\1\u02b9\13\0\1\41\1\0\1\41\1\0"+
-    "\10\41\27\0\3\41\1\u02ba\2\41\1\u02ba\16\41\1\0"+
+    "\1\41\1\0\1\41\1\0\10\41\27\0\14\41\1\u02b5"+
+    "\10\41\1\0\1\41\1\u02b5\10\41\3\0\4\41\1\0"+
+    "\4\41\113\0\1\u02b6\13\0\1\41\1\0\1\41\1\0"+
+    "\10\41\27\0\3\41\1\u02b7\2\41\1\u02b7\16\41\1\0"+
     "\12\41\3\0\4\41\1\0\4\41\4\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\24\41\1\u02bb\1\0\2\41"+
-    "\1\u02bb\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\41\1\0\10\41\27\0\24\41\1\u02b8\1\0\2\41"+
+    "\1\u02b8\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+
-    "\3\0\1\41\1\u02bc\2\41\1\0\4\41\4\0\1\41"+
+    "\3\0\1\41\1\u02b9\2\41\1\0\4\41\4\0\1\41"+
     "\1\0\1\41\1\0\10\41\27\0\25\41\1\0\12\41"+
-    "\3\0\4\41\1\0\2\41\1\u02bd\1\41\3\0\15\202"+
-    "\1\u02be\1\u02b1\2\202\1\u02be\14\202\1\203\4\202\1\203"+
-    "\57\202\47\0\1\u02bf\2\0\1\u02bf\51\0\1\41\1\0"+
-    "\1\41\1\0\10\41\27\0\24\41\1\u02c0\1\0\2\41"+
-    "\1\u02c0\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
-    "\1\0\1\41\1\0\10\41\27\0\24\41\1\u02c1\1\0"+
-    "\2\41\1\u02c1\7\41\3\0\4\41\1\0\4\41\4\0"+
+    "\3\0\4\41\1\0\2\41\1\u02ba\1\41\3\0\15\210"+
+    "\1\u02bb\1\u02ae\2\210\1\u02bb\14\210\1\211\4\210\1\211"+
+    "\57\210\47\0\1\u02bc\2\0\1\u02bc\51\0\1\41\1\0"+
+    "\1\41\1\0\10\41\27\0\24\41\1\u02bd\1\0\2\41"+
+    "\1\u02bd\7\41\3\0\4\41\1\0\4\41\4\0\1\41"+
+    "\1\0\1\41\1\0\10\41\27\0\24\41\1\u02be\1\0"+
+    "\2\41\1\u02be\7\41\3\0\4\41\1\0\4\41\4\0"+
     "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
-    "\12\41\3\0\4\41\1\0\2\41\1\u02c2\1\41\4\0"+
-    "\1\41\1\0\1\u02c3\1\0\10\41\27\0\22\41\1\u02c3"+
+    "\12\41\3\0\4\41\1\0\2\41\1\u02bf\1\41\4\0"+
+    "\1\41\1\0\1\u02c0\1\0\10\41\27\0\22\41\1\u02c0"+
     "\2\41\1\0\12\41\3\0\4\41\1\0\4\41\4\0"+
     "\1\41\1\0\1\41\1\0\10\41\27\0\25\41\1\0"+
-    "\1\u02c4\3\41\1\u02c4\5\41\3\0\4\41\1\0\4\41"+
-    "\65\0\1\u02c5\16\0\1\u02c5\22\0\1\41\1\0\1\u02c6"+
-    "\1\0\10\41\27\0\22\41\1\u02c6\2\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u02c7"+
-    "\1\0\10\41\27\0\22\41\1\u02c7\2\41\1\0\12\41"+
+    "\1\u02c1\3\41\1\u02c1\5\41\3\0\4\41\1\0\4\41"+
+    "\65\0\1\u02c2\16\0\1\u02c2\22\0\1\41\1\0\1\u02c3"+
+    "\1\0\10\41\27\0\22\41\1\u02c3\2\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\u02c4"+
+    "\1\0\10\41\27\0\22\41\1\u02c4\2\41\1\0\12\41"+
     "\3\0\4\41\1\0\4\41\4\0\1\41\1\0\1\41"+
     "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\4\41"+
-    "\1\0\2\41\1\u02c8\1\41\4\0\1\41\1\0\1\41"+
+    "\1\0\2\41\1\u02c5\1\41\4\0\1\41\1\0\1\41"+
     "\1\0\10\41\27\0\25\41\1\0\12\41\3\0\4\41"+
-    "\1\0\2\41\1\u02c9\1\41\4\0\1\41\1\0\1\41"+
-    "\1\0\10\41\27\0\5\41\1\u02ca\17\41\1\0\3\41"+
-    "\1\u02ca\6\41\3\0\4\41\1\0\4\41\105\0\1\u02cb"+
+    "\1\0\2\41\1\u02c6\1\41\4\0\1\41\1\0\1\41"+
+    "\1\0\10\41\27\0\5\41\1\u02c7\17\41\1\0\3\41"+
+    "\1\u02c7\6\41\3\0\4\41\1\0\4\41\105\0\1\u02c8"+
     "\21\0\1\41\1\0\1\41\1\0\10\41\27\0\25\41"+
-    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u02cc\1\41"+
+    "\1\0\12\41\3\0\4\41\1\0\2\41\1\u02c9\1\41"+
     "\4\0\1\41\1\0\1\41\1\0\10\41\27\0\11\41"+
-    "\1\u02cd\13\41\1\0\6\41\1\u02cd\3\41\3\0\4\41"+
-    "\1\0\4\41\51\0\1\u02ce\10\0\1\u02ce\44\0\1\41"+
-    "\1\0\1\u02cf\1\0\10\41\27\0\22\41\1\u02cf\2\41"+
-    "\1\0\12\41\3\0\4\41\1\0\4\41\65\0\1\u02d0"+
-    "\16\0\1\u02d0\22\0\1\41\1\0\1\41\1\0\10\41"+
-    "\27\0\1\41\1\u02d1\13\41\1\u02d1\7\41\1\0\12\41"+
-    "\3\0\4\41\1\0\4\41\6\0\1\u02d2\62\0\1\u02d2"+
-    "\51\0\2\u02d2\2\0\1\u02d2\5\0\1\u02d3\110\0\2\u02d3"+
-    "\2\0\1\u02d3\1\0\1\u02d4\46\0\1\u02d5\3\0\1\u02d5"+
-    "\5\0\1\u02d6\110\0\1\u02d7\3\0\1\u02d7\127\0\1\u02d8"+
-    "\111\0\1\u02d9\3\0\1\u02d9\127\0\1\u02da\111\0\1\u02db"+
-    "\3\0\1\u02db\127\0\1\u02dc\111\0\1\u02dd\3\0\1\u02dd"+
-    "\41\0\2\u02db\2\0\1\u02db\6\0\1\u02de\164\0\1\u02df"+
-    "\3\0\1\u02df\47\0\1\u02db\203\0\1\u02db\16\0";
+    "\1\u02ca\13\41\1\0\6\41\1\u02ca\3\41\3\0\4\41"+
+    "\1\0\4\41\51\0\1\u02cb\10\0\1\u02cb\44\0\1\41"+
+    "\1\0\1\u02cc\1\0\10\41\27\0\22\41\1\u02cc\2\41"+
+    "\1\0\12\41\3\0\4\41\1\0\4\41\65\0\1\u02cd"+
+    "\16\0\1\u02cd\22\0\1\41\1\0\1\41\1\0\10\41"+
+    "\27\0\1\41\1\u02ce\13\41\1\u02ce\7\41\1\0\12\41"+
+    "\3\0\4\41\1\0\4\41\6\0\1\u02cf\62\0\1\u02cf"+
+    "\51\0\2\u02cf\2\0\1\u02cf\5\0\1\u02d0\110\0\2\u02d0"+
+    "\2\0\1\u02d0\1\0\1\u02d1\46\0\1\u02d2\3\0\1\u02d2"+
+    "\5\0\1\u02d3\110\0\1\u02d4\3\0\1\u02d4\127\0\1\u02d5"+
+    "\111\0\1\u02d6\3\0\1\u02d6\127\0\1\u02d7\111\0\1\u02d8"+
+    "\3\0\1\u02d8\127\0\1\u02d9\111\0\1\u02da\3\0\1\u02da"+
+    "\41\0\2\u02d8\2\0\1\u02d8\6\0\1\u02db\164\0\1\u02dc"+
+    "\3\0\1\u02dc\47\0\1\u02d8\203\0\1\u02d8\16\0";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[47974];
+    int [] result = new int[47725];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -1401,29 +1402,28 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) {
   private static final String ZZ_ATTRIBUTE_PACKED_0 =
     "\25\0\2\1\1\11\12\1\2\11\2\1\3\11\13\1"+
     "\1\11\26\1\1\11\5\1\2\11\2\1\1\11\6\1"+
-    "\1\11\12\1\1\11\4\1\1\0\1\1\1\11\2\1"+
+    "\1\11\12\1\1\11\10\1\1\11\3\1\1\0\2\1"+
     "\1\11\2\1\2\11\2\1\1\11\1\1\1\11\1\1"+
     "\1\11\4\0\1\1\1\11\4\1\1\11\2\1\1\0"+
     "\2\1\1\0\1\1\2\0\6\1\1\11\2\0\4\1"+
     "\1\0\1\1\1\0\1\1\2\0\1\11\2\0\2\1"+
     "\1\0\53\1\13\0\2\1\1\11\1\1\3\0\3\1"+
-    "\3\11\1\1\3\0\3\1\2\11\3\0\1\1\2\0"+
-    "\1\11\2\0\1\11\7\0\1\11\2\0\1\11\1\0"+
-    "\1\11\2\0\1\11\1\1\1\0\1\11\1\0\2\11"+
-    "\2\1\1\11\3\0\15\1\1\0\1\1\3\0\55\1"+
-    "\12\0\12\1\1\11\3\1\1\0\1\11\1\0\1\11"+
-    "\1\1\1\0\1\11\1\0\1\1\1\0\2\11\1\1"+
-    "\2\0\20\1\4\0\52\1\12\0\13\1\1\11\1\0"+
-    "\1\1\1\11\1\0\15\1\1\11\1\1\3\0\42\1"+
-    "\10\0\1\11\1\0\14\1\1\0\11\1\3\0\27\1"+
-    "\5\0\23\1\1\11\1\1\1\0\17\1\3\0\12\1"+
-    "\1\0\5\1\1\0\14\1\1\0\11\1\1\0\14\1"+
-    "\1\0\7\1\1\0\6\1\1\11\5\1\1\0\5\1"+
-    "\1\0\5\1\1\0\2\1\1\0\1\1\1\0\1\1"+
-    "\14\0\1\11\1\0";
+    "\3\11\1\1\3\0\3\1\2\11\3\0\1\1\1\0"+
+    "\1\11\1\0\1\11\3\0\1\1\1\0\2\1\1\11"+
+    "\1\0\1\11\1\0\1\11\2\0\1\11\1\1\1\0"+
+    "\1\11\1\0\2\11\2\1\1\11\3\0\15\1\1\0"+
+    "\1\1\3\0\55\1\12\0\12\1\1\11\3\1\1\0"+
+    "\1\11\1\0\4\11\1\1\2\0\20\1\4\0\52\1"+
+    "\12\0\13\1\1\11\1\1\1\11\1\0\15\1\1\11"+
+    "\1\1\3\0\42\1\10\0\1\11\1\0\14\1\1\0"+
+    "\11\1\3\0\27\1\5\0\23\1\1\11\1\1\1\0"+
+    "\17\1\3\0\12\1\1\0\5\1\1\0\14\1\1\0"+
+    "\11\1\1\0\14\1\1\0\7\1\1\0\6\1\1\11"+
+    "\5\1\1\0\5\1\1\0\5\1\1\0\2\1\1\0"+
+    "\1\1\1\0\1\1\14\0\1\11\1\0";
 
   private static int [] zzUnpackAttribute() {
-    int [] result = new int[735];
+    int [] result = new int[732];
     int offset = 0;
     offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
     return result;
@@ -1635,6 +1635,47 @@ protected void pushState(final int state) {
         yybegin(state);
     }
 
+    private boolean isLabelChar(char c) {
+        return c == '_'
+                || (c >= 'a' && c <= 'z')
+                || (c >= 'A' && c <= 'Z')
+                || (c >= 0x7f && c <= 0xff);
+    }
+
+    private boolean isEndNowdoc() {
+        String yytext = yytext().trim();
+        int lastIndexOfNewline = yytext.lastIndexOf('\n');
+        if (lastIndexOfNewline == -1) {
+            lastIndexOfNewline = yytext.lastIndexOf('\r');
+        }
+        if (lastIndexOfNewline != -1) {
+            yytext = yytext.substring(lastIndexOfNewline);
+        }
+        return isEndHereOrNowdoc(yytext);
+    }
+
+    private boolean isEndHeredoc() {
+        return isEndHereOrNowdoc(yytext());
+    }
+
+    private boolean isEndHereOrNowdoc(String text) {
+        // check whether ID exists
+        String trimedText = text.trim();
+        boolean isEnd = false;
+        if (trimedText.startsWith(heredoc)) {
+            if (trimedText.length() == heredoc.length()) {
+                isEnd = true;
+            } else if (trimedText.length() > heredoc.length()
+                    && !isLabelChar(trimedText.charAt(heredoc.length()))) {
+                // e.g.
+                // $test = <<< END
+                // ENDING
+                // END
+                isEnd = true;
+            }
+        }
+        return isEnd;
+    }
 
  // End user code
 
@@ -1871,21 +1912,21 @@ public PHPTokenId nextToken() throws java.io.IOException {
       }
 
       switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 27:
+        case 31:
           { //the difference from the original rules comes from the fact that we took ';' out out of tokens
     return  PHPTokenId.UNKNOWN_TOKEN;
           }
-        case 159: break;
-        case 94:
+        case 160: break;
+        case 95:
           { return PHPTokenId.PHP_FALSE;
           }
-        case 160: break;
-        case 22:
+        case 161: break;
+        case 25:
           { yypushback(1);
     yybegin(ST_PHP_NOWDOC);
           }
-        case 161: break;
-        case 30:
+        case 162: break;
+        case 34:
           { String yytext = yytext();
     switch (yytext.charAt(yytext.length() - 1)) {
         case '?':
@@ -1897,12 +1938,12 @@ public PHPTokenId nextToken() throws java.io.IOException {
     }
      return PHPTokenId.PHP_LINE_COMMENT;
           }
-        case 162: break;
-        case 73:
+        case 163: break;
+        case 76:
           { yypushback(2);
         return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
           }
-        case 163: break;
+        case 164: break;
         case 4:
           { if(isInConst) {
         // for checking arrays
@@ -1927,38 +1968,56 @@ public PHPTokenId nextToken() throws java.io.IOException {
     }
     return PHPTokenId.PHP_TOKEN;
           }
-        case 164: break;
-        case 60:
+        case 165: break;
+        case 63:
           { popState();
     return PHPTokenId.PHPDOC_COMMENT_END;
           }
-        case 165: break;
-        case 129:
+        case 166: break;
+        case 130:
           { return PHPTokenId.PHP_INCLUDE;
           }
-        case 166: break;
-        case 148:
+        case 167: break;
+        case 149:
           { return PHPTokenId.PHP_ENDDECLARE;
           }
-        case 167: break;
-        case 32:
+        case 168: break;
+        case 36:
           { return  PHPTokenId.UNKNOWN_TOKEN;
           }
-        case 168: break;
-        case 119:
+        case 169: break;
+        case 58:
+          { /* <ST_PHP_NOWDOC>{NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+        if (isEndNowdoc()) {
+            String yytext = yytext();
+            int trailingNewlineOffset = (yytext.endsWith("\n") || yytext.endsWith("\r")) ? 2 : 0;
+            int lastIndexOfNewline = yytext.lastIndexOf('\n', yylength() - trailingNewlineOffset);
+            if (lastIndexOfNewline == -1) {
+                lastIndexOfNewline = yytext.lastIndexOf('\r', yylength() - trailingNewlineOffset);
+            }
+            int back = yylength() - lastIndexOfNewline - 1; // -1 [\r\n] length
+            yypushback(back);
+            yybegin(ST_PHP_END_NOWDOC);
+            return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
+        } else {
+            yypushback(1); // [\r\n] length
+        }
+          }
+        case 170: break;
+        case 120:
           { return PHPTokenId.PHP_GLOBAL;
           }
-        case 169: break;
-        case 155:
+        case 171: break;
+        case 156:
           { return PHPTokenId.PHP__FUNCTION__;
           }
-        case 170: break;
+        case 172: break;
         case 18:
           { popState();
     return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
           }
-        case 171: break;
-        case 36:
+        case 173: break;
+        case 40:
           { if (shortTagsAllowed ) {
         //yybegin(ST_PHP_IN_SCRIPTING);
         pushState(ST_PHP_IN_SCRIPTING);
@@ -1969,39 +2028,39 @@ public PHPTokenId nextToken() throws java.io.IOException {
         return PHPTokenId.T_INLINE_HTML;
     }
           }
-        case 172: break;
-        case 50:
+        case 174: break;
+        case 54:
           { yypushback(1);
     pushState(ST_PHP_IN_SCRIPTING);
     return PHPTokenId.PHP_CURLY_OPEN;
           }
-        case 173: break;
-        case 115:
+        case 175: break;
+        case 116:
           { return PHPTokenId.PHP_TYPE_OBJECT;
           }
-        case 174: break;
-        case 85:
+        case 176: break;
+        case 86:
           { return PHPTokenId.PHP_LIST;
           }
-        case 175: break;
-        case 93:
+        case 177: break;
+        case 94:
           { return PHPTokenId.PHP_EMPTY;
           }
-        case 176: break;
+        case 178: break;
         case 15:
           { pushState(ST_PHP_LINE_COMMENT);
     return PHPTokenId.PHP_LINE_COMMENT;
           }
-        case 177: break;
-        case 90:
+        case 179: break;
+        case 91:
           { return PHPTokenId.PHP_CASE;
           }
-        case 178: break;
-        case 38:
+        case 180: break;
+        case 42:
           { return PHPTokenId.PHP_VARIABLE;
           }
-        case 179: break;
-        case 41:
+        case 181: break;
+        case 45:
           { //popState();
         yybegin(YYINITIAL);
         if (yylength() > 2) {
@@ -2010,7 +2069,28 @@ public PHPTokenId nextToken() throws java.io.IOException {
         stack.clear();
     return PHPTokenId.PHP_CLOSETAG;
           }
-        case 180: break;
+        case 182: break;
+        case 22:
+          { int trailingNewLineLength = 1;
+        int label_len = yylength() - trailingNewLineLength;
+        int back = trailingNewLineLength;
+
+        if (yytext().charAt(label_len - 1)==';') {
+           label_len--;
+           back++;
+        }
+
+        if (isEndHeredoc()) {
+            int indexOfHeredocId = yytext().indexOf(heredoc);
+            back += label_len - indexOfHeredocId;
+            yypushback(back);
+            yybegin(ST_PHP_END_HEREDOC);
+        } else {
+            yypushback(yylength() - trailingNewLineLength);
+            yybegin(ST_PHP_HEREDOC);
+        }
+          }
+        case 183: break;
         case 8:
           { if(isInConst) {
         isInConst = false;
@@ -2019,8 +2099,8 @@ public PHPTokenId nextToken() throws java.io.IOException {
     }
     return PHPTokenId.PHP_SEMICOLON;
           }
-        case 181: break;
-        case 40:
+        case 184: break;
+        case 44:
           { if (aspTagsAllowed) {
             yybegin(YYINITIAL);
             stack.clear();
@@ -2028,36 +2108,36 @@ public PHPTokenId nextToken() throws java.io.IOException {
     }
     return  PHPTokenId.UNKNOWN_TOKEN;
           }
-        case 182: break;
-        case 31:
+        case 185: break;
+        case 35:
           { return PHPTokenId.PHP_LINE_COMMENT;
           }
-        case 183: break;
-        case 82:
+        case 186: break;
+        case 83:
           { pushState(ST_PHP_DOC_COMMENT);
     yypushback(yylength()-3);
     return PHPTokenId.PHPDOC_COMMENT_START;
           }
-        case 184: break;
-        case 99:
+        case 187: break;
+        case 100:
           { return PHPTokenId.PHP_ISSET;
           }
-        case 185: break;
-        case 138:
+        case 188: break;
+        case 139:
           { return PHPTokenId.PHP__FILE__;
           }
-        case 186: break;
-        case 45:
+        case 189: break;
+        case 49:
           { return PHPTokenId.PHP_IF;
           }
-        case 187: break;
-        case 51:
+        case 190: break;
+        case 55:
           { popState();
     pushState(ST_PHP_LOOKING_FOR_PROPERTY);
     return PHPTokenId.PHP_OBJECT_OPERATOR;
           }
-        case 188: break;
-        case 62:
+        case 191: break;
+        case 65:
           { if (aspTagsAllowed) {
             yybegin(YYINITIAL);
             stack.clear();
@@ -2069,58 +2149,99 @@ public PHPTokenId nextToken() throws java.io.IOException {
     }
     return PHPTokenId.PHP_LINE_COMMENT;
           }
-        case 189: break;
-        case 43:
+        case 192: break;
+        case 47:
           { return PHPTokenId.PHP_AS;
           }
-        case 190: break;
-        case 157:
+        case 193: break;
+        case 23:
+          { heredoc=null;
+    hereocLength=0;
+    yybegin(ST_PHP_IN_SCRIPTING);
+    int back = 0;
+    // mark just the label
+    if (yytext().charAt(yylength() - 1)==';') {
+        back++;
+    }
+    yypushback(back);
+    return PHPTokenId.PHP_HEREDOC_TAG_END;
+          }
+        case 194: break;
+        case 158:
           { pushState(ST_HALTED_COMPILER);
     return PHPTokenId.PHP_HALT_COMPILER;
           }
-        case 191: break;
-        case 70:
+        case 195: break;
+        case 73:
           { return PHPTokenId.PHP_USE;
           }
-        case 192: break;
-        case 102:
+        case 196: break;
+        case 103:
           { return PHPTokenId.PHP_TYPE_FLOAT;
           }
-        case 193: break;
-        case 156:
+        case 197: break;
+        case 57:
+          { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
+        int trailingNewLineLength = 1;
+        if (isEndHeredoc()) {
+            String yytext = yytext();
+            int newlineLength = yytext.startsWith("\r\n") ? 2 : 1;
+            int back = yylength() - newlineLength;
+            yypushback(back);
+            yybegin(ST_PHP_END_HEREDOC);
+        } else {
+            int indexOfVariable1 = yytext().indexOf("$");
+            int indexOfVariable2 = yytext().indexOf("{$");
+            if (indexOfVariable1 > 0 && indexOfVariable2 == -1) {
+                yypushback(yylength() - indexOfVariable1);
+                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
+            } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) {
+                yypushback(yylength() - indexOfVariable2);
+                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
+            } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) {
+                yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2));
+                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
+            } else {
+                yypushback(trailingNewLineLength);
+            }
+        }
+        return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
+          }
+        case 198: break;
+        case 157:
           { return PHPTokenId.PHP__NAMESPACE__;
           }
-        case 194: break;
-        case 61:
+        case 199: break;
+        case 64:
           { popState();
     return PHPTokenId.PHP_LINE_COMMENT;
           }
-        case 195: break;
-        case 154:
+        case 200: break;
+        case 155:
           { return PHPTokenId.PHP_INCLUDE_ONCE;
           }
-        case 196: break;
-        case 141:
+        case 201: break;
+        case 142:
           { return PHPTokenId.PHP_NAMESPACE;
           }
-        case 197: break;
+        case 202: break;
         case 13:
           { if (isInConst) {
         pushState(ST_PHP_LOOKING_FOR_CONSTANT_NAME);
     }
     return PHPTokenId.PHP_TOKEN;
           }
-        case 198: break;
-        case 59:
+        case 203: break;
+        case 62:
           { popState();
     return PHPTokenId.PHP_COMMENT_END;
           }
-        case 199: break;
-        case 135:
+        case 204: break;
+        case 136:
           { return PHPTokenId.PHP_ITERABLE;
           }
-        case 200: break;
-        case 97:
+        case 205: break;
+        case 98:
           { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0;
     int startString=3+bprefix;
     hereocLength = yylength()-bprefix-3-1-(yytext().charAt(yylength()-2)=='\r'?1:0);
@@ -2137,8 +2258,8 @@ public PHPTokenId nextToken() throws java.io.IOException {
     yybegin(ST_PHP_START_HEREDOC);
     return PHPTokenId.PHP_HEREDOC_TAG_START;
           }
-        case 201: break;
-        case 58:
+        case 206: break;
+        case 61:
           { // const keyword is also used within group uses. so check "=", otherwise it matches the following:
     // use A\{const CONSTANTA, function myFunction,...}
     popState();
@@ -2152,152 +2273,152 @@ public PHPTokenId nextToken() throws java.io.IOException {
     yypushback(back);
     return PHPTokenId.PHP_STRING;
           }
-        case 202: break;
-        case 34:
+        case 207: break;
+        case 38:
           { popState();
     return PHPTokenId.T_INLINE_HTML;
           }
-        case 203: break;
+        case 208: break;
         case 6:
           { return PHPTokenId.PHP_OPERATOR;
           }
-        case 204: break;
+        case 209: break;
         case 11:
           { pushState(ST_PHP_BACKQUOTE);
     return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
           }
-        case 205: break;
-        case 47:
+        case 210: break;
+        case 51:
           { pushState(ST_PHP_QUOTES_AFTER_VARIABLE);
     return PHPTokenId.PHP_VARIABLE;
           }
-        case 206: break;
+        case 211: break;
         case 3:
           { return PHPTokenId.PHP_NUMBER;
           }
-        case 207: break;
-        case 71:
+        case 212: break;
+        case 74:
           { yypushback(1);
     pushState(ST_PHP_VAR_OFFSET);
     return PHPTokenId.PHP_VARIABLE;
           }
-        case 208: break;
-        case 126:
+        case 213: break;
+        case 127:
           { return PHPTokenId.PHP_REQUIRE;
           }
-        case 209: break;
-        case 128:
+        case 214: break;
+        case 129:
           { return PHPTokenId.PHP_DECLARE;
           }
-        case 210: break;
-        case 105:
+        case 215: break;
+        case 106:
           { return PHPTokenId.PHP_CLONE;
           }
-        case 211: break;
-        case 100:
+        case 216: break;
+        case 101:
           { return PHPTokenId.PHP_TRAIT;
           }
-        case 212: break;
-        case 49:
+        case 217: break;
+        case 53:
           { pushState(ST_PHP_IN_SCRIPTING);
     return PHPTokenId.PHP_TOKEN;
           }
-        case 213: break;
-        case 65:
+        case 218: break;
+        case 68:
           { return PHPTokenId.PHP_NEW;
           }
-        case 214: break;
-        case 76:
+        case 219: break;
+        case 77:
           { yypushback(2);
     return PHPTokenId.PHP_COMMENT;
           }
-        case 215: break;
-        case 57:
+        case 220: break;
+        case 60:
           { return PHPTokenId.PHP_OBJECT_OPERATOR;
           }
-        case 216: break;
+        case 221: break;
         case 19:
           { yypushback(1);
         popState();
           }
-        case 217: break;
-        case 122:
+        case 222: break;
+        case 123:
           { return PHPTokenId.PHP_EXTENDS;
           }
-        case 218: break;
-        case 83:
+        case 223: break;
+        case 84:
           { return PHPTokenId.PHP_NULL;
           }
-        case 219: break;
-        case 91:
+        case 224: break;
+        case 92:
           { pushState(ST_PHP_IN_SCRIPTING);
     //yybegin(ST_PHP_IN_SCRIPTING);
     return PHPTokenId.PHP_OPENTAG;
     //return createSymbol(ASTSymbol.T_OPEN_TAG);
           }
-        case 220: break;
-        case 111:
+        case 225: break;
+        case 112:
           { return PHPTokenId.PHP_WHILE;
           }
-        case 221: break;
-        case 140:
+        case 226: break;
+        case 141:
           { return PHPTokenId.PHP_ENDSWITCH;
           }
-        case 222: break;
-        case 130:
+        case 227: break;
+        case 131:
           { return PHPTokenId.PHP_PRIVATE;
           }
-        case 223: break;
+        case 228: break;
         case 1:
           { return PHPTokenId.T_INLINE_HTML;
           }
-        case 224: break;
-        case 151:
+        case 229: break;
+        case 152:
           { return PHPTokenId.PHP_YIELD_FROM;
           }
-        case 225: break;
-        case 92:
+        case 230: break;
+        case 93:
           { return PHPTokenId.PHP_ENDIF;
           }
-        case 226: break;
-        case 28:
+        case 231: break;
+        case 32:
           { yypushback(1);
     popState();
         if (yylength() > 0)
             return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
           }
-        case 227: break;
-        case 116:
+        case 232: break;
+        case 117:
           { return PHPTokenId.PHP_STATIC;
           }
-        case 228: break;
-        case 127:
+        case 233: break;
+        case 128:
           { return PHPTokenId.PHP_DEFAULT;
           }
-        case 229: break;
+        case 234: break;
         case 17:
           { return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
           }
-        case 230: break;
-        case 25:
+        case 235: break;
+        case 29:
           { popState();
     return PHPTokenId.PHP_TOKEN;
           }
-        case 231: break;
-        case 37:
+        case 236: break;
+        case 41:
           { pushState(ST_PHP_LOOKING_FOR_PROPERTY);
     return PHPTokenId.PHP_OBJECT_OPERATOR;
           }
-        case 232: break;
-        case 139:
+        case 237: break;
+        case 140:
           { return PHPTokenId.PHP__LINE__;
           }
-        case 233: break;
-        case 78:
+        case 238: break;
+        case 79:
           { return PHPTokenId.PHP_EXIT;
           }
-        case 234: break;
-        case 35:
+        case 239: break;
+        case 39:
           { if (aspTagsAllowed) {
         //yybegin(ST_PHP_IN_SCRIPTING);
         pushState(ST_PHP_IN_SCRIPTING);
@@ -2308,38 +2429,43 @@ public PHPTokenId nextToken() throws java.io.IOException {
         return PHPTokenId.T_INLINE_HTML;
     }
           }
-        case 235: break;
-        case 39:
+        case 240: break;
+        case 43:
           { pushState(ST_PHP_COMMENT);
     return PHPTokenId.PHP_COMMENT_START;
           }
-        case 236: break;
-        case 96:
+        case 241: break;
+        case 97:
           { return PHPTokenId.PHP_BREAK;
           }
-        case 237: break;
-        case 26:
+        case 242: break;
+        case 30:
           { if(parenBalanceInConst == 0 && bracketBalanceInConst == 0) {
         isInConst = false;
     }
     yypushback(1);
     popState();
           }
-        case 238: break;
+        case 243: break;
         case 21:
           { yypushback(1);
         yybegin(ST_PHP_HEREDOC);
           }
-        case 239: break;
-        case 143:
+        case 244: break;
+        case 144:
           { return PHPTokenId.PHP_INSTEADOF;
           }
-        case 240: break;
-        case 144:
+        case 245: break;
+        case 24:
+          { /* <ST_PHP_NOWDOC>{NOWDOC_CHARS}|{NEWLINE} */
+        // retrun PHPTokenId when the closing marker is found
+          }
+        case 246: break;
+        case 145:
           { return PHPTokenId.PHP_PROTECTED;
           }
-        case 241: break;
-        case 63:
+        case 247: break;
+        case 66:
           { String text = yytext();
     if ((text.charAt(1)=='%' && aspTagsAllowed)
         || (text.charAt(1)=='?')) {
@@ -2352,281 +2478,260 @@ public PHPTokenId nextToken() throws java.io.IOException {
         return PHPTokenId.T_INLINE_HTML;
     }
           }
-        case 242: break;
-        case 107:
+        case 248: break;
+        case 108:
           { return PHPTokenId.PHP_PRINT;
           }
-        case 243: break;
-        case 69:
+        case 249: break;
+        case 72:
           { return PHPTokenId.PHP_VAR;
           }
-        case 244: break;
-        case 158:
+        case 250: break;
+        case 159:
           { pushState(ST_PHP_IN_SCRIPTING);
     return PHPTokenId.T_INLINE_HTML;
           }
-        case 245: break;
-        case 101:
-          { return PHPTokenId.PHP_THROW;
+        case 251: break;
+        case 102:
+          { return PHPTokenId.PHP_THROW;
           }
-        case 246: break;
-        case 120:
+        case 252: break;
+        case 121:
           { return PHPTokenId.PHP_PARENT;
           }
-        case 247: break;
-        case 118:
+        case 253: break;
+        case 119:
           { return PHPTokenId.PHP_SWITCH;
           }
-        case 248: break;
-        case 74:
-          { int trailingNewLineLength = 1;
-        int label_len = yylength() - trailingNewLineLength;
-        int back = trailingNewLineLength;
-
-        if (yytext().charAt(label_len-1)==';') {
-           label_len--;
-           back++;
-        }
-        if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) {
-            back = back + hereocLength;
-            yypushback(back);
-            yybegin(ST_PHP_END_HEREDOC);
-        } else {
-            yypushback(trailingNewLineLength);
-            return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
-        }
-          }
-        case 249: break;
-        case 77:
+        case 254: break;
+        case 78:
           { yypushback(2); // go back to mark end of comment in the next token
         return PHPTokenId.PHPDOC_COMMENT;
           }
-        case 250: break;
-        case 67:
+        case 255: break;
+        case 70:
           { return PHPTokenId.PHP_TYPE_INT;
           }
-        case 251: break;
-        case 109:
+        case 256: break;
+        case 110:
           { return PHPTokenId.PHP_CASTING;
           }
-        case 252: break;
-        case 42:
+        case 257: break;
+        case 46:
           { return PHPTokenId.PHP_TEXTUAL_OPERATOR;
           }
-        case 253: break;
-        case 33:
+        case 258: break;
+        case 37:
           { popState();return PHPTokenId.WHITESPACE;
           }
-        case 254: break;
-        case 66:
+        case 259: break;
+        case 69:
           { return PHPTokenId.PHP_DIE;
           }
-        case 255: break;
-        case 146:
+        case 260: break;
+        case 147:
           { return PHPTokenId.PHP__CLASS__;
           }
-        case 256: break;
-        case 75:
-          { int label_len = yylength() - 1;
-    int back = 1;
-
-    if (yytext().charAt(label_len-1)==';') {
-       label_len--;
-           back++;
-    }
-    if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) {
-        back = back + hereocLength;
-        yypushback(back);
-        yybegin(ST_PHP_END_NOWDOC);
-    }
-    else {
-        yypushback(1);
-    }
-    return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
-          }
-        case 257: break;
+        case 261: break;
         case 2:
           { yypushback(1);
     pushState(ST_PHP_HIGHLIGHTING_ERROR);
           }
-        case 258: break;
-        case 106:
+        case 262: break;
+        case 107:
           { return PHPTokenId.PHP_CLASS;
           }
-        case 259: break;
-        case 124:
+        case 263: break;
+        case 125:
           { return PHPTokenId.PHP_FINALLY;
           }
-        case 260: break;
-        case 142:
+        case 264: break;
+        case 143:
           { return PHPTokenId.PHP_INTERFACE;
           }
-        case 261: break;
-        case 145:
+        case 265: break;
+        case 146:
           { return PHPTokenId.PHP__TRAIT__;
           }
-        case 262: break;
-        case 108:
+        case 266: break;
+        case 109:
           { return PHPTokenId.PHP_UNSET;
           }
-        case 263: break;
+        case 267: break;
         case 12:
           { return PHPTokenId.PHP_CURLY_OPEN;
           }
-        case 264: break;
-        case 23:
+        case 268: break;
+        case 27:
           { yypushback(1);
     popState();
           }
-        case 265: break;
-        case 121:
+        case 269: break;
+        case 122:
           { return PHPTokenId.PHP_PUBLIC;
           }
-        case 266: break;
-        case 153:
+        case 270: break;
+        case 154:
           { return PHPTokenId.PHP_REQUIRE_ONCE;
           }
-        case 267: break;
-        case 147:
+        case 271: break;
+        case 148:
           { return PHPTokenId.PHP_ENDFOREACH;
           }
-        case 268: break;
-        case 117:
+        case 272: break;
+        case 118:
           { return PHPTokenId.PHP_TYPE_STRING;
           }
-        case 269: break;
-        case 80:
+        case 273: break;
+        case 81:
           { return PHPTokenId.PHP_EVAL;
           }
-        case 270: break;
-        case 87:
+        case 274: break;
+        case 88:
           { return PHPTokenId.PHP_GOTO;
           }
-        case 271: break;
-        case 103:
+        case 275: break;
+        case 104:
           { isInConst = true;
     parenBalanceInConst = 0;
     bracketBalanceInConst = 0;
     pushState(ST_PHP_LOOKING_FOR_CONSTANT_NAME);
     return PHPTokenId.PHP_CONST;
           }
-        case 272: break;
+        case 276: break;
         case 20:
           { popState();
         return PHPTokenId.PHP_STRING;
           }
-        case 273: break;
-        case 134:
+        case 277: break;
+        case 135:
           { return PHPTokenId.PHP_ABSTRACT;
           }
-        case 274: break;
+        case 278: break;
+        case 26:
+          { heredoc=null; hereocLength=0;
+    yybegin(ST_PHP_IN_SCRIPTING);
+    int back = 0;
+    // mark just the label
+    if (yytext().charAt(yylength() - 1)==';') {
+        back++;
+    }
+    yypushback(back);
+    return PHPTokenId.PHP_NOWDOC_TAG_END;
+          }
+        case 279: break;
         case 9:
           { pushState(ST_PHP_DOUBLE_QUOTES);
     return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
           }
-        case 275: break;
-        case 81:
+        case 280: break;
+        case 59:
+          { /* <ST_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+    // there is no [\r\n] if it is the last line
+    // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]?
+    if (isEndNowdoc()) {
+        int indexOfNowdocId = yytext().indexOf(heredoc);
+        int back = yylength() - indexOfNowdocId - heredoc.length();
+        yypushback(back);
+        heredoc=null;
+        hereocLength=0;
+        yybegin(ST_PHP_IN_SCRIPTING);
+        return PHPTokenId.PHP_NOWDOC_TAG_END;
+    } else {
+        yypushback(1);
+        yybegin(ST_PHP_NOWDOC);
+    }
+          }
+        case 281: break;
+        case 82:
           { return PHPTokenId.PHP_ECHO;
           }
-        case 276: break;
-        case 95:
+        case 282: break;
+        case 96:
           { return PHPTokenId.PHP_FINAL;
           }
-        case 277: break;
-        case 152:
+        case 283: break;
+        case 153:
           { return PHPTokenId.PHP__METHOD__;
           }
-        case 278: break;
+        case 284: break;
         case 10:
           { return PHPTokenId.PHP_NS_SEPARATOR;
           }
-        case 279: break;
-        case 110:
+        case 285: break;
+        case 111:
           { return PHPTokenId.PHP_YIELD;
           }
-        case 280: break;
-        case 133:
+        case 286: break;
+        case 134:
           { pushState(ST_PHP_LOOKING_FOR_FUNCTION_NAME);
     return PHPTokenId.PHP_FUNCTION;
           }
-        case 281: break;
-        case 131:
+        case 287: break;
+        case 132:
           { return PHPTokenId.PHP__DIR__;
           }
-        case 282: break;
+        case 288: break;
         case 5:
           { return  PHPTokenId.PHP_STRING;
           }
-        case 283: break;
-        case 136:
+        case 289: break;
+        case 137:
           { return PHPTokenId.PHP_CONTINUE;
           }
-        case 284: break;
-        case 150:
+        case 290: break;
+        case 151:
           { return PHPTokenId.PHP_IMPLEMENTS;
           }
-        case 285: break;
-        case 68:
+        case 291: break;
+        case 71:
           { return PHPTokenId.PHP_TRY;
           }
-        case 286: break;
-        case 98:
+        case 292: break;
+        case 99:
           { return PHPTokenId.PHP_ARRAY;
           }
-        case 287: break;
+        case 293: break;
         case 7:
           { return PHPTokenId.WHITESPACE;
           }
-        case 288: break;
-        case 114:
+        case 294: break;
+        case 115:
           { return PHPTokenId.PHP_RETURN;
           }
-        case 289: break;
-        case 29:
+        case 295: break;
+        case 33:
           { return PHPTokenId.PHP_TOKEN;
           }
-        case 290: break;
+        case 296: break;
         case 16:
           { return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
           }
-        case 291: break;
-        case 104:
+        case 297: break;
+        case 105:
           { return PHPTokenId.PHP_CATCH;
           }
-        case 292: break;
-        case 72:
+        case 298: break;
+        case 75:
           { String text = yytext();
         int lastIndexOfDollar = text.lastIndexOf('$');
         yypushback(text.length() - lastIndexOfDollar);
         return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
           }
-        case 293: break;
-        case 52:
+        case 299: break;
+        case 56:
           { return PHPTokenId.PHP_PAAMAYIM_NEKUDOTAYIM;
           }
-        case 294: break;
-        case 137:
+        case 300: break;
+        case 138:
           { return PHPTokenId.PHP_CALLABLE;
           }
-        case 295: break;
-        case 149:
+        case 301: break;
+        case 150:
           { return PHPTokenId.PHP_INSTANCEOF;
           }
-        case 296: break;
-        case 54:
-          { heredoc=null;
-    hereocLength=0;
-    yybegin(ST_PHP_IN_SCRIPTING);
-    int back = 1;
-    // mark just the label
-    if (yytext().charAt(yylength() - 2)==';') {
-        back++;
-    }
-    yypushback(back);
-    return PHPTokenId.PHP_HEREDOC_TAG_END;
-          }
-        case 297: break;
-        case 125:
+        case 302: break;
+        case 126:
           { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0;
         int startString=3+bprefix;
         /* 3 is <<<, 2 is quotes, 1 is newline */
@@ -2641,75 +2746,46 @@ public PHPTokenId nextToken() throws java.io.IOException {
         yybegin(ST_PHP_START_NOWDOC);
         return PHPTokenId.PHP_NOWDOC_TAG_START;
           }
-        case 298: break;
-        case 88:
+        case 303: break;
+        case 89:
           { return PHPTokenId.PHP_TYPE_BOOL;
           }
-        case 299: break;
-        case 112:
+        case 304: break;
+        case 113:
           { return PHPTokenId.PHP_ENDFOR;
           }
-        case 300: break;
-        case 64:
+        case 305: break;
+        case 67:
           { return PHPTokenId.PHP_FOR;
           }
-        case 301: break;
-        case 55:
-          { int label_len = yylength() - 1;
-
-    if (yytext().charAt(label_len-1)==';') {
-        label_len--;
-    }
-
-    if (label_len==hereocLength && yytext().substring(0,label_len).equals(heredoc)) {
-        heredoc=null;
-        hereocLength=0;
-        yybegin(ST_PHP_IN_SCRIPTING);
-        return PHPTokenId.PHP_NOWDOC_TAG_END;
-    } else {
-        return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
-    }
-          }
-        case 302: break;
-        case 123:
+        case 306: break;
+        case 124:
           { return PHPTokenId.PHP_FOREACH;
           }
-        case 303: break;
-        case 46:
+        case 307: break;
+        case 50:
           { pushState(ST_PHP_LOOKING_FOR_STATIC_PROPERTY);
     return PHPTokenId.PHP_PAAMAYIM_NEKUDOTAYIM;
           }
-        case 304: break;
-        case 24:
+        case 308: break;
+        case 28:
           { popState();
     return PHPTokenId.PHP_STRING;
           }
-        case 305: break;
-        case 79:
+        case 309: break;
+        case 80:
           { return PHPTokenId.PHP_ELSE;
           }
-        case 306: break;
-        case 86:
+        case 310: break;
+        case 87:
           { return PHPTokenId.PHP_SELF;
           }
-        case 307: break;
-        case 56:
-          { heredoc=null; hereocLength=0;
-    yybegin(ST_PHP_IN_SCRIPTING);
-    int back = 1;
-    // mark just the label
-    if (yytext().charAt(yylength() - 2)==';') {
-        back++;
-    }
-    yypushback(back);
-    return PHPTokenId.PHP_NOWDOC_TAG_END;
-          }
-        case 308: break;
-        case 48:
+        case 311: break;
+        case 52:
           { yypushback(1);
     return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
           }
-        case 309: break;
+        case 312: break;
         case 14:
           { int lastState = stack.peek();
     if (lastState != ST_PHP_IN_SCRIPTING && lastState != YYINITIAL) {
@@ -2718,46 +2794,27 @@ public PHPTokenId nextToken() throws java.io.IOException {
     }
     return PHPTokenId.PHP_CURLY_CLOSE;
           }
-        case 310: break;
-        case 44:
+        case 313: break;
+        case 48:
           { return PHPTokenId.PHP_DO;
           }
-        case 311: break;
-        case 53:
-          { int trailingNewLineLength = 1;
-        int label_len = yylength() - trailingNewLineLength;
-        int back = trailingNewLineLength;
-
-        if (yytext().charAt(label_len-1)==';') {
-           label_len--;
-           back++;
-        }
-        if (label_len == hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) {
-            back = back + hereocLength;
-            yypushback(back);
-            yybegin(ST_PHP_END_HEREDOC);
-        } else {
-            yypushback(yylength() - trailingNewLineLength);
-            yybegin(ST_PHP_HEREDOC);
-        }
-          }
-        case 312: break;
-        case 89:
+        case 314: break;
+        case 90:
           { return PHPTokenId.PHP_TYPE_VOID;
           }
-        case 313: break;
-        case 132:
+        case 315: break;
+        case 133:
           { return PHPTokenId.PHP_ENDWHILE;
           }
-        case 314: break;
-        case 113:
+        case 316: break;
+        case 114:
           { return PHPTokenId.PHP_ELSEIF;
           }
-        case 315: break;
-        case 84:
+        case 317: break;
+        case 85:
           { return PHPTokenId.PHP_TRUE;
           }
-        case 316: break;
+        case 318: break;
         default:
           if (zzInput == YYEOF)
             //zzAtEOF = true;
@@ -2771,7 +2828,7 @@ public PHPTokenId nextToken() throws java.io.IOException {
                   return null;
               }
             }
-            case 736: break;
+            case 733: break;
             case ST_PHP_DOC_COMMENT: {
               if (input.readLength() > 0) {
                     input.backup(1);  // backup eof
@@ -2781,7 +2838,7 @@ public PHPTokenId nextToken() throws java.io.IOException {
                     return null;
                 }
             }
-            case 737: break;
+            case 734: break;
             default:
               {        if(input.readLength() > 0) {
             // backup eof
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java
index 8e3768582d..52cc1cacba 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/ASTPHP5Scanner.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 18/06/21 0:39 */
+/* The following code was generated by JFlex 1.4.3 on 18/09/17 17:24 */
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -33,8 +33,8 @@
 /**
  * This class is a scanner generated by
  * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 18/06/21 0:39 from the specification file
- * <tt>/home/junichi11/NetBeansProjects/netbeans-releases/php.editor/tools/ASTPHP5Scanner.flex</tt>
+ * on 18/09/17 17:24 from the specification file
+ * <tt>/home/junichi11/NetBeansProjects/incubator-netbeans/php/php.editor/tools/ASTPHP5Scanner.flex</tt>
  */
 public class ASTPHP5Scanner implements Scanner {
 
@@ -187,53 +187,54 @@
     "\1\5\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\2\1\43\1\44\2\2\1\45\1\2\1\46\2\2"+
-    "\1\47\1\2\1\50\1\2\2\50\2\51\2\52\4\2"+
-    "\2\53\1\2\1\54\1\55\1\54\1\56\1\57\1\60"+
-    "\1\4\1\6\1\60\1\61\1\62\1\63\1\64\1\16"+
-    "\1\17\1\20\1\21\1\22\1\24\1\25\1\26\1\27"+
-    "\1\30\1\31\1\32\1\33\1\34\1\65\1\66\1\67"+
-    "\1\70\2\2\3\71\2\70\1\72\1\1\1\0\1\73"+
-    "\1\74\1\1\1\75\2\0\1\76\6\5\1\77\1\100"+
-    "\2\0\3\5\1\101\2\5\2\0\1\102\3\0\1\103"+
-    "\1\0\1\104\1\105\1\106\7\5\1\107\12\5\1\110"+
-    "\12\5\1\111\1\112\1\113\1\114\1\115\1\116\1\5"+
-    "\12\0\1\5\1\117\1\120\1\117\1\121\1\0\1\122"+
-    "\1\123\1\124\1\125\1\126\1\127\1\130\1\131\1\132"+
-    "\1\133\1\134\1\135\1\136\4\0\2\102\2\137\1\140"+
-    "\1\141\1\137\3\0\1\102\3\142\3\0\1\50\2\0"+
-    "\1\143\2\0\1\144\10\0\1\145\2\0\1\146\1\0"+
-    "\1\147\1\150\2\0\1\151\2\0\1\152\1\153\1\154"+
-    "\2\0\1\75\1\0\1\155\7\5\2\75\1\156\1\5"+
-    "\1\157\2\5\1\0\1\160\6\5\1\161\3\5\1\162"+
-    "\2\5\1\163\1\5\1\164\1\165\23\5\1\166\1\167"+
-    "\12\0\10\5\1\170\1\171\1\172\2\0\1\173\1\0"+
-    "\1\174\1\0\2\127\2\135\1\0\1\175\1\44\1\175"+
-    "\1\46\1\175\1\176\1\0\1\177\1\0\1\200\1\50"+
-    "\1\0\1\201\1\0\1\201\1\0\2\150\1\202\2\0"+
-    "\6\5\1\203\1\204\1\5\1\205\23\5\1\206\12\5"+
-    "\1\207\1\5\1\210\5\5\12\0\11\5\5\0\1\211"+
-    "\3\0\1\44\1\46\1\176\3\0\1\5\1\212\5\5"+
-    "\1\213\1\5\1\214\1\215\4\5\1\216\1\5\1\217"+
-    "\1\220\3\5\1\221\2\5\1\222\1\5\1\223\2\5"+
-    "\1\224\1\225\1\226\4\5\1\227\1\230\2\5\1\231"+
-    "\2\5\5\0\1\232\6\0\11\5\2\233\5\0\3\234"+
-    "\2\235\1\0\2\5\1\236\2\5\1\237\7\5\1\240"+
-    "\7\5\1\241\1\242\1\243\1\5\1\0\1\244\1\245"+
-    "\2\5\4\0\1\246\5\0\1\247\11\5\6\0\1\250"+
-    "\6\5\1\251\3\5\1\252\1\253\1\254\1\5\1\255"+
-    "\3\5\1\256\1\0\1\257\1\5\1\260\3\0\1\261"+
-    "\1\0\1\5\1\262\7\5\2\263\4\0\3\5\1\264"+
-    "\1\265\5\5\1\266\1\5\1\267\1\270\1\5\1\0"+
-    "\1\5\1\271\1\272\1\5\1\273\3\5\1\274\2\5"+
-    "\5\0\2\5\1\275\1\276\1\5\1\277\2\5\1\300"+
-    "\1\5\1\0\1\301\1\302\2\5\1\303\2\5\5\0"+
-    "\1\304\1\305\1\5\1\306\1\307\1\5\1\310\2\5"+
-    "\1\311\1\5\10\0\5\5\7\0\1\312\1\313\1\314"+
-    "\2\5\1\0\1\315\2\0\1\316\1\5\5\0\1\5"+
-    "\1\317\3\0\1\5\7\0\1\320\7\0\1\74\1\0";
+    "\1\47\1\2\1\50\1\2\2\50\2\51\3\52\1\53"+
+    "\1\2\1\54\1\2\2\54\3\55\1\56\1\2\1\57"+
+    "\1\60\1\57\1\61\1\62\1\63\1\4\1\6\1\63"+
+    "\1\64\1\65\1\66\1\67\1\16\1\17\1\20\1\21"+
+    "\1\22\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+
+    "\1\33\1\34\1\70\1\71\1\72\1\73\2\2\3\74"+
+    "\2\73\1\75\1\1\1\0\1\76\1\77\1\1\1\100"+
+    "\2\0\1\101\6\5\1\102\1\103\2\0\3\5\1\104"+
+    "\2\5\2\0\1\105\3\0\1\106\1\0\1\107\1\110"+
+    "\1\111\7\5\1\112\12\5\1\113\12\5\1\114\1\115"+
+    "\1\116\1\117\1\120\1\121\1\5\12\0\1\5\1\122"+
+    "\1\123\1\122\1\124\1\0\1\125\1\126\1\127\1\130"+
+    "\1\131\1\132\1\133\1\134\1\135\1\136\1\137\1\140"+
+    "\1\141\4\0\2\105\2\142\1\143\1\144\1\142\3\0"+
+    "\1\105\3\145\3\0\1\146\1\0\2\147\1\0\1\53"+
+    "\3\0\1\150\1\0\1\54\2\151\1\0\1\56\1\0"+
+    "\1\152\1\153\2\0\1\154\2\0\1\155\1\156\1\157"+
+    "\2\0\1\100\1\0\1\160\7\5\2\100\1\161\1\5"+
+    "\1\162\2\5\1\0\1\163\6\5\1\164\3\5\1\165"+
+    "\2\5\1\166\1\5\1\167\1\170\23\5\1\171\1\172"+
+    "\12\0\10\5\1\173\1\174\1\175\2\0\1\176\1\0"+
+    "\1\177\1\0\2\132\2\140\1\0\1\200\1\44\1\200"+
+    "\1\46\1\200\1\201\1\0\1\202\1\0\1\146\1\150"+
+    "\2\153\1\203\2\0\6\5\1\204\1\205\1\5\1\206"+
+    "\23\5\1\207\12\5\1\210\1\5\1\211\5\5\12\0"+
+    "\11\5\5\0\1\212\3\0\1\44\1\46\1\201\2\0"+
+    "\1\5\1\213\5\5\1\214\1\5\1\215\1\216\4\5"+
+    "\1\217\1\5\1\220\1\221\3\5\1\222\2\5\1\223"+
+    "\1\5\1\224\2\5\1\225\1\226\1\227\4\5\1\230"+
+    "\1\231\2\5\1\232\2\5\5\0\1\233\6\0\11\5"+
+    "\2\234\5\0\3\235\2\236\1\0\2\5\1\237\2\5"+
+    "\1\240\7\5\1\241\7\5\1\242\1\243\1\244\1\5"+
+    "\1\0\1\245\1\246\2\5\4\0\1\247\5\0\1\250"+
+    "\11\5\6\0\1\251\6\5\1\252\3\5\1\253\1\254"+
+    "\1\255\1\5\1\256\3\5\1\257\1\0\1\260\1\5"+
+    "\1\261\3\0\1\262\1\0\1\5\1\263\7\5\2\264"+
+    "\4\0\3\5\1\265\1\266\5\5\1\267\1\5\1\270"+
+    "\1\271\1\5\1\0\1\5\1\272\1\273\1\5\1\274"+
+    "\3\5\1\275\2\5\5\0\2\5\1\276\1\277\1\5"+
+    "\1\300\2\5\1\301\1\5\1\0\1\302\1\303\2\5"+
+    "\1\304\2\5\5\0\1\305\1\306\1\5\1\307\1\310"+
+    "\1\5\1\311\2\5\1\312\1\5\10\0\5\5\7\0"+
+    "\1\313\1\314\1\315\2\5\1\0\1\316\2\0\1\317"+
+    "\1\5\5\0\1\5\1\320\3\0\1\5\7\0\1\321"+
+    "\7\0\1\77\1\0";
 
   private static int [] zzUnpackAction() {
-    int [] result = new int[790];
+    int [] result = new int[786];
     int offset = 0;
     offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
     return result;
@@ -270,96 +271,96 @@ private static int zzUnpackAction(String packed, int offset, int [] result) {
     "\0\u0550\0\u0550\0\u0550\0\u1100\0\u0550\0\u1144\0\u1188\0\u11cc"+
     "\0\u0550\0\u1210\0\u1254\0\u1298\0\u12dc\0\u0550\0\u1320\0\u1364"+
     "\0\u13a8\0\u13ec\0\u1430\0\u1474\0\u14b8\0\u0550\0\u14fc\0\u1540"+
-    "\0\u1584\0\u15c8\0\u160c\0\u0550\0\u1650\0\u1694\0\u0550\0\u16d8"+
-    "\0\u171c\0\u0550\0\u1760\0\u17a4\0\u0550\0\u0550\0\u17e8\0\u0550"+
+    "\0\u1584\0\u15c8\0\u160c\0\u1650\0\u1694\0\u16d8\0\u0550\0\u171c"+
+    "\0\u1760\0\u17a4\0\u17e8\0\u0550\0\u182c\0\u1870\0\u0550\0\u18b4"+
+    "\0\u18f8\0\u0550\0\u0550\0\u193c\0\u0550\0\u0550\0\u0550\0\u0550"+
     "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550"+
     "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550"+
-    "\0\u0550\0\u0550\0\u0550\0\u182c\0\u1870\0\u18b4\0\u18f8\0\u193c"+
-    "\0\u0550\0\u1980\0\u0550\0\u19c4\0\u0550\0\u0484\0\u1a08\0\u1a4c"+
-    "\0\u1a90\0\u1ad4\0\u1b18\0\u1b5c\0\u1ba0\0\u0550\0\u1be4\0\u1c28"+
-    "\0\u1c6c\0\u1cb0\0\u1cf4\0\u1d38\0\u0550\0\u0550\0\u1d7c\0\u1dc0"+
-    "\0\u1e04\0\u1e48\0\u1e8c\0\u07b4\0\u1ed0\0\u1f14\0\u1f58\0\u1100"+
-    "\0\u1f9c\0\u0880\0\u1fe0\0\u2024\0\u0550\0\u2068\0\u20ac\0\u0550"+
-    "\0\u07b4\0\u20f0\0\u2134\0\u2178\0\u21bc\0\u2200\0\u2244\0\u2288"+
-    "\0\u07b4\0\u22cc\0\u2310\0\u2354\0\u2398\0\u23dc\0\u2420\0\u2464"+
-    "\0\u24a8\0\u24ec\0\u2530\0\u07b4\0\u2574\0\u25b8\0\u25fc\0\u2640"+
-    "\0\u2684\0\u26c8\0\u270c\0\u2750\0\u2794\0\u27d8\0\u0550\0\u0550"+
-    "\0\u0550\0\u0550\0\u281c\0\u0550\0\u2860\0\u28a4\0\u28e8\0\u0e14"+
-    "\0\u292c\0\u2970\0\u29b4\0\u29f8\0\u2a3c\0\u2a80\0\u2ac4\0\u2b08"+
-    "\0\u2b4c\0\u2b90\0\u0550\0\u2bd4\0\u2c18\0\u0550\0\u2c5c\0\u0550"+
-    "\0\u2ca0\0\u0550\0\u2ce4\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550"+
-    "\0\u2d28\0\u0550\0\u2d6c\0\u1188\0\u2db0\0\u2df4\0\u2e38\0\u2e7c"+
-    "\0\u2db0\0\u0550\0\u0550\0\u0550\0\u2df4\0\u1298\0\u2ec0\0\u2f04"+
-    "\0\u2f48\0\u2ec0\0\u0550\0\u2f04\0\u2f8c\0\u2fd0\0\u3014\0\u3058"+
-    "\0\u309c\0\u14fc\0\u0550\0\u30e0\0\u1540\0\u0550\0\u3124\0\u1584"+
-    "\0\u160c\0\u15c8\0\u3168\0\u31ac\0\u31f0\0\u1650\0\u0550\0\u3234"+
-    "\0\u1694\0\u0550\0\u3278\0\u0550\0\u32bc\0\u3300\0\u3344\0\u0550"+
-    "\0\u18b4\0\u3388\0\u0550\0\u0550\0\u0550\0\u33cc\0\u3410\0\u3454"+
-    "\0\u3454\0\u0550\0\u3498\0\u34dc\0\u3520\0\u3564\0\u35a8\0\u35ec"+
-    "\0\u3630\0\u1d7c\0\u1dc0\0\u07b4\0\u3674\0\u07b4\0\u36b8\0\u36fc"+
-    "\0\u3740\0\u0550\0\u3784\0\u37c8\0\u380c\0\u3850\0\u3894\0\u38d8"+
-    "\0\u07b4\0\u391c\0\u3960\0\u39a4\0\u07b4\0\u39e8\0\u3a2c\0\u3a70"+
-    "\0\u3ab4\0\u07b4\0\u07b4\0\u3af8\0\u3b3c\0\u3b80\0\u3bc4\0\u3c08"+
-    "\0\u3c4c\0\u3c90\0\u3cd4\0\u3d18\0\u3d5c\0\u3da0\0\u3de4\0\u3e28"+
-    "\0\u3e6c\0\u3eb0\0\u3ef4\0\u3f38\0\u3f7c\0\u3fc0\0\u0550\0\u07b4"+
-    "\0\u4004\0\u4048\0\u408c\0\u40d0\0\u4114\0\u4158\0\u419c\0\u41e0"+
-    "\0\u4224\0\u4268\0\u42ac\0\u42f0\0\u4334\0\u4378\0\u43bc\0\u4400"+
-    "\0\u4444\0\u4488\0\u0550\0\u0550\0\u0550\0\u44cc\0\u4510\0\u0550"+
-    "\0\u4554\0\u4598\0\u45dc\0\u0550\0\u4620\0\u0550\0\u4664\0\u46a8"+
-    "\0\u0550\0\u46ec\0\u1144\0\u4730\0\u1254\0\u4774\0\u47b8\0\u0550"+
-    "\0\u47fc\0\u0550\0\u4840\0\u4884\0\u0550\0\u48c8\0\u160c\0\u490c"+
-    "\0\u3300\0\u3344\0\u0550\0\u4950\0\u4994\0\u49d8\0\u4a1c\0\u4a60"+
-    "\0\u4aa4\0\u4ae8\0\u4b2c\0\u07b4\0\u4b70\0\u4bb4\0\u07b4\0\u4bf8"+
+    "\0\u1980\0\u19c4\0\u1a08\0\u1a4c\0\u1a90\0\u0550\0\u1ad4\0\u0550"+
+    "\0\u1b18\0\u0550\0\u0484\0\u1b5c\0\u1ba0\0\u1be4\0\u1c28\0\u1c6c"+
+    "\0\u1cb0\0\u1cf4\0\u0550\0\u1d38\0\u1d7c\0\u1dc0\0\u1e04\0\u1e48"+
+    "\0\u1e8c\0\u0550\0\u0550\0\u1ed0\0\u1f14\0\u1f58\0\u1f9c\0\u1fe0"+
+    "\0\u07b4\0\u2024\0\u2068\0\u20ac\0\u1100\0\u20f0\0\u0880\0\u2134"+
+    "\0\u2178\0\u0550\0\u21bc\0\u2200\0\u0550\0\u07b4\0\u2244\0\u2288"+
+    "\0\u22cc\0\u2310\0\u2354\0\u2398\0\u23dc\0\u07b4\0\u2420\0\u2464"+
+    "\0\u24a8\0\u24ec\0\u2530\0\u2574\0\u25b8\0\u25fc\0\u2640\0\u2684"+
+    "\0\u07b4\0\u26c8\0\u270c\0\u2750\0\u2794\0\u27d8\0\u281c\0\u2860"+
+    "\0\u28a4\0\u28e8\0\u292c\0\u0550\0\u0550\0\u0550\0\u0550\0\u2970"+
+    "\0\u0550\0\u29b4\0\u29f8\0\u2a3c\0\u0e14\0\u2a80\0\u2ac4\0\u2b08"+
+    "\0\u2b4c\0\u2b90\0\u2bd4\0\u2c18\0\u2c5c\0\u2ca0\0\u2ce4\0\u0550"+
+    "\0\u2d28\0\u2d6c\0\u0550\0\u2db0\0\u0550\0\u2df4\0\u0550\0\u2e38"+
+    "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u2e7c\0\u0550\0\u2ec0"+
+    "\0\u1188\0\u2f04\0\u2f48\0\u2f8c\0\u2fd0\0\u2f04\0\u0550\0\u0550"+
+    "\0\u0550\0\u2f48\0\u1298\0\u3014\0\u3058\0\u309c\0\u3014\0\u0550"+
+    "\0\u3058\0\u30e0\0\u3124\0\u3168\0\u31ac\0\u31f0\0\u14fc\0\u0550"+
+    "\0\u1540\0\u0550\0\u15c8\0\u1650\0\u160c\0\u3234\0\u3278\0\u32bc"+
+    "\0\u171c\0\u0550\0\u1760\0\u0550\0\u17e8\0\u0550\0\u3300\0\u3344"+
+    "\0\u3388\0\u0550\0\u1a08\0\u33cc\0\u0550\0\u0550\0\u0550\0\u3410"+
+    "\0\u3454\0\u3498\0\u3498\0\u0550\0\u34dc\0\u3520\0\u3564\0\u35a8"+
+    "\0\u35ec\0\u3630\0\u3674\0\u1ed0\0\u1f14\0\u07b4\0\u36b8\0\u07b4"+
+    "\0\u36fc\0\u3740\0\u3784\0\u0550\0\u37c8\0\u380c\0\u3850\0\u3894"+
+    "\0\u38d8\0\u391c\0\u07b4\0\u3960\0\u39a4\0\u39e8\0\u07b4\0\u3a2c"+
+    "\0\u3a70\0\u3ab4\0\u3af8\0\u07b4\0\u07b4\0\u3b3c\0\u3b80\0\u3bc4"+
+    "\0\u3c08\0\u3c4c\0\u3c90\0\u3cd4\0\u3d18\0\u3d5c\0\u3da0\0\u3de4"+
+    "\0\u3e28\0\u3e6c\0\u3eb0\0\u3ef4\0\u3f38\0\u3f7c\0\u3fc0\0\u4004"+
+    "\0\u0550\0\u07b4\0\u4048\0\u408c\0\u40d0\0\u4114\0\u4158\0\u419c"+
+    "\0\u41e0\0\u4224\0\u4268\0\u42ac\0\u42f0\0\u4334\0\u4378\0\u43bc"+
+    "\0\u4400\0\u4444\0\u4488\0\u44cc\0\u0550\0\u0550\0\u0550\0\u4510"+
+    "\0\u4554\0\u0550\0\u4598\0\u45dc\0\u4620\0\u0550\0\u4664\0\u0550"+
+    "\0\u46a8\0\u46ec\0\u0550\0\u4730\0\u1144\0\u4774\0\u1254\0\u47b8"+
+    "\0\u47fc\0\u0550\0\u4840\0\u0550\0\u0550\0\u3344\0\u3388\0\u0550"+
+    "\0\u4884\0\u48c8\0\u490c\0\u4950\0\u4994\0\u49d8\0\u4a1c\0\u4a60"+
+    "\0\u07b4\0\u4aa4\0\u4ae8\0\u07b4\0\u4b2c\0\u4b70\0\u4bb4\0\u4bf8"+
     "\0\u4c3c\0\u4c80\0\u4cc4\0\u4d08\0\u4d4c\0\u4d90\0\u4dd4\0\u4e18"+
-    "\0\u4e5c\0\u4ea0\0\u4ee4\0\u4f28\0\u4f6c\0\u4fb0\0\u4ff4\0\u5038"+
-    "\0\u507c\0\u50c0\0\u07b4\0\u5104\0\u5148\0\u518c\0\u51d0\0\u5214"+
-    "\0\u5258\0\u529c\0\u52e0\0\u5324\0\u5368\0\u07b4\0\u53ac\0\u07b4"+
+    "\0\u4e5c\0\u4ea0\0\u4ee4\0\u4f28\0\u4f6c\0\u4fb0\0\u4ff4\0\u07b4"+
+    "\0\u5038\0\u507c\0\u50c0\0\u5104\0\u5148\0\u518c\0\u51d0\0\u5214"+
+    "\0\u5258\0\u529c\0\u07b4\0\u52e0\0\u07b4\0\u5324\0\u5368\0\u53ac"+
     "\0\u53f0\0\u5434\0\u5478\0\u54bc\0\u5500\0\u5544\0\u5588\0\u55cc"+
     "\0\u5610\0\u5654\0\u5698\0\u56dc\0\u5720\0\u5764\0\u57a8\0\u57ec"+
     "\0\u5830\0\u5874\0\u58b8\0\u58fc\0\u5940\0\u5984\0\u59c8\0\u5a0c"+
-    "\0\u5a50\0\u5a94\0\u5ad8\0\u5b1c\0\u5b60\0\u0550\0\u5ba4\0\u5be8"+
-    "\0\u5c2c\0\u5c70\0\u5cb4\0\u0550\0\u5cf8\0\u5d3c\0\u5d80\0\u5dc4"+
-    "\0\u07b4\0\u5e08\0\u5e4c\0\u5e90\0\u5ed4\0\u5f18\0\u07b4\0\u5f5c"+
-    "\0\u07b4\0\u07b4\0\u5fa0\0\u5fe4\0\u6028\0\u606c\0\u07b4\0\u60b0"+
-    "\0\u07b4\0\u07b4\0\u60f4\0\u6138\0\u617c\0\u61c0\0\u6204\0\u6248"+
-    "\0\u07b4\0\u628c\0\u07b4\0\u62d0\0\u6314\0\u07b4\0\u07b4\0\u07b4"+
-    "\0\u6358\0\u639c\0\u63e0\0\u6424\0\u6468\0\u07b4\0\u64ac\0\u64f0"+
-    "\0\u07b4\0\u6534\0\u6578\0\u65bc\0\u6600\0\u6644\0\u6688\0\u66cc"+
-    "\0\u0550\0\u6710\0\u6754\0\u6798\0\u67dc\0\u6820\0\u6864\0\u68a8"+
-    "\0\u68ec\0\u6930\0\u6974\0\u69b8\0\u69fc\0\u6a40\0\u6a84\0\u6ac8"+
-    "\0\u0550\0\u6b0c\0\u6b50\0\u6b94\0\u6bd8\0\u6c1c\0\u6c60\0\u0550"+
-    "\0\u1144\0\u1254\0\u0550\0\u6ca4\0\u6ce8\0\u6d2c\0\u6d70\0\u6db4"+
-    "\0\u6df8\0\u6e3c\0\u07b4\0\u6e80\0\u6ec4\0\u6f08\0\u6f4c\0\u6f90"+
-    "\0\u6fd4\0\u7018\0\u07b4\0\u705c\0\u70a0\0\u70e4\0\u7128\0\u716c"+
-    "\0\u71b0\0\u71f4\0\u07b4\0\u07b4\0\u07b4\0\u7238\0\u727c\0\u07b4"+
-    "\0\u07b4\0\u72c0\0\u7304\0\u7348\0\u738c\0\u73d0\0\u7414\0\u0550"+
-    "\0\u7458\0\u749c\0\u74e0\0\u7524\0\u7568\0\u0550\0\u75ac\0\u75f0"+
+    "\0\u5a50\0\u5a94\0\u0550\0\u5ad8\0\u5b1c\0\u5b60\0\u5ba4\0\u5be8"+
+    "\0\u0550\0\u5c2c\0\u5c70\0\u5cb4\0\u07b4\0\u5cf8\0\u5d3c\0\u5d80"+
+    "\0\u5dc4\0\u5e08\0\u07b4\0\u5e4c\0\u07b4\0\u07b4\0\u5e90\0\u5ed4"+
+    "\0\u5f18\0\u5f5c\0\u07b4\0\u5fa0\0\u07b4\0\u07b4\0\u5fe4\0\u6028"+
+    "\0\u606c\0\u60b0\0\u60f4\0\u6138\0\u07b4\0\u617c\0\u07b4\0\u61c0"+
+    "\0\u6204\0\u07b4\0\u07b4\0\u07b4\0\u6248\0\u628c\0\u62d0\0\u6314"+
+    "\0\u6358\0\u07b4\0\u639c\0\u63e0\0\u07b4\0\u6424\0\u6468\0\u64ac"+
+    "\0\u64f0\0\u6534\0\u6578\0\u65bc\0\u0550\0\u6600\0\u6644\0\u6688"+
+    "\0\u66cc\0\u6710\0\u6754\0\u6798\0\u67dc\0\u6820\0\u6864\0\u68a8"+
+    "\0\u68ec\0\u6930\0\u6974\0\u69b8\0\u0550\0\u69fc\0\u6a40\0\u6a84"+
+    "\0\u6ac8\0\u6b0c\0\u6b50\0\u0550\0\u1144\0\u1254\0\u0550\0\u6b94"+
+    "\0\u6bd8\0\u6c1c\0\u6c60\0\u6ca4\0\u6ce8\0\u6d2c\0\u07b4\0\u6d70"+
+    "\0\u6db4\0\u6df8\0\u6e3c\0\u6e80\0\u6ec4\0\u6f08\0\u07b4\0\u6f4c"+
+    "\0\u6f90\0\u6fd4\0\u7018\0\u705c\0\u70a0\0\u70e4\0\u07b4\0\u07b4"+
+    "\0\u07b4\0\u7128\0\u716c\0\u07b4\0\u07b4\0\u71b0\0\u71f4\0\u7238"+
+    "\0\u727c\0\u72c0\0\u7304\0\u0550\0\u7348\0\u738c\0\u73d0\0\u7414"+
+    "\0\u7458\0\u0550\0\u749c\0\u74e0\0\u7524\0\u7568\0\u75ac\0\u75f0"+
     "\0\u7634\0\u7678\0\u76bc\0\u7700\0\u7744\0\u7788\0\u77cc\0\u7810"+
-    "\0\u7854\0\u7898\0\u78dc\0\u7920\0\u7964\0\u07b4\0\u79a8\0\u79ec"+
-    "\0\u7a30\0\u7a74\0\u7ab8\0\u7afc\0\u7b40\0\u7b84\0\u7bc8\0\u7c0c"+
-    "\0\u07b4\0\u07b4\0\u07b4\0\u7c50\0\u07b4\0\u7c94\0\u7cd8\0\u7d1c"+
-    "\0\u7d60\0\u7da4\0\u07b4\0\u7de8\0\u0550\0\u7e2c\0\u7e70\0\u7eb4"+
-    "\0\u0550\0\u7ef8\0\u7f3c\0\u07b4\0\u7f80\0\u7fc4\0\u8008\0\u804c"+
-    "\0\u8090\0\u80d4\0\u8118\0\u0550\0\u815c\0\u81a0\0\u81e4\0\u8228"+
-    "\0\u826c\0\u82b0\0\u82f4\0\u8338\0\u07b4\0\u07b4\0\u837c\0\u83c0"+
-    "\0\u8404\0\u8448\0\u848c\0\u07b4\0\u84d0\0\u07b4\0\u07b4\0\u8514"+
-    "\0\u8558\0\u859c\0\u0550\0\u0550\0\u85e0\0\u07b4\0\u8624\0\u8668"+
-    "\0\u86ac\0\u07b4\0\u86f0\0\u8734\0\u8778\0\u87bc\0\u8800\0\u8844"+
-    "\0\u8888\0\u88cc\0\u8910\0\u07b4\0\u07b4\0\u8954\0\u07b4\0\u8998"+
-    "\0\u89dc\0\u07b4\0\u8a20\0\u8a64\0\u07b4\0\u07b4\0\u8aa8\0\u8aec"+
-    "\0\u07b4\0\u8b30\0\u8b74\0\u8bb8\0\u8bfc\0\u8c40\0\u8c84\0\u8cc8"+
-    "\0\u07b4\0\u07b4\0\u8d0c\0\u07b4\0\u07b4\0\u8d50\0\u0550\0\u8d94"+
-    "\0\u8dd8\0\u07b4\0\u8e1c\0\u8e60\0\u8ea4\0\u8ee8\0\u8f2c\0\u8f70"+
+    "\0\u7854\0\u07b4\0\u7898\0\u78dc\0\u7920\0\u7964\0\u79a8\0\u79ec"+
+    "\0\u7a30\0\u7a74\0\u7ab8\0\u7afc\0\u07b4\0\u07b4\0\u07b4\0\u7b40"+
+    "\0\u07b4\0\u7b84\0\u7bc8\0\u7c0c\0\u7c50\0\u7c94\0\u07b4\0\u7cd8"+
+    "\0\u0550\0\u7d1c\0\u7d60\0\u7da4\0\u0550\0\u7de8\0\u7e2c\0\u07b4"+
+    "\0\u7e70\0\u7eb4\0\u7ef8\0\u7f3c\0\u7f80\0\u7fc4\0\u8008\0\u0550"+
+    "\0\u804c\0\u8090\0\u80d4\0\u8118\0\u815c\0\u81a0\0\u81e4\0\u8228"+
+    "\0\u07b4\0\u07b4\0\u826c\0\u82b0\0\u82f4\0\u8338\0\u837c\0\u07b4"+
+    "\0\u83c0\0\u07b4\0\u07b4\0\u8404\0\u8448\0\u848c\0\u0550\0\u0550"+
+    "\0\u84d0\0\u07b4\0\u8514\0\u8558\0\u859c\0\u07b4\0\u85e0\0\u8624"+
+    "\0\u8668\0\u86ac\0\u86f0\0\u8734\0\u8778\0\u87bc\0\u8800\0\u07b4"+
+    "\0\u07b4\0\u8844\0\u07b4\0\u8888\0\u88cc\0\u07b4\0\u8910\0\u8954"+
+    "\0\u07b4\0\u07b4\0\u8998\0\u89dc\0\u07b4\0\u8a20\0\u8a64\0\u8aa8"+
+    "\0\u8aec\0\u8b30\0\u8b74\0\u8bb8\0\u07b4\0\u07b4\0\u8bfc\0\u07b4"+
+    "\0\u07b4\0\u8c40\0\u0550\0\u8c84\0\u8cc8\0\u07b4\0\u8d0c\0\u8d50"+
+    "\0\u8d94\0\u8dd8\0\u8e1c\0\u8e60\0\u8ea4\0\u8ee8\0\u8f2c\0\u8f70"+
     "\0\u8fb4\0\u8ff8\0\u903c\0\u9080\0\u90c4\0\u9108\0\u914c\0\u9190"+
-    "\0\u91d4\0\u9218\0\u925c\0\u92a0\0\u92e4\0\u9328\0\u936c\0\u07b4"+
-    "\0\u07b4\0\u07b4\0\u93b0\0\u93f4\0\u9438\0\u0550\0\u947c\0\u94c0"+
-    "\0\u07b4\0\u9504\0\u9548\0\u958c\0\u95d0\0\u9614\0\u9658\0\u969c"+
-    "\0\u9548\0\u96e0\0\u9724\0\u9768\0\u97ac\0\u97f0\0\u9834\0\u9878"+
-    "\0\u98bc\0\u9900\0\u9944\0\u9988\0\u0550\0\u99cc\0\u9a10\0\u9a54"+
-    "\0\u9a98\0\u9adc\0\u9b20\0\u9b64\0\u0550\0\u9ba8";
+    "\0\u91d4\0\u9218\0\u925c\0\u07b4\0\u07b4\0\u07b4\0\u92a0\0\u92e4"+
+    "\0\u9328\0\u0550\0\u936c\0\u93b0\0\u07b4\0\u93f4\0\u9438\0\u947c"+
+    "\0\u94c0\0\u9504\0\u9548\0\u958c\0\u9438\0\u95d0\0\u9614\0\u9658"+
+    "\0\u969c\0\u96e0\0\u9724\0\u9768\0\u97ac\0\u97f0\0\u9834\0\u9878"+
+    "\0\u0550\0\u98bc\0\u9900\0\u9944\0\u9988\0\u99cc\0\u9a10\0\u9a54"+
+    "\0\u0550\0\u9a98";
 
   private static int [] zzUnpackRowMap() {
-    int [] result = new int[790];
+    int [] result = new int[786];
     int offset = 0;
     offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
     return result;
@@ -394,855 +395,852 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) {
     "\1\116\1\122\57\116\15\123\1\124\3\123\1\125\1\123"+
     "\1\126\1\127\57\123\15\130\1\131\1\132\1\130\1\133"+
     "\1\134\2\130\1\135\57\130\3\136\1\137\2\136\3\137"+
-    "\1\136\2\137\13\136\22\137\3\136\1\137\2\136\3\137"+
-    "\17\136\1\137\2\136\3\25\1\140\2\25\3\140\1\25"+
-    "\2\140\13\25\22\140\3\25\1\140\2\25\3\140\17\25"+
-    "\1\140\2\25\3\141\1\142\2\141\3\142\2\141\1\142"+
-    "\2\141\1\143\1\141\1\143\6\141\22\142\3\141\1\142"+
-    "\2\141\3\142\17\141\1\142\2\141\3\144\1\145\2\144"+
-    "\3\145\1\144\2\145\13\144\22\145\3\144\1\145\2\144"+
-    "\3\145\17\144\1\145\2\144\3\25\1\146\2\25\3\146"+
-    "\1\25\2\146\13\25\22\146\3\25\1\146\2\25\3\146"+
-    "\17\25\1\146\2\25\3\147\1\150\2\147\3\150\1\147"+
-    "\2\150\2\147\3\40\6\147\22\150\1\151\2\147\1\150"+
-    "\2\147\3\150\17\147\1\150\2\147\3\152\1\153\2\152"+
-    "\3\153\1\152\2\153\13\152\22\153\3\152\1\153\2\152"+
-    "\3\153\17\152\1\153\2\152\1\25\1\154\1\155\1\36"+
-    "\1\156\1\157\3\36\1\154\2\36\1\25\4\160\1\41"+
-    "\1\161\1\162\1\163\1\45\1\164\22\36\1\165\1\166"+
-    "\1\167\1\36\1\170\1\73\3\36\1\171\1\172\1\173"+
-    "\1\174\1\175\1\176\1\177\1\200\1\201\1\106\1\107"+
-    "\1\202\1\111\1\112\1\203\1\36\2\160\64\204\1\205"+
-    "\17\204\64\206\1\207\17\206\16\210\1\211\1\210\1\212"+
-    "\31\210\1\213\13\210\1\214\3\210\1\214\11\210\26\0"+
-    "\1\215\55\0\104\216\63\23\1\217\103\23\1\0\2\23"+
-    "\1\220\3\23\1\221\6\23\1\222\2\23\105\0\1\26"+
-    "\1\223\1\224\1\0\1\26\3\0\1\26\73\0\1\223"+
-    "\1\225\2\0\1\223\3\0\1\223\14\0\1\226\56\0"+
-    "\1\36\1\0\1\36\1\0\1\36\1\227\6\36\12\0"+
-    "\5\36\1\230\1\231\4\36\1\232\1\233\5\36\3\0"+
-    "\1\234\2\0\3\36\17\0\1\36\6\0\1\235\21\0"+
-    "\1\236\56\0\1\26\1\223\1\224\1\0\1\26\1\237"+
-    "\1\0\1\240\1\26\73\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\7\36\1\241\12\36\3\0\1\36\2\0"+
+    "\1\136\2\137\3\136\1\140\7\136\22\137\3\136\1\137"+
+    "\2\136\3\137\17\136\1\137\2\136\3\25\1\141\2\25"+
+    "\3\141\1\25\2\141\3\25\1\142\7\25\22\141\3\25"+
+    "\1\141\2\25\3\141\17\25\1\141\2\25\3\143\1\144"+
+    "\2\143\3\144\2\143\1\144\2\143\1\145\1\143\1\146"+
+    "\6\143\22\144\3\143\1\144\2\143\3\144\17\143\1\144"+
+    "\2\143\3\147\1\150\2\147\3\150\1\147\2\150\3\147"+
+    "\1\151\7\147\22\150\3\147\1\150\2\147\3\150\17\147"+
+    "\1\150\2\147\3\25\1\152\2\25\3\152\1\25\2\152"+
+    "\3\25\1\153\7\25\22\152\3\25\1\152\2\25\3\152"+
+    "\17\25\1\152\2\25\3\154\1\155\2\154\3\155\1\154"+
+    "\2\155\2\154\3\40\6\154\22\155\1\156\2\154\1\155"+
+    "\2\154\3\155\17\154\1\155\2\154\3\157\1\160\2\157"+
+    "\3\160\1\157\2\160\13\157\22\160\3\157\1\160\2\157"+
+    "\3\160\17\157\1\160\2\157\1\25\1\161\1\162\1\36"+
+    "\1\163\1\164\3\36\1\161\2\36\1\25\4\165\1\41"+
+    "\1\166\1\167\1\170\1\45\1\171\22\36\1\172\1\173"+
+    "\1\174\1\36\1\175\1\73\3\36\1\176\1\177\1\200"+
+    "\1\201\1\202\1\203\1\204\1\205\1\206\1\106\1\107"+
+    "\1\207\1\111\1\112\1\210\1\36\2\165\64\211\1\212"+
+    "\17\211\64\213\1\214\17\213\16\215\1\216\1\215\1\217"+
+    "\31\215\1\220\13\215\1\221\3\215\1\221\11\215\26\0"+
+    "\1\222\55\0\104\223\63\23\1\224\103\23\1\0\2\23"+
+    "\1\225\3\23\1\226\6\23\1\227\2\23\105\0\1\26"+
+    "\1\230\1\231\1\0\1\26\3\0\1\26\73\0\1\230"+
+    "\1\232\2\0\1\230\3\0\1\230\14\0\1\233\56\0"+
+    "\1\36\1\0\1\36\1\0\1\36\1\234\6\36\12\0"+
+    "\5\36\1\235\1\236\4\36\1\237\1\240\5\36\3\0"+
+    "\1\241\2\0\3\36\17\0\1\36\6\0\1\242\21\0"+
+    "\1\243\56\0\1\26\1\230\1\231\1\0\1\26\1\244"+
+    "\1\0\1\245\1\26\73\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\7\36\1\246\12\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\3\36\1\242\4\36\12\0\5\36\1\243\2\36\1\244"+
-    "\1\245\10\36\3\0\1\36\2\0\3\36\17\0\1\244"+
+    "\3\36\1\247\4\36\12\0\5\36\1\250\2\36\1\251"+
+    "\1\252\10\36\3\0\1\36\2\0\3\36\17\0\1\251"+
     "\3\0\1\36\1\0\1\36\1\0\10\36\5\0\1\42"+
-    "\4\0\11\36\1\246\10\36\3\0\1\36\2\0\3\36"+
-    "\1\0\1\247\15\0\1\36\1\250\2\0\1\36\1\0"+
+    "\4\0\11\36\1\253\10\36\3\0\1\36\2\0\3\36"+
+    "\1\0\1\254\15\0\1\36\1\255\2\0\1\36\1\0"+
     "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\20\0\3\40\66\0\1\251\2\0"+
-    "\3\251\1\0\2\251\13\0\22\251\3\0\1\251\2\0"+
-    "\3\251\17\0\1\251\2\0\15\252\1\253\3\252\1\254"+
-    "\1\255\1\252\1\256\57\252\26\0\1\257\23\0\1\260"+
+    "\3\36\17\0\1\36\20\0\3\40\66\0\1\256\2\0"+
+    "\3\256\1\0\2\256\13\0\22\256\3\0\1\256\2\0"+
+    "\3\256\17\0\1\256\2\0\15\257\1\260\3\257\1\261"+
+    "\1\262\1\257\1\263\57\257\26\0\1\264\23\0\1\265"+
     "\32\0\1\36\1\0\1\36\1\0\10\36\12\0\3\36"+
-    "\1\261\1\36\1\262\2\36\1\263\3\36\1\264\5\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\263\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\11\36\1\265\3\36"+
-    "\1\266\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\267\1\0\10\36\12\0\1\270"+
-    "\6\36\1\271\12\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\266\1\36\1\267\2\36\1\270\3\36\1\271\5\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\270\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\11\36\1\272\3\36"+
+    "\1\273\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\274\1\0\10\36\12\0\1\275"+
+    "\6\36\1\276\12\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\272\3\36\1\273\2\36\1\274\12\36\3\0\1\36"+
+    "\1\277\3\36\1\300\2\36\1\301\12\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\5\36\1\275\2\36\1\276\11\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\276\3\0\1\36"+
-    "\1\0\1\277\1\0\2\36\1\300\5\36\12\0\22\36"+
+    "\1\0\10\36\12\0\5\36\1\302\2\36\1\303\11\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\303\3\0\1\36"+
+    "\1\0\1\304\1\0\2\36\1\305\5\36\12\0\22\36"+
     "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\301\5\36\12\0\7\36"+
-    "\1\302\3\36\1\303\6\36\3\0\1\36\2\0\3\36"+
+    "\1\0\1\36\1\0\2\36\1\306\5\36\12\0\7\36"+
+    "\1\307\3\36\1\310\6\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\11\36\1\304\10\36\3\0\1\36\2\0\3\36"+
+    "\12\0\11\36\1\311\10\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\36\1\305\14\36\1\306\3\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\307"+
+    "\12\0\1\36\1\312\14\36\1\313\3\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\314"+
     "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\310\21\36\3\0\1\36\2\0\3\36\17\0"+
+    "\12\0\1\315\21\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\311\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\1\316\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
     "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\15\36"+
-    "\1\312\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\1\317\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+
     "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\7\36"+
-    "\1\313\3\36\1\314\6\36\3\0\1\36\2\0\3\36"+
+    "\1\320\3\36\1\321\6\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\4\36\1\315\4\36\1\316\10\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\30\0\1\317\22\0\1\320"+
-    "\1\321\57\0\1\322\23\0\1\323\104\0\1\324\31\0"+
-    "\1\36\1\0\1\36\1\0\2\36\1\325\5\36\12\0"+
+    "\12\0\4\36\1\322\4\36\1\323\10\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\30\0\1\324\22\0\1\325"+
+    "\1\326\57\0\1\327\23\0\1\330\104\0\1\331\31\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\332\5\36\12\0"+
     "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\11\0"+
-    "\1\326\1\327\6\0\1\330\7\0\1\331\1\0\1\332"+
-    "\1\333\1\334\2\0\1\335\1\336\1\337\40\0\1\336"+
+    "\1\333\1\334\6\0\1\335\7\0\1\336\1\0\1\337"+
+    "\1\340\1\341\2\0\1\342\1\343\1\344\40\0\1\343"+
     "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\22\36"+
-    "\3\0\1\36\2\0\1\36\1\340\1\36\17\0\1\36"+
-    "\30\0\1\341\103\0\1\342\23\0\1\343\10\0\1\344"+
-    "\1\0\1\345\44\0\1\346\35\0\1\347\45\0\1\350"+
-    "\35\0\1\351\1\115\44\0\1\352\23\0\1\353\57\0"+
-    "\1\354\40\0\1\355\42\0\1\356\41\0\1\357\41\0"+
-    "\1\360\127\0\1\361\17\0\1\362\11\0\15\250\1\363"+
-    "\64\250\1\255\1\250\15\116\1\364\3\116\1\365\1\0"+
-    "\1\116\1\366\166\116\1\367\2\116\3\367\1\116\1\370"+
-    "\1\367\1\116\1\364\3\116\1\371\1\372\1\116\1\373"+
-    "\2\116\22\367\3\116\1\367\2\116\3\367\17\116\1\367"+
-    "\17\116\1\364\3\116\1\374\1\372\1\116\1\375\57\116"+
-    "\15\123\1\376\3\123\1\377\1\123\1\0\1\u0100\166\123"+
-    "\1\367\2\123\3\367\1\123\1\u0101\1\367\1\123\1\376"+
-    "\3\123\1\u0102\1\123\1\u0103\1\373\2\123\22\367\3\123"+
-    "\1\367\2\123\3\367\17\123\1\367\17\123\1\376\3\123"+
-    "\1\374\1\123\1\u0103\1\u0104\57\123\15\130\1\u0105\1\0"+
-    "\1\130\1\0\1\u0106\2\130\1\u0107\166\130\1\u0108\2\130"+
-    "\3\u0108\1\130\2\u0108\1\130\1\u0105\1\0\1\130\1\0"+
-    "\1\u0106\2\130\1\u0107\2\130\22\u0108\3\130\1\u0108\2\130"+
-    "\3\u0108\17\130\1\u0108\5\130\1\u0108\2\130\3\u0108\1\130"+
-    "\2\u0108\1\130\1\u0105\1\u0109\1\130\1\0\1\u0106\2\130"+
-    "\1\u0107\2\130\22\u0108\3\130\1\u0108\2\130\3\u0108\17\130"+
-    "\1\u0108\2\130\3\0\1\367\2\0\3\367\1\0\2\367"+
-    "\10\0\1\373\2\0\22\367\3\0\1\367\2\0\3\367"+
-    "\17\0\1\367\23\0\1\374\63\0\1\u010a\1\0\1\u010a"+
-    "\1\0\10\u010a\1\0\1\u010b\1\0\1\u010b\4\0\1\u010c"+
-    "\1\0\22\u010a\3\0\1\u010a\2\0\3\u010a\17\0\1\u010a"+
-    "\3\0\1\u010d\1\0\1\u010d\1\0\10\u010d\1\0\1\u010e"+
-    "\1\0\1\u010e\4\0\1\u010f\1\0\22\u010d\3\0\1\u010d"+
-    "\2\0\3\u010d\17\0\1\u010d\2\0\16\u0110\1\u0111\1\u0110"+
-    "\1\u0111\64\u0110\1\u0112\1\u0110\1\u0112\1\u0110\5\u0112\1\u0110"+
-    "\1\u0112\2\u0110\1\0\1\u0110\1\0\4\u0110\1\u0113\1\u0110"+
-    "\22\u0112\3\u0110\1\u0112\2\u0110\3\u0112\17\u0110\1\u0112\5\u0110"+
-    "\1\u0114\2\u0110\3\u0114\1\u0110\1\u0115\1\u0114\2\u0110\1\u0111"+
-    "\1\u0110\1\u0111\6\u0110\22\u0114\3\u0110\1\u0114\2\u0110\3\u0114"+
-    "\17\u0110\1\u0114\2\u0110\1\0\1\u0116\1\0\1\u0116\1\0"+
-    "\10\u0116\1\0\1\u0117\1\0\1\u0117\4\0\1\u0118\1\0"+
-    "\22\u0116\3\0\1\u0116\2\0\3\u0116\17\0\1\u0116\3\0"+
-    "\1\u0119\1\0\1\u0119\1\0\10\u0119\1\0\1\u011a\1\0"+
-    "\1\u011a\4\0\1\u011b\1\0\22\u0119\3\0\1\u0119\2\0"+
-    "\3\u0119\17\0\1\u0119\3\0\1\150\1\0\1\150\1\0"+
-    "\10\150\12\0\22\150\3\0\1\150\2\0\3\150\17\0"+
-    "\1\150\54\0\1\u011c\32\0\1\153\1\0\1\153\1\0"+
-    "\10\153\12\0\22\153\3\0\1\153\2\0\3\153\17\0"+
-    "\1\153\3\0\1\154\3\0\1\154\3\0\1\154\73\0"+
-    "\1\u011d\3\0\1\u011d\1\u011e\1\0\1\u011f\1\u011d\72\0"+
-    "\64\204\1\0\17\204\65\0\1\u0120\16\0\64\u0121\1\u0122"+
-    "\103\u0121\1\u0122\1\u0123\16\u0121\16\210\1\211\1\210\1\212"+
-    "\31\210\1\211\13\210\1\211\3\210\1\211\11\210\16\0"+
-    "\1\211\137\0\1\u0124\31\0\63\23\1\0\2\23\1\0"+
-    "\3\23\1\0\6\23\1\0\2\23\26\0\1\u0125\103\0"+
-    "\1\u0125\21\0\1\u0126\70\0\1\u0127\47\0\1\223\1\0"+
-    "\1\224\1\0\1\223\3\0\1\223\73\0\1\u0128\2\0"+
-    "\1\u0129\1\u0128\3\0\1\u0128\37\0\1\u0129\34\0\1\u012a"+
-    "\102\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u012b"+
-    "\1\u012c\20\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\2\36"+
-    "\1\u012d\17\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\15\36"+
-    "\1\u012e\4\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\2\0\1\36\1\345\1\36\17\0\1\36"+
+    "\30\0\1\346\103\0\1\347\23\0\1\350\10\0\1\351"+
+    "\1\0\1\352\44\0\1\353\35\0\1\354\45\0\1\355"+
+    "\35\0\1\356\1\115\44\0\1\357\23\0\1\360\57\0"+
+    "\1\361\40\0\1\362\42\0\1\363\41\0\1\364\41\0"+
+    "\1\365\127\0\1\366\17\0\1\367\11\0\15\255\1\370"+
+    "\64\255\1\262\1\255\15\116\1\371\3\116\1\372\1\0"+
+    "\1\116\1\373\166\116\1\374\2\116\3\374\1\116\1\375"+
+    "\1\374\1\116\1\371\3\116\1\376\1\377\1\116\1\u0100"+
+    "\2\116\22\374\3\116\1\374\2\116\3\374\17\116\1\374"+
+    "\17\116\1\371\3\116\1\u0101\1\377\1\116\1\u0102\57\116"+
+    "\15\123\1\u0103\3\123\1\u0104\1\123\1\0\1\u0105\166\123"+
+    "\1\374\2\123\3\374\1\123\1\u0106\1\374\1\123\1\u0103"+
+    "\3\123\1\u0107\1\123\1\u0108\1\u0100\2\123\22\374\3\123"+
+    "\1\374\2\123\3\374\17\123\1\374\17\123\1\u0103\3\123"+
+    "\1\u0101\1\123\1\u0108\1\u0109\57\123\15\130\1\u010a\1\0"+
+    "\1\130\1\0\1\u010b\2\130\1\u010c\166\130\1\u010d\2\130"+
+    "\3\u010d\1\130\2\u010d\1\130\1\u010a\1\0\1\132\1\0"+
+    "\1\u010b\2\130\1\u010c\2\130\22\u010d\3\130\1\u010d\2\130"+
+    "\3\u010d\17\130\1\u010d\5\130\1\u010d\2\130\3\u010d\1\130"+
+    "\2\u010d\1\130\1\u010a\1\u010e\1\132\1\0\1\u010b\2\130"+
+    "\1\u010c\2\130\22\u010d\3\130\1\u010d\2\130\3\u010d\17\130"+
+    "\1\u010d\2\130\3\0\1\374\2\0\3\374\1\0\2\374"+
+    "\10\0\1\u0100\2\0\22\374\3\0\1\374\2\0\3\374"+
+    "\17\0\1\374\23\0\1\u0101\62\0\16\u010f\1\u0110\1\u010f"+
+    "\1\u0110\63\u010f\3\0\1\u010f\2\0\3\u010f\1\0\2\u010f"+
+    "\3\0\1\u0111\7\0\22\u010f\3\0\1\u010f\2\0\3\u010f"+
+    "\17\0\1\u010f\3\0\1\141\1\0\1\141\1\0\10\141"+
+    "\10\0\1\u0112\1\0\22\141\3\0\1\141\2\0\3\141"+
+    "\17\0\1\141\5\0\1\141\2\0\3\141\1\0\2\141"+
+    "\3\0\1\u0113\7\0\22\141\3\0\1\141\2\0\3\141"+
+    "\17\0\1\141\2\0\16\143\1\0\1\143\1\0\64\143"+
+    "\1\u0114\1\143\1\u0114\1\143\5\u0114\1\143\1\u0114\2\143"+
+    "\1\0\1\143\1\0\4\143\1\u0115\1\143\22\u0114\3\143"+
+    "\1\u0114\2\143\3\u0114\17\143\1\u0114\5\143\1\u0116\2\143"+
+    "\3\u0116\1\143\2\u0116\2\143\1\u0117\1\u0118\1\u0117\6\143"+
+    "\22\u0116\3\143\1\u0116\2\143\3\u0116\17\143\1\u0116\5\143"+
+    "\1\u0116\2\143\3\u0116\1\143\2\u0116\2\143\1\145\1\u0118"+
+    "\1\u0117\6\143\22\u0116\3\143\1\u0116\2\143\3\u0116\17\143"+
+    "\1\u0116\2\143\16\u0119\1\u011a\1\u0119\1\u011a\63\u0119\3\0"+
+    "\1\u0119\2\0\3\u0119\1\0\2\u0119\3\0\1\u011b\7\0"+
+    "\22\u0119\3\0\1\u0119\2\0\3\u0119\17\0\1\u0119\3\0"+
+    "\1\152\1\0\1\152\1\0\10\152\10\0\1\u011c\1\0"+
+    "\22\152\3\0\1\152\2\0\3\152\17\0\1\152\5\0"+
+    "\1\152\2\0\3\152\1\0\2\152\3\0\1\u011d\7\0"+
+    "\22\152\3\0\1\152\2\0\3\152\17\0\1\152\3\0"+
+    "\1\155\1\0\1\155\1\0\10\155\12\0\22\155\3\0"+
+    "\1\155\2\0\3\155\17\0\1\155\54\0\1\u011e\32\0"+
+    "\1\160\1\0\1\160\1\0\10\160\12\0\22\160\3\0"+
+    "\1\160\2\0\3\160\17\0\1\160\3\0\1\161\3\0"+
+    "\1\161\3\0\1\161\73\0\1\u011f\3\0\1\u011f\1\u0120"+
+    "\1\0\1\u0121\1\u011f\72\0\64\211\1\0\17\211\65\0"+
+    "\1\u0122\16\0\64\u0123\1\u0124\103\u0123\1\u0124\1\u0125\16\u0123"+
+    "\16\215\1\216\1\215\1\217\31\215\1\216\13\215\1\216"+
+    "\3\215\1\216\11\215\16\0\1\216\137\0\1\u0126\31\0"+
+    "\63\23\1\0\2\23\1\0\3\23\1\0\6\23\1\0"+
+    "\2\23\26\0\1\u0127\103\0\1\u0127\21\0\1\u0128\70\0"+
+    "\1\u0129\47\0\1\230\1\0\1\231\1\0\1\230\3\0"+
+    "\1\230\73\0\1\u012a\2\0\1\u012b\1\u012a\3\0\1\u012a"+
+    "\37\0\1\u012b\34\0\1\u012c\102\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\1\u012d\1\u012e\20\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\2\36\1\u012f\17\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\15\36\1\u0130\4\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\10\36\1\u0131\11\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\u0131\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\21\36\1\u0132\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\2\36\1\u0133\5\36\12\0\22\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\u0134\1\0\1\u0134\1\0"+
+    "\1\u0134\1\0\3\u0134\17\0\2\u0134\2\0\1\u0134\53\0"+
+    "\1\u0135\3\0\1\u0135\73\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\11\36\1\u0136\10\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\10\36\1\u0137\11\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\u0137\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\2\36\1\u0138\17\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\11\36\1\u0139\10\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u013a\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\65\0\1\u013b\21\0\1\256\1\0\1\256\1\0"+
+    "\10\256\12\0\22\256\3\0\1\256\2\0\3\256\17\0"+
+    "\1\256\2\0\107\257\1\0\2\257\3\0\2\257\1\0"+
+    "\1\257\1\260\3\257\1\261\1\262\1\257\1\0\2\257"+
+    "\22\0\3\257\1\0\2\257\3\0\17\257\1\0\17\257"+
+    "\1\260\3\257\1\0\1\262\1\257\1\263\57\257\26\0"+
+    "\1\u013c\56\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\1\36\1\u013d\4\36\1\u013e\1\36\1\u013f\11\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\u013f\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\10\36\1\u0140\11\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\u0140\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\21\36\1\u0141\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\2\36\1\u0142\5\36\12\0\12\36\1\u0143\7\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\11\36\1\u0144\10\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\3\36\1\u0145\2\36"+
+    "\1\u0146\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\u0147\1\0\10\36\12\0\22\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\5\36\1\u0148\14\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\5\36\1\u0149\14\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\11\36\1\u014a\10\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\10\36\1\u014b\11\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\u014b\3\0\1\36"+
+    "\1\0\1\u014c\1\0\10\36\12\0\22\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\16\36\1\u014d\3\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\14\36\1\u014e\5\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\1\36\1\u014f\6\36\1\u0150\2\36"+
+    "\1\u0151\6\36\3\0\1\36\2\0\3\36\17\0\1\u0150"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\5\36"+
+    "\1\u0152\14\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\2\36\1\u0153\5\36"+
+    "\12\0\7\36\1\u0154\12\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+
+    "\1\u0155\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\1\u0156\21\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\1\36\1\u0157\20\36\3\0\1\36\2\0\2\36\1\u0158"+
+    "\17\0\1\36\3\0\1\36\1\0\1\u0159\1\0\10\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
     "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\10\36"+
-    "\1\u012f\11\36\3\0\1\36\2\0\3\36\17\0\1\u012f"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\21\36"+
-    "\1\u0130\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\2\36\1\u0131\5\36\12\0"+
+    "\1\u015a\11\36\3\0\1\36\2\0\3\36\17\0\1\u015a"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u015b"+
+    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u015c"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u015d"+
+    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\3\36\1\u015e\4\36\12\0"+
     "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\u0132\1\0\1\u0132\1\0\1\u0132\1\0\3\u0132\17\0"+
-    "\2\u0132\2\0\1\u0132\53\0\1\u0133\3\0\1\u0133\73\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u0134"+
-    "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\10\36\1\u0135"+
-    "\11\36\3\0\1\36\2\0\3\36\17\0\1\u0135\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\2\36\1\u0136"+
-    "\17\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u0137"+
-    "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\u0138\1\0\10\36\12\0\22\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\36\65\0\1\u0139\21\0"+
-    "\1\251\1\0\1\251\1\0\10\251\12\0\22\251\3\0"+
-    "\1\251\2\0\3\251\17\0\1\251\2\0\107\252\1\0"+
-    "\2\252\3\0\2\252\1\0\1\252\1\253\3\252\1\254"+
-    "\1\255\1\252\1\0\2\252\22\0\3\252\1\0\2\252"+
-    "\3\0\17\252\1\0\17\252\1\253\3\252\1\0\1\255"+
-    "\1\252\1\256\57\252\26\0\1\u013a\56\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\1\36\1\u013b\4\36\1\u013c"+
-    "\1\36\1\u013d\11\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\u013d\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\10\36\1\u013e\11\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\u013e\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\21\36\1\u013f\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\2\36\1\u0140\5\36"+
-    "\12\0\12\36\1\u0141\7\36\3\0\1\36\2\0\3\36"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\u015f\6\36"+
+    "\1\u0160\12\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\30\0\1\u0161\56\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\11\36\1\u0162\10\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\42\0\1\u0163\72\0\1\u0164\6\0\1\u0165"+
+    "\101\0\1\u0166\105\0\1\u0167\107\0\1\u0168\75\0\1\u0169"+
+    "\57\0\1\u016a\123\0\1\u016b\56\0\1\u016c\101\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u016d\1\u016e"+
+    "\1\u016f\1\36\1\u0170\1\u0171\4\36\1\u0172\1\u0173\1\u0174"+
+    "\4\36\3\0\1\36\2\0\3\36\17\0\1\36\30\0"+
+    "\1\u0175\127\0\1\u0176\57\0\1\u0177\34\0\1\u0178\57\0"+
+    "\1\u0179\41\0\1\u0179\30\0\1\u017a\73\0\3\u017b\43\0"+
+    "\1\u017c\12\0\1\u017d\22\0\1\u017e\1\0\1\u017f\101\0"+
+    "\1\u0180\1\0\1\u0181\63\0\104\255\3\116\1\0\2\116"+
+    "\3\0\2\116\1\0\1\116\1\371\3\116\1\376\1\377"+
+    "\1\116\1\0\2\116\22\0\3\116\1\0\2\116\3\0"+
+    "\17\116\1\0\17\116\1\371\3\116\1\0\1\377\1\116"+
+    "\1\u0102\57\116\1\0\1\374\1\0\1\374\1\0\10\374"+
+    "\12\0\22\374\1\u0182\2\0\1\374\2\0\3\374\12\0"+
+    "\1\u0183\4\0\1\374\2\0\1\116\1\375\1\116\1\375"+
+    "\1\116\10\375\1\371\3\116\1\372\1\0\1\116\1\373"+
+    "\2\116\22\375\1\u0184\2\116\1\375\2\116\3\375\12\116"+
+    "\1\u0185\4\116\1\375\2\116\3\123\1\0\2\123\3\0"+
+    "\2\123\1\0\1\123\1\u0103\3\123\1\u0107\1\123\1\u0108"+
+    "\1\0\2\123\22\0\3\123\1\0\2\123\3\0\17\123"+
+    "\1\0\17\123\1\u0103\3\123\1\0\1\123\1\u0108\1\u0109"+
+    "\60\123\1\u0106\1\123\1\u0106\1\123\10\u0106\1\u0103\3\123"+
+    "\1\u0104\1\123\1\0\1\u0105\2\123\22\u0106\1\u0186\2\123"+
+    "\1\u0106\2\123\3\u0106\12\123\1\u0187\4\123\1\u0106\2\123"+
+    "\16\130\1\0\1\130\1\0\66\130\1\u0188\2\130\3\u0188"+
+    "\2\130\1\u0188\1\130\1\u010a\1\0\1\130\1\0\1\u0189"+
+    "\2\130\1\u018a\2\130\22\u0188\3\130\1\u0188\2\130\3\u0188"+
+    "\17\130\1\u0188\17\130\1\u010a\1\0\1\130\1\0\1\u018a"+
+    "\2\130\1\u018b\57\130\16\u010d\1\u018c\1\u010d\1\u018c\63\u010d"+
+    "\3\0\1\u010d\2\0\3\u010d\1\0\2\u010d\3\0\1\u010e"+
+    "\7\0\22\u010d\3\0\1\u010d\2\0\3\u010d\17\0\1\u010d"+
+    "\2\0\16\u0116\1\u018d\1\u0116\1\u018d\63\u0116\3\143\1\u0114"+
+    "\2\143\3\u0114\2\143\1\u0114\2\143\1\u0117\1\143\1\u0117"+
+    "\6\143\22\u0114\3\143\1\u0114\2\143\3\u0114\17\143\1\u0114"+
+    "\5\143\1\u0116\2\143\3\u0116\1\143\2\u0116\2\143\1\0"+
+    "\1\u0118\1\0\6\143\22\u0116\3\143\1\u0116\2\143\3\u0116"+
+    "\17\143\1\u0116\2\143\1\0\1\u011f\3\0\1\u011f\3\0"+
+    "\1\u011f\73\0\1\u018e\1\0\1\u018e\1\0\1\u018e\1\0"+
+    "\3\u018e\17\0\2\u018e\2\0\1\u018e\53\0\1\u018f\3\0"+
+    "\1\u018f\72\0\64\u0123\1\u0124\1\u0190\16\u0123\44\0\1\u0191"+
+    "\77\0\1\u0192\44\0\1\u012a\3\0\1\u012a\3\0\1\u012a"+
+    "\73\0\1\36\1\0\1\36\1\0\10\36\12\0\1\36"+
+    "\1\u0147\20\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\u0193\1\0\10\36\12\0\22\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\1\u0194\1\36\1\u0195"+
+    "\1\u0196\4\36\1\u0197\5\36\1\u0198\3\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\u0197\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\7\36\1\u0199\12\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u019a"+
+    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\11\36\1\u0142\10\36\3\0\1\36\2\0\3\36"+
+    "\12\0\1\36\1\u019b\20\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\3\36\1\u0143\2\36\1\u0144\13\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u0145"+
-    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\12\0\13\36\1\u019c\6\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\5\36\1\u0146\14\36\3\0\1\36\2\0\3\36"+
+    "\12\0\1\36\1\u019d\20\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+
+    "\1\u019e\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+
+    "\1\u019f\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\65\0\1\u0178\21\0\1\36\1\0\1\u01a0"+
+    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\5\36\1\u0147\14\36\3\0\1\36\2\0\3\36"+
+    "\12\0\13\36\1\u01a1\6\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\11\36\1\u0148\10\36\3\0\1\36\2\0\3\36"+
+    "\12\0\1\36\1\u01a2\20\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\u01a3\1\0\10\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+
+    "\1\u01a4\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01a5"+
+    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u01a6"+
+    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\u01a7\5\36\12\0"+
+    "\1\u01a8\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+
+    "\1\u01a9\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\2\36\1\u01aa\5\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+
+    "\1\u01ab\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\u01ac\1\0\10\36\12\0\22\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\u01ad\1\0\10\36\12\0\22\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u01ae"+
+    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
     "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\10\36\1\u0149\11\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\u0149\3\0\1\36\1\0\1\u014a\1\0\10\36"+
+    "\12\0\6\36\1\u01af\13\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\u01b0\1\0\10\36"+
     "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\16\36"+
-    "\1\u014b\3\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\14\36"+
-    "\1\u014c\5\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+
+    "\1\u01b1\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+
     "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\36"+
-    "\1\u014d\6\36\1\u014e\2\36\1\u014f\6\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\u014e\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\5\36\1\u0150\14\36\3\0\1\36"+
+    "\1\u01b2\6\36\1\u01b3\11\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\u01b3\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\10\36\1\u01b4\11\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\u01b4\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\5\36\1\u01b5\14\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\1\36\1\u01b6\20\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\1\36\1\u01b7\20\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\4\36\1\u01b8\15\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\4\36\1\u01b9\15\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\13\36\1\u01ba\6\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\1\36\1\u01bb\20\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\13\36\1\u01bc\6\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\7\36\1\u01bd\12\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\3\36"+
+    "\1\u01be\4\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\13\36\1\u01bf\6\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\5\36\1\u01c0\14\36\3\0\1\u01c1\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\1\36\1\u01c2\20\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\42\0\1\u01c3\77\0\1\u01c4\105\0\1\u01c5"+
+    "\75\0\1\u01c6\106\0\1\u01c7\106\0\1\u01c8\104\0\1\u01c9"+
+    "\41\0\1\u01c9\61\0\1\u01ca\64\0\1\u01cb\52\0\1\u01cc"+
+    "\75\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+
+    "\1\u01cd\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01ce"+
+    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\u01cf\3\36"+
+    "\1\u01d0\15\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\2\36\1\u01d1\5\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\13\36"+
+    "\1\u01d2\6\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01d3"+
+    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\u01d4\1\0\10\36\12\0\22\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\2\36\1\u01d5\5\36\12\0\22\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\5\0\1\u01d6\2\0"+
+    "\3\u01d6\1\0\2\u01d6\3\0\1\u0178\2\0\1\u01d7\4\0"+
+    "\22\u01d6\3\0\1\u01d6\2\0\3\u01d6\17\0\1\u01d6\1\u01d8"+
+    "\36\0\1\u01d9\64\0\3\u017b\56\0\1\u017d\22\0\3\u01da"+
+    "\44\0\1\u01db\11\0\1\u01dc\60\0\1\u01dd\45\0\1\u017e"+
+    "\103\0\1\u0180\137\0\1\u01de\31\0\15\116\1\371\3\116"+
+    "\1\372\1\0\1\116\1\373\25\116\1\u01df\31\116\15\123"+
+    "\1\u0103\3\123\1\u0104\1\123\1\0\1\u0105\25\123\1\u01e0"+
+    "\31\123\1\0\1\u0188\1\0\1\u0188\1\0\10\u0188\12\0"+
+    "\22\u0188\3\0\1\u0188\2\0\3\u0188\12\0\1\u01e1\4\0"+
+    "\1\u0188\2\0\3\130\1\0\2\130\3\0\2\130\1\0"+
+    "\1\130\1\u010a\1\0\1\130\1\0\1\u0189\2\130\1\0"+
+    "\2\130\22\0\3\130\1\0\2\130\3\0\17\130\1\0"+
+    "\17\130\1\u010a\1\0\1\130\2\0\2\130\1\u018b\57\130"+
+    "\50\0\1\u01e2\62\0\1\u01e3\55\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\5\36\1\u01e4\14\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\2\36\1\u0151\5\36\12\0\7\36\1\u0152\12\36"+
+    "\1\0\10\36\12\0\3\36\1\u01e5\16\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u01e6"+
+    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\7\36\1\u01e7\12\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\16\36\1\u01e8\3\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\15\36\1\u01e9\4\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\1\u01ea\21\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\12\36\1\u01eb\7\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\11\36\1\u01ec\10\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\12\36\1\u01ed\7\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\17\36\1\u01ee\2\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\11\36\1\u01ef\10\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\4\36\1\u01f0\15\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\u01f1\1\0\2\36\1\u01f2"+
+    "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\1\36\1\u01f3\20\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\u01f4\1\0\10\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u01f5"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\16\36\1\u01f6"+
+    "\3\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\4\36\1\u01f7"+
+    "\15\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\5\36\1\u01f8"+
+    "\14\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\u01f9\5\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\13\36\1\u01fa"+
+    "\6\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u01fb"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\u01fc\5\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u01fd"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\10\36\1\u01fe"+
+    "\11\36\3\0\1\36\2\0\3\36\17\0\1\u01fe\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\15\36\1\u01ff"+
+    "\4\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\u0200\5\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\u0201\21\36"+
     "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u0153\5\36\12\0\22\36"+
+    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0202\20\36"+
     "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\u0154\21\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\1\36\1\u0155\20\36\3\0"+
-    "\1\36\2\0\2\36\1\u0156\17\0\1\36\3\0\1\36"+
-    "\1\0\1\u0157\1\0\10\36\12\0\22\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\10\36\1\u0203\11\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\u0203\3\0\1\36"+
+    "\1\0\1\u0204\1\0\10\36\12\0\22\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\10\36\1\u0158\11\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\u0158\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\1\u0159\21\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u015a\20\36\3\0\1\36\2\0"+
+    "\1\0\10\36\12\0\1\u0205\21\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\7\36\1\u015b\12\36\3\0\1\36\2\0"+
+    "\10\36\12\0\6\36\1\u0206\13\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\3\36\1\u015c\4\36\12\0\22\36\3\0\1\36\2\0"+
+    "\10\36\12\0\11\36\1\u0207\10\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\u015d\6\36\1\u015e\12\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\30\0\1\u015f\56\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\11\36\1\u0160\10\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\42\0\1\u0161"+
-    "\72\0\1\u0162\6\0\1\u0163\101\0\1\u0164\105\0\1\u0165"+
-    "\107\0\1\u0166\75\0\1\u0167\57\0\1\u0168\123\0\1\u0169"+
-    "\56\0\1\u016a\101\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\36\1\u016b\1\u016c\1\u016d\1\36\1\u016e\1\u016f"+
-    "\4\36\1\u0170\1\u0171\1\u0172\4\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\30\0\1\u0173\127\0\1\u0174\57\0"+
-    "\1\u0175\34\0\1\u0176\57\0\1\u0177\41\0\1\u0177\30\0"+
-    "\1\u0178\73\0\3\u0179\43\0\1\u017a\12\0\1\u017b\22\0"+
-    "\1\u017c\1\0\1\u017d\101\0\1\u017e\1\0\1\u017f\63\0"+
-    "\104\250\3\116\1\0\2\116\3\0\2\116\1\0\1\116"+
-    "\1\364\3\116\1\371\1\372\1\116\1\0\2\116\22\0"+
-    "\3\116\1\0\2\116\3\0\17\116\1\0\17\116\1\364"+
-    "\3\116\1\0\1\372\1\116\1\375\57\116\1\0\1\367"+
-    "\1\0\1\367\1\0\10\367\12\0\22\367\1\u0180\2\0"+
-    "\1\367\2\0\3\367\12\0\1\u0181\4\0\1\367\2\0"+
-    "\1\116\1\370\1\116\1\370\1\116\10\370\1\364\3\116"+
-    "\1\365\1\0\1\116\1\366\2\116\22\370\1\u0182\2\116"+
-    "\1\370\2\116\3\370\12\116\1\u0183\4\116\1\370\2\116"+
-    "\3\123\1\0\2\123\3\0\2\123\1\0\1\123\1\376"+
-    "\3\123\1\u0102\1\123\1\u0103\1\0\2\123\22\0\3\123"+
-    "\1\0\2\123\3\0\17\123\1\0\17\123\1\376\3\123"+
-    "\1\0\1\123\1\u0103\1\u0104\60\123\1\u0101\1\123\1\u0101"+
-    "\1\123\10\u0101\1\376\3\123\1\377\1\123\1\0\1\u0100"+
-    "\2\123\22\u0101\1\u0184\2\123\1\u0101\2\123\3\u0101\12\123"+
-    "\1\u0185\4\123\1\u0101\2\123\16\130\1\0\1\130\1\0"+
-    "\66\130\1\u0186\2\130\3\u0186\2\130\1\u0186\1\130\1\u0105"+
-    "\1\0\1\130\1\0\1\u0187\2\130\1\u0188\2\130\22\u0186"+
-    "\3\130\1\u0186\2\130\3\u0186\17\130\1\u0186\17\130\1\u0105"+
-    "\1\0\1\130\1\0\1\u0188\2\130\1\u0189\60\130\1\u0108"+
-    "\1\130\1\u0108\1\130\10\u0108\1\u0105\1\u018a\1\130\1\u018a"+
-    "\1\u0106\2\130\1\u0107\1\u018b\1\130\22\u0108\3\130\1\u0108"+
-    "\2\130\3\u0108\17\130\1\u0108\2\130\3\0\1\u018c\2\0"+
-    "\3\u018c\1\0\2\u018c\13\0\22\u018c\3\0\1\u018c\2\0"+
-    "\3\u018c\17\0\1\u018c\20\0\1\u010b\1\0\1\u010b\101\0"+
-    "\1\u010e\1\0\1\u010e\63\0\16\u0110\1\0\1\u0110\1\0"+
-    "\64\u0110\1\u0114\1\u0110\1\u0114\1\u0110\5\u0114\1\u0115\1\u0114"+
-    "\1\u0115\1\u0110\1\u018d\1\u0110\1\u018d\4\u0110\1\u018e\1\u0110"+
-    "\22\u0114\3\u0110\1\u0114\2\u0110\3\u0114\17\u0110\1\u0114\3\u0110"+
-    "\1\u0115\1\u0110\1\u0115\1\u0110\10\u0115\1\u0110\1\u018f\1\u0110"+
-    "\1\u018f\4\u0110\1\u0190\1\u0110\22\u0115\3\u0110\1\u0115\2\u0110"+
-    "\3\u0115\17\u0110\1\u0115\2\u0110\16\0\1\u0117\1\0\1\u0117"+
-    "\101\0\1\u011a\1\0\1\u011a\64\0\1\u011d\3\0\1\u011d"+
-    "\3\0\1\u011d\73\0\1\u0191\1\0\1\u0191\1\0\1\u0191"+
-    "\1\0\3\u0191\17\0\2\u0191\2\0\1\u0191\53\0\1\u0192"+
-    "\3\0\1\u0192\72\0\64\u0121\1\u0122\1\u0193\16\u0121\44\0"+
-    "\1\u0194\77\0\1\u0195\44\0\1\u0128\3\0\1\u0128\3\0"+
-    "\1\u0128\73\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\36\1\u0145\20\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\u0196\1\0\10\36\12\0"+
+    "\10\36\12\0\1\u0208\21\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\2\36\1\u0209\17\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\u020a\1\0\10\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\2\36\1\u020b\5\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u020c"+
+    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u020d"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\u020e\5\36\12\0"+
     "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\1\u0197\1\36"+
-    "\1\u0198\1\u0199\4\36\1\u019a\5\36\1\u019b\3\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\u019a\3\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\7\36\1\u019c\12\36\3\0"+
+    "\1\36\1\0\1\u020f\1\0\10\36\12\0\22\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\11\0\1\u0210\103\0"+
+    "\1\u0211\136\0\1\u0212\44\0\1\u0213\13\0\1\u0214\36\0"+
+    "\1\u0215\35\0\1\u0216\102\0\1\u0217\77\0\1\u0218\103\0"+
+    "\1\u0219\127\0\1\u021a\116\0\1\u021b\42\0\1\36\1\0"+
+    "\1\36\1\0\2\36\1\u021c\5\36\12\0\22\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\11\36\1\u021d\10\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\13\36\1\u021e\6\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\5\36\1\u021f\14\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\14\36\1\u0220\5\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\2\36\1\u0221\5\36\12\0\22\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\5\36\1\u0222\14\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\1\36\1\u0223\20\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\13\36\1\u0224\6\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\u01d6\1\0"+
+    "\1\u01d6\1\0\10\u01d6\1\0\1\u0225\1\0\1\u0226\6\0"+
+    "\22\u01d6\3\0\1\u01d6\2\0\3\u01d6\17\0\1\u01d6\5\0"+
+    "\1\u0227\2\0\3\u0227\1\0\2\u0227\13\0\22\u0227\3\0"+
+    "\1\u0227\2\0\3\u0227\17\0\1\u0227\5\0\1\u0228\2\0"+
+    "\3\u0228\1\0\2\u0228\13\0\22\u0228\3\0\1\u0228\2\0"+
+    "\3\u0228\17\0\1\u0228\42\0\1\u0229\61\0\3\u01da\56\0"+
+    "\1\u01dc\60\0\1\u022a\36\0\1\u022b\77\0\1\u022c\2\0"+
+    "\3\u022c\2\0\1\u022c\13\0\22\u022c\3\0\1\u022c\2\0"+
+    "\3\u022c\17\0\1\u022c\2\0\3\116\1\u022d\2\116\3\u022d"+
+    "\2\116\1\u022d\1\116\1\371\3\116\1\372\1\0\1\116"+
+    "\1\373\2\116\22\u022d\3\116\1\u022d\2\116\3\u022d\17\116"+
+    "\1\u022d\2\116\3\123\1\u022e\2\123\3\u022e\2\123\1\u022e"+
+    "\1\123\1\u0103\3\123\1\u0104\1\123\1\0\1\u0105\2\123"+
+    "\22\u022e\3\123\1\u022e\2\123\3\u022e\17\123\1\u022e\2\123"+
+    "\16\0\2\u022f\1\u0230\133\0\1\u0231\34\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\2\36\1\u0232\17\36\3\0"+
     "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\u019d\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
+    "\1\36\1\0\10\36\12\0\6\36\1\u0233\13\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\11\36\1\u0234\10\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\1\u0235\21\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\1\u0236\21\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u019e\20\36\3\0\1\36\2\0"+
+    "\10\36\12\0\3\36\1\u0237\16\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\13\36\1\u019f\6\36\3\0\1\36\2\0"+
+    "\2\36\1\u0238\5\36\12\0\22\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u01a0\20\36\3\0\1\36\2\0"+
+    "\10\36\12\0\3\36\1\u0239\16\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\2\36\1\u01a1\5\36\12\0\22\36\3\0\1\36\2\0"+
+    "\10\36\12\0\2\36\1\u023a\17\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\2\36\1\u01a2\5\36\12\0\22\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\65\0\1\u0176\21\0\1\36\1\0"+
-    "\1\u01a3\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
+    "\2\36\1\u023b\5\36\12\0\22\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\13\36\1\u01a4\6\36\3\0\1\36\2\0"+
+    "\10\36\12\0\5\36\1\u023c\14\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u01a5\20\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u01a6\1\0"+
+    "\10\36\12\0\14\36\1\u023d\5\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\13\36\1\u023e\6\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u023f\1\0"+
     "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\13\36\1\u01a7\6\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\u01a8\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\7\36"+
-    "\1\u01a9\12\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\2\36\1\u01aa\5\36"+
-    "\12\0\1\u01ab\21\36\3\0\1\36\2\0\3\36\17\0"+
+    "\11\36\1\u0240\10\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\13\36\1\u01ac\6\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u01ad"+
-    "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\13\36\1\u0241\6\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\6\36\1\u01ae\13\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\u01af\1\0\10\36\12\0"+
+    "\1\u0242\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+
+    "\1\u0243\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\21\36"+
+    "\1\u0244\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\3\36\1\u0245\4\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\5\36\1\u0246"+
+    "\14\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u0247"+
+    "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\15\36\1\u0248"+
+    "\4\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\5\36\1\u0249"+
+    "\14\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u024a"+
+    "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\1\0\3\u024b\6\0"+
     "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\u01b0\1\0\10\36\12\0\22\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\13\36\1\u024c"+
+    "\6\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u024d"+
+    "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u024e"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u024f"+
+    "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\43\0"+
+    "\1\u0250\102\0\1\u0251\46\0\1\u0252\13\0\1\u0253\36\0"+
+    "\1\u0254\74\0\1\u0255\53\0\1\u0214\36\0\1\u0215\67\0"+
+    "\1\u0256\71\0\1\u021b\103\0\1\u0257\110\0\1\u0258\102\0"+
+    "\1\u0259\66\0\1\u021b\36\0\1\u025a\26\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\1\u025b\21\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+
+    "\1\u025c\1\36\17\0\1\36\3\0\1\36\1\0\1\u025d"+
+    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\6\36\1\u025e\13\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\u025f\1\0\10\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\10\36"+
+    "\1\u0260\11\36\3\0\1\36\2\0\3\36\17\0\1\u0260"+
+    "\3\0\1\36\1\0\1\u0261\1\0\10\36\12\0\22\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\15\36\1\u0262\4\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0263\20\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\20\0\1\u0225"+
+    "\66\0\1\u0227\1\0\1\u0227\1\0\10\u0227\5\0\1\u0264"+
+    "\4\0\22\u0227\3\0\1\u0227\2\0\3\u0227\17\0\1\u0227"+
+    "\3\0\1\u0228\1\0\1\u0228\1\0\10\u0228\12\0\22\u0228"+
+    "\3\0\1\u0228\2\0\3\u0228\17\0\1\u0228\1\u0265\30\0"+
+    "\1\u0266\63\0\1\u0267\134\0\1\u0268\61\0\1\u022f\115\0"+
+    "\1\u0269\54\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\10\36\1\u026a\11\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\u026a\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\13\36\1\u026b\6\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\u026c\1\0\10\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u026d"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\13\36\1\u026e"+
+    "\6\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u026f"+
+    "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\2\36\1\u0270\5\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\u0271\1\0\10\36\12\0\22\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\2\36\1\u0272\17\36\3\0"+
     "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\u01b1\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
+    "\1\36\1\0\10\36\12\0\6\36\1\u0273\13\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\u0274\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
     "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\6\36\1\u01b2\13\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u01b3\1\0"+
+    "\10\36\12\0\1\36\1\u0275\20\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u0276\1\0"+
     "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\13\36\1\u01b4\6\36\3\0\1\36\2\0\3\36\17\0"+
+    "\12\36\1\u0277\7\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\36\1\u01b5\6\36\1\u01b6\11\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\u01b6\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\10\36\1\u01b7\11\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\u01b7\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\5\36\1\u01b8\14\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u01b9\20\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u01ba\20\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\4\36\1\u01bb\15\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\4\36\1\u01bc\15\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\13\36\1\u01bd\6\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u01be\20\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\13\36\1\u01bf\6\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\7\36\1\u01c0\12\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\3\36\1\u01c1\4\36\12\0\22\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\13\36\1\u01c2\6\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\5\36\1\u01c3\14\36\3\0\1\u01c4\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\36\1\u01c5\20\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\42\0\1\u01c6\77\0\1\u01c7\105\0"+
-    "\1\u01c8\75\0\1\u01c9\106\0\1\u01ca\106\0\1\u01cb\104\0"+
-    "\1\u01cc\41\0\1\u01cc\61\0\1\u01cd\64\0\1\u01ce\52\0"+
-    "\1\u01cf\75\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\11\36\1\u01d0\10\36\3\0\1\36\2\0\3\36\17\0"+
+    "\7\36\1\u0278\12\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\u01d1\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u01d2"+
-    "\3\36\1\u01d3\15\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u01d4"+
+    "\15\36\1\u0279\4\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u027a"+
     "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\13\36\1\u01d5\6\36\3\0\1\36\2\0\3\36\17\0"+
+    "\13\36\1\u027b\6\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\u01d6\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\u01d7\1\0\10\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u01d8\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\5\0\1\u01d9"+
-    "\2\0\3\u01d9\1\0\2\u01d9\3\0\1\u0176\2\0\1\u01da"+
-    "\4\0\22\u01d9\3\0\1\u01d9\2\0\3\u01d9\17\0\1\u01d9"+
-    "\1\u01db\36\0\1\u01dc\64\0\3\u0179\56\0\1\u017b\22\0"+
-    "\3\u01dd\44\0\1\u01de\11\0\1\u01df\60\0\1\u01e0\45\0"+
-    "\1\u017c\103\0\1\u017e\137\0\1\u01e1\31\0\15\116\1\364"+
-    "\3\116\1\365\1\0\1\116\1\366\25\116\1\u01e2\31\116"+
-    "\15\123\1\376\3\123\1\377\1\123\1\0\1\u0100\25\123"+
-    "\1\u01e3\31\123\1\0\1\u0186\1\0\1\u0186\1\0\10\u0186"+
-    "\12\0\22\u0186\3\0\1\u0186\2\0\3\u0186\12\0\1\u01e4"+
-    "\4\0\1\u0186\2\0\3\130\1\0\2\130\3\0\2\130"+
-    "\1\0\1\130\1\u0105\1\0\1\130\1\0\1\u0187\2\130"+
-    "\1\0\2\130\22\0\3\130\1\0\2\130\3\0\17\130"+
-    "\1\0\17\130\1\u0105\1\0\1\130\2\0\2\130\1\u0189"+
-    "\74\130\1\u0105\1\u018a\1\130\1\u018a\1\u0106\2\130\1\u0107"+
-    "\57\130\1\0\1\u018c\1\0\1\u018c\1\0\10\u018c\1\0"+
-    "\1\u018a\1\0\1\u018a\4\0\1\u01e5\1\0\22\u018c\3\0"+
-    "\1\u018c\2\0\3\u018c\17\0\1\u018c\2\0\16\u0110\1\u018d"+
-    "\1\u0110\1\u018d\101\u0110\1\u018f\1\u0110\1\u018f\63\u0110\50\0"+
-    "\1\u01e6\62\0\1\u01e7\55\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\5\36\1\u01e8\14\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\3\36\1\u01e9\16\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u01ea\1\0"+
+    "\4\36\1\u027c\15\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\u027d\1\0\10\36\12\0"+
+    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\20\0"+
+    "\3\u024b\11\0\1\u027e\52\0\1\36\1\0\1\u027f\1\0"+
     "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\7\36\1\u01eb\12\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\1\u0280\20\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\21\0\1\u0250\36\0\1\u0281\66\0\1\u0282\51\0"+
+    "\1\u0283\113\0\1\u0253\36\0\1\u0254\30\0\1\u0284\103\0"+
+    "\1\u021b\117\0\1\u0257\36\0\1\u0285\55\0\1\u0286\122\0"+
+    "\1\u0282\35\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\1\36\1\u0287\20\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\16\36\1\u01ec\3\36\3\0\1\36\2\0\3\36\17\0"+
+    "\22\36\3\0\1\36\2\0\1\36\1\u0288\1\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\15\36\1\u01ed\4\36\3\0\1\36\2\0\3\36\17\0"+
+    "\22\36\3\0\1\36\2\0\1\36\1\u0289\1\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\u01ee\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\12\36"+
-    "\1\u01ef\7\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+
-    "\1\u01f0\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\12\36"+
-    "\1\u01f1\7\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\17\36"+
-    "\1\u01f2\2\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+
-    "\1\u01f3\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\4\36"+
-    "\1\u01f4\15\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\u01f5\1\0\2\36\1\u01f6\5\36"+
-    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\36"+
-    "\1\u01f7\20\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\u01f8\1\0\10\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u01f9\20\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\16\36\1\u01fa\3\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\4\36\1\u01fb\15\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\5\36\1\u01fc\14\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u01fd\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\13\36\1\u01fe\6\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u01ff\20\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u0200\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0201\20\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\10\36\1\u0202\11\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\u0202\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\15\36\1\u0203\4\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u0204\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\u0205\21\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\1\36\1\u0206\20\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\10\36\1\u0207\11\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\u0207\3\0\1\36\1\0"+
-    "\1\u0208\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\1\u0209\21\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\6\36\1\u020a\13\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\11\36\1\u020b\10\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\u020c\21\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\1\u028a\20\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\2\36\1\u020d\17\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\u020e\1\0\10\36\12\0"+
-    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\2\36\1\u020f\5\36\12\0"+
+    "\10\36\1\u028b\11\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\u028b\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\10\36\1\u028c\11\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\u028c\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\22\36\3\0\1\36\2\0\1\36\1\u028d\1\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\7\36\1\u028e\12\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\22\36\3\0\1\36\2\0\1\36\1\u028f\1\36\17\0"+
+    "\1\36\20\0\1\u0225\1\0\1\u0226\101\0\1\u0290\1\0"+
+    "\1\u0291\133\0\1\u0292\73\0\1\u0293\61\0\3\u0294\101\0"+
+    "\3\u0295\64\0\1\36\1\0\1\36\1\0\2\36\1\u0296"+
+    "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\2\36\1\u0297"+
+    "\5\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\6\36\1\u0298\13\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\3\0\1\36\1\0\1\u0299\1\0\10\36\12\0"+
     "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\1\u0210\21\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0211\20\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u0212\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\u0213\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\11\0\1\u0214\103\0\1\u0215"+
-    "\136\0\1\u0216\44\0\1\u0217\13\0\1\u0218\36\0\1\u0219"+
-    "\35\0\1\u021a\102\0\1\u021b\77\0\1\u021c\103\0\1\u021d"+
-    "\127\0\1\u021e\116\0\1\u021f\42\0\1\36\1\0\1\36"+
-    "\1\0\2\36\1\u0220\5\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\11\36\1\u0221\10\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\13\36\1\u0222\6\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\5\36\1\u0223\14\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\14\36\1\u0224\5\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\2\36\1\u0225\5\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\5\36\1\u0226\14\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\1\36\1\u0227\20\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\13\36\1\u0228\6\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\u01d9\1\0\1\u01d9"+
-    "\1\0\10\u01d9\1\0\1\u0229\1\0\1\u022a\6\0\22\u01d9"+
-    "\3\0\1\u01d9\2\0\3\u01d9\17\0\1\u01d9\5\0\1\u022b"+
-    "\2\0\3\u022b\1\0\2\u022b\13\0\22\u022b\3\0\1\u022b"+
-    "\2\0\3\u022b\17\0\1\u022b\5\0\1\u022c\2\0\3\u022c"+
-    "\1\0\2\u022c\13\0\22\u022c\3\0\1\u022c\2\0\3\u022c"+
-    "\17\0\1\u022c\42\0\1\u022d\61\0\3\u01dd\56\0\1\u01df"+
-    "\60\0\1\u022e\36\0\1\u022f\77\0\1\u0230\2\0\3\u0230"+
-    "\2\0\1\u0230\13\0\22\u0230\3\0\1\u0230\2\0\3\u0230"+
-    "\17\0\1\u0230\2\0\3\116\1\u0231\2\116\3\u0231\2\116"+
-    "\1\u0231\1\116\1\364\3\116\1\365\1\0\1\116\1\366"+
-    "\2\116\22\u0231\3\116\1\u0231\2\116\3\u0231\17\116\1\u0231"+
-    "\2\116\3\123\1\u0232\2\123\3\u0232\2\123\1\u0232\1\123"+
-    "\1\376\3\123\1\377\1\123\1\0\1\u0100\2\123\22\u0232"+
-    "\3\123\1\u0232\2\123\3\u0232\17\123\1\u0232\2\123\16\0"+
-    "\1\u018a\1\0\1\u018a\101\0\2\u0233\1\u0234\133\0\1\u0235"+
-    "\34\0\1\36\1\0\1\36\1\0\10\36\12\0\2\36"+
-    "\1\u0236\17\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+
-    "\1\u0237\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\11\36"+
-    "\1\u0238\10\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u0239"+
-    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\1\u023a\21\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\3\36\1\u023b\16\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u023c\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\3\36\1\u023d\16\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\2\36\1\u023e\17\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\2\36\1\u023f\5\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\5\36\1\u0240\14\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\14\36\1\u0241\5\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\13\36\1\u0242\6\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\u0243\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\11\36\1\u0244\10\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\13\36\1\u0245\6\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\1\u0246\21\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\6\36\1\u0247\13\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\21\36\1\u0248\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\3\36"+
-    "\1\u0249\4\36\12\0\22\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\5\36\1\u024a\14\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\6\36\1\u024b\13\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\15\36\1\u024c\4\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\5\36\1\u024d\14\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\11\36\1\u024e\10\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\1\0\3\u024f\6\0\22\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\13\36\1\u0250\6\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\6\36\1\u0251\13\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\36\1\u0252\20\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\6\36\1\u0253\13\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\43\0\1\u0254\102\0\1\u0255\46\0\1\u0256"+
-    "\13\0\1\u0257\36\0\1\u0258\74\0\1\u0259\53\0\1\u0218"+
-    "\36\0\1\u0219\67\0\1\u025a\71\0\1\u021f\103\0\1\u025b"+
-    "\110\0\1\u025c\102\0\1\u025d\66\0\1\u021f\36\0\1\u025e"+
-    "\26\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u025f"+
-    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u029a"+
+    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\6\36\1\u029b"+
+    "\13\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
     "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+
-    "\1\36\2\0\1\36\1\u0260\1\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\u0261\1\0\10\36\12\0\22\36\3\0"+
+    "\1\36\2\0\1\36\1\u029c\1\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u029d"+
+    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
+    "\1\36\1\0\1\u029e\1\0\10\36\12\0\22\36\3\0"+
     "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\6\36\1\u0262\13\36\3\0"+
+    "\1\36\1\0\10\36\12\0\5\36\1\u029f\14\36\3\0"+
     "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\u0263\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
-    "\10\36\12\0\10\36\1\u0264\11\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\u0264\3\0\1\36\1\0\1\u0265\1\0"+
+    "\1\36\1\0\10\36\12\0\5\36\1\u02a0\14\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\6\36\1\u02a1\13\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\u02a2\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u02a3\1\0"+
     "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\15\36\1\u0266\4\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\36\1\u0267\20\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\20\0\1\u0229\66\0\1\u022b\1\0\1\u022b\1\0"+
-    "\10\u022b\5\0\1\u0268\4\0\22\u022b\3\0\1\u022b\2\0"+
-    "\3\u022b\17\0\1\u022b\3\0\1\u022c\1\0\1\u022c\1\0"+
-    "\10\u022c\12\0\22\u022c\3\0\1\u022c\2\0\3\u022c\17\0"+
-    "\1\u022c\1\u0269\30\0\1\u026a\63\0\1\u026b\134\0\1\u026c"+
-    "\61\0\1\u0233\115\0\1\u026d\54\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\10\36\1\u026e\11\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\u026e\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\13\36\1\u026f\6\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u0270"+
-    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\36\1\u0271\20\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\13\36\1\u0272\6\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\6\36\1\u0273\13\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\2\36"+
-    "\1\u0274\5\36\12\0\22\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\u0275\1\0\10\36"+
-    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\2\36"+
-    "\1\u0276\17\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+
-    "\1\u0277\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\u0278\1\0\10\36\12\0\22\36"+
+    "\22\36\3\0\1\36\2\0\1\36\1\u02a4\1\36\17\0"+
+    "\1\36\42\0\1\u02a5\44\0\1\36\1\0\1\u02a6\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\21\0\1\u0282\36\0\1\u02a7\61\0\1\u0253\107\0"+
+    "\1\u0214\62\0\1\u0286\36\0\1\u02a8\26\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
+    "\1\36\1\u02a9\1\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
+    "\1\36\1\u02aa\1\36\17\0\1\36\3\0\1\36\1\0"+
+    "\1\36\1\0\10\36\12\0\1\u02ab\21\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\21\36\1\u02ac\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02ad"+
+    "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02ae"+
+    "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\2\36\1\u02af\17\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\6\36\1\u02b0\13\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\20\0\1\u0290\115\0\1\u02b1\71\0"+
+    "\3\u02b2\66\0\1\u02b3\2\0\3\u02b3\1\0\2\u02b3\2\0"+
+    "\3\u0294\1\u02b4\5\0\22\u02b3\3\0\1\u02b3\2\0\3\u02b3"+
+    "\17\0\1\u02b3\20\0\3\u0295\21\0\1\u02b5\42\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\11\36\1\u02b6\10\36"+
     "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\1\36\1\u0279\20\36"+
+    "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02b7\13\36"+
     "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\u027a\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\12\36\1\u027b\7\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\7\36\1\u027c\12\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\15\36\1\u02b8\4\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\u02b9\1\0\10\36\12\0\22\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\15\36\1\u027d\4\36\3\0\1\36"+
+    "\1\0\10\36\12\0\7\36\1\u02ba\12\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\2\36\1\u027e\5\36\12\0\22\36\3\0\1\36"+
+    "\1\0\10\36\12\0\3\36\1\u02bb\16\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\13\36\1\u027f\6\36\3\0\1\36"+
+    "\1\0\10\36\12\0\7\36\1\u02bc\12\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\4\36\1\u0280\15\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u0281"+
+    "\1\0\10\36\12\0\1\36\1\u02bd\20\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u02be"+
     "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\20\0\3\u024f\11\0\1\u0282\52\0\1\36"+
-    "\1\0\1\u0283\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\1\36\1\u0284\20\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\21\0\1\u0254\36\0\1\u0285"+
-    "\66\0\1\u0286\51\0\1\u0287\113\0\1\u0257\36\0\1\u0258"+
-    "\30\0\1\u0288\103\0\1\u021f\117\0\1\u025b\36\0\1\u0289"+
-    "\55\0\1\u028a\122\0\1\u0286\35\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\1\36\1\u028b\20\36\3\0\1\36"+
+    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\7\36\1\u02bf\12\36\3\0\1\36\2\0\3\36"+
+    "\17\0\1\36\40\0\1\u02c0\46\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\2\36\1\u02c1\17\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
     "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+
-    "\1\u028c\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+
-    "\1\u028d\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\1\36\1\u028e\20\36\3\0\1\36"+
+    "\1\u02c2\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\7\36\1\u02c3\12\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\10\36\1\u028f\11\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\u028f\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\10\36\1\u0290\11\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\u0290\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+
-    "\1\u0291\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\7\36\1\u0292\12\36\3\0\1\36"+
+    "\1\0\2\36\1\u02c4\5\36\12\0\22\36\3\0\1\36"+
     "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
     "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+
-    "\1\u0293\1\36\17\0\1\36\20\0\1\u0229\1\0\1\u022a"+
-    "\101\0\1\u0294\1\0\1\u0295\133\0\1\u0296\73\0\1\u0297"+
-    "\61\0\3\u0298\101\0\3\u0299\64\0\1\36\1\0\1\36"+
-    "\1\0\2\36\1\u029a\5\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\2\36\1\u029b\5\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\6\36\1\u029c\13\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\u029d"+
-    "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\1\36\1\u029e\20\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\6\36\1\u029f\13\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\22\36\3\0\1\36\2\0\1\36\1\u02a0\1\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\7\36\1\u02a1\12\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\3\0\1\36\1\0\1\u02a2\1\0\10\36"+
-    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\5\36"+
-    "\1\u02a3\14\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\5\36"+
-    "\1\u02a4\14\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\6\36"+
-    "\1\u02a5\13\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\u02a6\1\0\10\36\12\0\22\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\u02a7\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\u02c5\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+
     "\1\0\10\36\12\0\22\36\3\0\1\36\2\0\1\36"+
-    "\1\u02a8\1\36\17\0\1\36\42\0\1\u02a9\44\0\1\36"+
-    "\1\0\1\u02aa\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\21\0\1\u0286\36\0\1\u02ab"+
-    "\61\0\1\u0257\107\0\1\u0218\62\0\1\u028a\36\0\1\u02ac"+
-    "\26\0\1\36\1\0\1\36\1\0\10\36\12\0\22\36"+
-    "\3\0\1\36\2\0\1\36\1\u02ad\1\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\22\36"+
-    "\3\0\1\36\2\0\1\36\1\u02ae\1\36\17\0\1\36"+
-    "\3\0\1\36\1\0\1\36\1\0\10\36\12\0\1\u02af"+
-    "\21\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\21\36\1\u02b0"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\1\36\1\u02b1\1\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\1\36\1\u02b2\1\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\2\36\1\u02b3\17\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02b4\13\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\20\0\1\u0294"+
-    "\115\0\1\u02b5\71\0\3\u02b6\66\0\1\u02b7\2\0\3\u02b7"+
-    "\1\0\2\u02b7\2\0\3\u0298\1\u02b8\5\0\22\u02b7\3\0"+
-    "\1\u02b7\2\0\3\u02b7\17\0\1\u02b7\20\0\3\u0299\21\0"+
-    "\1\u02b9\42\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\11\36\1\u02ba\10\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\u02c6\1\36\17\0\1\36\3\0\1\36\1\0\1\36"+
+    "\1\0\10\36\12\0\7\36\1\u02c7\12\36\3\0\1\36"+
+    "\2\0\3\36\17\0\1\36\20\0\3\u02b1\31\0\1\366"+
+    "\34\0\1\u02c8\2\0\3\u02c8\1\0\2\u02c8\1\0\1\u02c9"+
+    "\3\u02b2\6\0\22\u02c8\3\0\1\u02c8\2\0\3\u02c8\17\0"+
+    "\1\u02c8\3\0\1\u02b3\1\0\1\u02b3\1\0\10\u02b3\1\0"+
+    "\3\u02ca\6\0\22\u02b3\3\0\1\u02b3\2\0\3\u02b3\12\0"+
+    "\1\u02cb\4\0\1\u02b3\5\0\1\u02b3\2\0\3\u02b3\1\0"+
+    "\2\u02b3\13\0\22\u02b3\3\0\1\u02b3\2\0\3\u02b3\17\0"+
+    "\1\u02b3\11\0\1\u02cc\75\0\1\36\1\0\1\u02cd\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\6\36\1\u02bb\13\36\3\0\1\36\2\0\3\36\17\0"+
+    "\15\36\1\u02ce\4\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\15\36\1\u02bc\4\36\3\0\1\36\2\0\3\36\17\0"+
-    "\1\36\3\0\1\36\1\0\1\u02bd\1\0\10\36\12\0"+
-    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02be"+
-    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\3\36\1\u02bf"+
-    "\16\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02c0"+
-    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\1\36\1\u02c1"+
-    "\20\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\u02c2\1\0\10\36\12\0\22\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\36\3\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\7\36\1\u02c3\12\36\3\0"+
-    "\1\36\2\0\3\36\17\0\1\36\40\0\1\u02c4\46\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\2\36\1\u02c5"+
-    "\17\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+
-    "\1\36\2\0\1\36\1\u02c6\1\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02c7"+
-    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\2\36\1\u02c8\5\36\12\0"+
-    "\22\36\3\0\1\36\2\0\3\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+
-    "\1\36\2\0\1\36\1\u02c9\1\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\22\36\3\0"+
-    "\1\36\2\0\1\36\1\u02ca\1\36\17\0\1\36\3\0"+
-    "\1\36\1\0\1\36\1\0\10\36\12\0\7\36\1\u02cb"+
-    "\12\36\3\0\1\36\2\0\3\36\17\0\1\36\20\0"+
-    "\3\u02b5\31\0\1\361\34\0\1\u02cc\2\0\3\u02cc\1\0"+
-    "\2\u02cc\1\0\1\u02cd\3\u02b6\6\0\22\u02cc\3\0\1\u02cc"+
-    "\2\0\3\u02cc\17\0\1\u02cc\3\0\1\u02b7\1\0\1\u02b7"+
-    "\1\0\10\u02b7\1\0\3\u02ce\6\0\22\u02b7\3\0\1\u02b7"+
-    "\2\0\3\u02b7\12\0\1\u02cf\4\0\1\u02b7\5\0\1\u02b7"+
-    "\2\0\3\u02b7\1\0\2\u02b7\13\0\22\u02b7\3\0\1\u02b7"+
-    "\2\0\3\u02b7\17\0\1\u02b7\11\0\1\u02d0\75\0\1\36"+
-    "\1\0\1\u02d1\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\15\36\1\u02d2\4\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\5\36\1\u02d3\14\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\3\36\1\u02d4\16\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\10\36\1\u02d5\11\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\u02d5\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\5\36\1\u02d6\14\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\45\0\1\u02d7\41\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\5\36\1\u02d8\14\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02d9\13\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\1\36\1\u02da\1\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\14\36\1\u02db\5\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\u02cc"+
-    "\1\0\1\u02cc\1\0\10\u02cc\1\u02cd\3\u02dc\6\0\22\u02cc"+
-    "\3\0\1\u02cc\2\0\3\u02cc\6\0\1\u02dd\3\0\1\u02de"+
-    "\4\0\1\u02cc\5\0\1\u02cc\2\0\3\u02cc\1\0\2\u02cc"+
-    "\13\0\22\u02cc\3\0\1\u02cc\2\0\3\u02cc\17\0\1\u02cc"+
-    "\5\0\1\u02df\2\0\3\u02df\1\0\2\u02df\1\0\1\u02e0"+
-    "\3\u02ce\6\0\22\u02df\3\0\1\u02df\2\0\3\u02df\17\0"+
-    "\1\u02df\5\0\1\u02e1\2\0\3\u02e1\1\0\2\u02e1\6\0"+
-    "\1\u02cf\4\0\22\u02e1\3\0\1\u02e1\2\0\3\u02e1\13\0"+
-    "\1\u02e2\3\0\1\u02e1\1\u02cf\35\0\1\u02e3\50\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02e4\13\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\6\36\1\u02e5\13\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\1\36\1\u02e6\1\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\u02e7\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\3\0\1\36\1\0\1\36"+
-    "\1\0\10\36\12\0\21\36\1\u02e8\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\20\0\3\u02dc\1\u02e9\65\0\1\u02cc"+
-    "\2\0\3\u02cc\1\0\2\u02cc\1\0\1\u02cd\11\0\22\u02cc"+
-    "\3\0\1\u02cc\2\0\3\u02cc\17\0\1\u02cc\77\0\1\u02ea"+
-    "\7\0\1\u02df\1\0\1\u02df\1\0\10\u02df\1\u02e0\3\u02eb"+
-    "\6\0\22\u02df\3\0\1\u02df\2\0\3\u02df\2\0\1\u02ec"+
-    "\3\0\1\u02ed\3\0\1\u02ee\4\0\1\u02df\5\0\1\u02df"+
-    "\2\0\3\u02df\1\0\2\u02df\13\0\22\u02df\3\0\1\u02df"+
-    "\2\0\3\u02df\17\0\1\u02df\3\0\1\u02e1\1\0\1\u02e1"+
-    "\1\0\10\u02e1\5\0\1\u02cf\4\0\22\u02e1\3\0\1\u02e1"+
-    "\2\0\3\u02e1\13\0\1\u02e2\3\0\1\u02e1\1\u02cf\17\0"+
-    "\3\u02ce\53\0\1\u02cf\56\0\1\u02ef\35\0\1\36\1\0"+
-    "\1\u02f0\1\0\10\36\12\0\22\36\3\0\1\36\2\0"+
-    "\3\36\17\0\1\36\3\0\1\36\1\0\1\u02f1\1\0"+
-    "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\5\36\1\u02cf\14\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\22\36\3\0\1\36\2\0\1\36\1\u02f2\1\36\17\0"+
+    "\3\36\1\u02d0\16\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\22\36\3\0\1\36\2\0\1\36\1\u02f3\1\36\17\0"+
+    "\10\36\1\u02d1\11\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\u02d1\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
+    "\5\36\1\u02d2\14\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\45\0\1\u02d3\41\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\5\36\1\u02d4\14\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\6\36\1\u02d5\13\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02d6"+
+    "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\14\36\1\u02d7\5\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\u02c8\1\0\1\u02c8\1\0"+
+    "\10\u02c8\1\u02c9\3\u02d8\6\0\22\u02c8\3\0\1\u02c8\2\0"+
+    "\3\u02c8\6\0\1\u02d9\3\0\1\u02da\4\0\1\u02c8\5\0"+
+    "\1\u02c8\2\0\3\u02c8\1\0\2\u02c8\13\0\22\u02c8\3\0"+
+    "\1\u02c8\2\0\3\u02c8\17\0\1\u02c8\5\0\1\u02db\2\0"+
+    "\3\u02db\1\0\2\u02db\1\0\1\u02dc\3\u02ca\6\0\22\u02db"+
+    "\3\0\1\u02db\2\0\3\u02db\17\0\1\u02db\5\0\1\u02dd"+
+    "\2\0\3\u02dd\1\0\2\u02dd\6\0\1\u02cb\4\0\22\u02dd"+
+    "\3\0\1\u02dd\2\0\3\u02dd\13\0\1\u02de\3\0\1\u02dd"+
+    "\1\u02cb\35\0\1\u02df\50\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\6\36\1\u02e0\13\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\6\36\1\u02e1\13\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02e2"+
+    "\1\36\17\0\1\36\3\0\1\36\1\0\1\u02e3\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
     "\1\36\3\0\1\36\1\0\1\36\1\0\10\36\12\0"+
-    "\1\u02f4\21\36\3\0\1\36\2\0\3\36\17\0\1\36"+
-    "\5\0\1\u02f5\2\0\3\u02f5\1\0\2\u02f5\13\0\22\u02f5"+
-    "\3\0\1\u02f5\2\0\3\u02f5\17\0\1\u02f5\20\0\3\u02dc"+
-    "\47\0\1\u02dd\3\0\1\u02de\25\0\3\u02eb\43\0\1\u02ec"+
-    "\104\0\1\u02f6\21\0\1\u02df\2\0\3\u02df\1\0\2\u02df"+
-    "\1\0\1\u02e0\11\0\22\u02df\3\0\1\u02df\2\0\3\u02df"+
-    "\17\0\1\u02df\77\0\1\u02f7\41\0\1\u02f8\51\0\1\36"+
+    "\21\36\1\u02e4\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\20\0\3\u02d8\1\u02e5\65\0\1\u02c8\2\0\3\u02c8\1\0"+
+    "\2\u02c8\1\0\1\u02c9\11\0\22\u02c8\3\0\1\u02c8\2\0"+
+    "\3\u02c8\17\0\1\u02c8\77\0\1\u02e6\7\0\1\u02db\1\0"+
+    "\1\u02db\1\0\10\u02db\1\u02dc\3\u02e7\6\0\22\u02db\3\0"+
+    "\1\u02db\2\0\3\u02db\2\0\1\u02e8\3\0\1\u02e9\3\0"+
+    "\1\u02ea\4\0\1\u02db\5\0\1\u02db\2\0\3\u02db\1\0"+
+    "\2\u02db\13\0\22\u02db\3\0\1\u02db\2\0\3\u02db\17\0"+
+    "\1\u02db\3\0\1\u02dd\1\0\1\u02dd\1\0\10\u02dd\5\0"+
+    "\1\u02cb\4\0\22\u02dd\3\0\1\u02dd\2\0\3\u02dd\13\0"+
+    "\1\u02de\3\0\1\u02dd\1\u02cb\17\0\3\u02ca\53\0\1\u02cb"+
+    "\56\0\1\u02eb\35\0\1\36\1\0\1\u02ec\1\0\10\36"+
+    "\12\0\22\36\3\0\1\36\2\0\3\36\17\0\1\36"+
+    "\3\0\1\36\1\0\1\u02ed\1\0\10\36\12\0\22\36"+
+    "\3\0\1\36\2\0\3\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+
+    "\2\0\1\36\1\u02ee\1\36\17\0\1\36\3\0\1\36"+
     "\1\0\1\36\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\1\36\1\u02f9\1\36\17\0\1\36\3\0\1\36"+
-    "\1\0\1\36\1\0\10\36\12\0\13\36\1\u02fa\6\36"+
-    "\3\0\1\36\2\0\3\36\17\0\1\36\2\0\1\u02fb"+
-    "\1\u02f5\1\u02fb\1\u02f5\1\u02fb\10\u02f5\1\u02fb\3\u02fc\6\u02fb"+
-    "\22\u02f5\3\u02fb\1\u02f5\2\u02fb\3\u02f5\2\u02fb\1\u02fd\7\u02fb"+
-    "\1\u02fe\4\u02fb\1\u02f5\2\u02fb\16\0\3\u02eb\43\0\1\u02ec"+
-    "\3\0\1\u02ed\3\0\1\u02ee\16\0\1\u02ff\75\0\1\36"+
-    "\1\0\1\u0300\1\0\10\36\12\0\22\36\3\0\1\36"+
-    "\2\0\3\36\17\0\1\36\2\0\16\u02fb\1\0\1\u02fb"+
-    "\1\0\43\u02fb\1\u02fd\35\u02fb\3\u02fc\43\u02fb\1\u02fd\35\u02fb"+
-    "\1\0\1\u02fb\1\0\43\u02fb\1\u02fd\1\u0301\21\u02fb\1\u0302"+
-    "\2\u02fb\3\u0302\1\u02fb\2\u0302\2\u02fb\1\0\1\u02fb\1\0"+
-    "\1\u02fb\1\u02fe\4\u02fb\22\u0302\3\u02fb\1\u0302\2\u02fb\3\u0302"+
-    "\2\u02fb\1\u02fd\10\u02fb\1\u0303\3\u02fb\1\u0302\1\u02fe\1\u02fb"+
-    "\47\0\1\u0304\35\0\1\36\1\0\1\36\1\0\10\36"+
-    "\12\0\11\36\1\u0305\10\36\3\0\1\36\2\0\3\36"+
-    "\17\0\1\36\2\0\1\u02fb\1\u0302\1\u02fb\1\u0302\1\u02fb"+
-    "\10\u0302\1\u02fb\1\0\1\u02fb\1\0\1\u02fb\1\u02fe\4\u02fb"+
-    "\22\u0302\3\u02fb\1\u0302\2\u02fb\3\u0302\2\u02fb\1\u02fd\10\u02fb"+
-    "\1\u0303\3\u02fb\1\u0302\1\u02fe\17\u02fb\3\u02fc\43\u02fb\1\u02fd"+
-    "\7\u02fb\1\u02fe\7\u02fb\3\0\1\u0306\101\0\1\36\1\0"+
-    "\1\36\1\0\10\36\12\0\22\36\3\0\1\36\1\u0307"+
-    "\1\0\3\36\17\0\1\36\20\0\3\u0306\5\0\1\u0308"+
-    "\133\0\1\u0309\43\0\3\u0308\1\0\1\u030a\25\0\1\u030b"+
-    "\31\0\1\u030c\26\0\1\u030d\126\0\1\u030e\77\0\1\u030f"+
-    "\107\0\1\u0310\77\0\1\u0311\107\0\1\u0312\77\0\1\u0313"+
-    "\107\0\1\u0314\51\0\3\u0312\31\0\1\u0315\101\0\1\u0316"+
-    "\55\0\1\u0312\163\0\1\u0312\1\0";
+    "\2\0\1\36\1\u02ef\1\36\17\0\1\36\3\0\1\36"+
+    "\1\0\1\36\1\0\10\36\12\0\1\u02f0\21\36\3\0"+
+    "\1\36\2\0\3\36\17\0\1\36\5\0\1\u02f1\2\0"+
+    "\3\u02f1\1\0\2\u02f1\13\0\22\u02f1\3\0\1\u02f1\2\0"+
+    "\3\u02f1\17\0\1\u02f1\20\0\3\u02d8\47\0\1\u02d9\3\0"+
+    "\1\u02da\25\0\3\u02e7\43\0\1\u02e8\104\0\1\u02f2\21\0"+
+    "\1\u02db\2\0\3\u02db\1\0\2\u02db\1\0\1\u02dc\11\0"+
+    "\22\u02db\3\0\1\u02db\2\0\3\u02db\17\0\1\u02db\77\0"+
+    "\1\u02f3\41\0\1\u02f4\51\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\1\36\1\u02f5"+
+    "\1\36\17\0\1\36\3\0\1\36\1\0\1\36\1\0"+
+    "\10\36\12\0\13\36\1\u02f6\6\36\3\0\1\36\2\0"+
+    "\3\36\17\0\1\36\2\0\1\u02f7\1\u02f1\1\u02f7\1\u02f1"+
+    "\1\u02f7\10\u02f1\1\u02f7\3\u02f8\6\u02f7\22\u02f1\3\u02f7\1\u02f1"+
+    "\2\u02f7\3\u02f1\2\u02f7\1\u02f9\7\u02f7\1\u02fa\4\u02f7\1\u02f1"+
+    "\2\u02f7\16\0\3\u02e7\43\0\1\u02e8\3\0\1\u02e9\3\0"+
+    "\1\u02ea\16\0\1\u02fb\75\0\1\36\1\0\1\u02fc\1\0"+
+    "\10\36\12\0\22\36\3\0\1\36\2\0\3\36\17\0"+
+    "\1\36\2\0\16\u02f7\1\0\1\u02f7\1\0\43\u02f7\1\u02f9"+
+    "\35\u02f7\3\u02f8\43\u02f7\1\u02f9\35\u02f7\1\0\1\u02f7\1\0"+
+    "\43\u02f7\1\u02f9\1\u02fd\21\u02f7\1\u02fe\2\u02f7\3\u02fe\1\u02f7"+
+    "\2\u02fe\2\u02f7\1\0\1\u02f7\1\0\1\u02f7\1\u02fa\4\u02f7"+
+    "\22\u02fe\3\u02f7\1\u02fe\2\u02f7\3\u02fe\2\u02f7\1\u02f9\10\u02f7"+
+    "\1\u02ff\3\u02f7\1\u02fe\1\u02fa\1\u02f7\47\0\1\u0300\35\0"+
+    "\1\36\1\0\1\36\1\0\10\36\12\0\11\36\1\u0301"+
+    "\10\36\3\0\1\36\2\0\3\36\17\0\1\36\2\0"+
+    "\1\u02f7\1\u02fe\1\u02f7\1\u02fe\1\u02f7\10\u02fe\1\u02f7\1\0"+
+    "\1\u02f7\1\0\1\u02f7\1\u02fa\4\u02f7\22\u02fe\3\u02f7\1\u02fe"+
+    "\2\u02f7\3\u02fe\2\u02f7\1\u02f9\10\u02f7\1\u02ff\3\u02f7\1\u02fe"+
+    "\1\u02fa\17\u02f7\3\u02f8\43\u02f7\1\u02f9\7\u02f7\1\u02fa\7\u02f7"+
+    "\3\0\1\u0302\101\0\1\36\1\0\1\36\1\0\10\36"+
+    "\12\0\22\36\3\0\1\36\1\u0303\1\0\3\36\17\0"+
+    "\1\36\20\0\3\u0302\5\0\1\u0304\133\0\1\u0305\43\0"+
+    "\3\u0304\1\0\1\u0306\25\0\1\u0307\31\0\1\u0308\26\0"+
+    "\1\u0309\126\0\1\u030a\77\0\1\u030b\107\0\1\u030c\77\0"+
+    "\1\u030d\107\0\1\u030e\77\0\1\u030f\107\0\1\u0310\51\0"+
+    "\3\u030e\31\0\1\u0311\101\0\1\u0312\55\0\1\u030e\163\0"+
+    "\1\u030e\1\0";
 
   private static int [] zzUnpackTrans() {
-    int [] result = new int[39916];
+    int [] result = new int[39644];
     int offset = 0;
     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
     return result;
@@ -1282,7 +1280,7 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) {
   private static final String ZZ_ATTRIBUTE_PACKED_0 =
     "\22\0\2\1\1\11\11\1\1\11\3\1\3\11\25\1"+
     "\1\11\12\1\6\11\1\1\1\11\3\1\1\11\4\1"+
-    "\1\11\7\1\1\11\5\1\1\11\2\1\1\11\2\1"+
+    "\1\11\7\1\1\11\10\1\1\11\4\1\1\11\2\1"+
     "\1\11\2\1\2\11\1\1\24\11\5\1\1\11\1\1"+
     "\1\11\1\1\1\11\1\1\1\0\4\1\2\0\1\11"+
     "\6\1\2\11\2\0\6\1\2\0\1\1\3\0\1\11"+
@@ -1290,25 +1288,25 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) {
     "\12\0\3\1\1\11\1\1\1\0\1\11\1\1\1\11"+
     "\1\1\1\11\1\1\5\11\1\1\1\11\4\0\3\1"+
     "\3\11\1\1\3\0\2\1\1\11\1\1\3\0\1\1"+
-    "\2\0\1\11\2\0\1\11\10\0\1\11\2\0\1\11"+
-    "\1\0\1\11\1\1\2\0\1\11\2\0\3\11\2\0"+
-    "\1\1\1\0\1\11\16\1\1\0\1\11\44\1\1\11"+
-    "\1\1\12\0\10\1\3\11\2\0\1\11\1\0\1\1"+
-    "\1\0\1\11\1\1\1\11\1\1\1\0\1\11\5\1"+
-    "\1\0\1\11\1\0\1\11\1\1\1\0\1\11\1\0"+
-    "\1\1\1\0\2\1\1\11\2\0\60\1\12\0\11\1"+
-    "\5\0\1\11\3\0\2\1\1\11\3\0\54\1\5\0"+
-    "\1\11\6\0\11\1\1\11\1\1\5\0\1\11\2\1"+
-    "\1\11\1\1\1\0\31\1\1\0\4\1\4\0\1\11"+
-    "\5\0\1\11\11\1\6\0\24\1\1\0\2\1\1\11"+
-    "\3\0\1\11\1\0\11\1\1\11\1\1\4\0\17\1"+
-    "\1\0\1\1\2\11\10\1\5\0\12\1\1\0\7\1"+
-    "\5\0\6\1\1\11\4\1\10\0\5\1\7\0\5\1"+
-    "\1\0\1\11\2\0\2\1\5\0\2\1\3\0\1\1"+
-    "\7\0\1\11\7\0\1\11\1\0";
+    "\1\0\1\1\1\11\1\0\1\11\3\0\1\1\1\0"+
+    "\2\1\1\11\1\0\1\11\1\0\1\11\1\1\2\0"+
+    "\1\11\2\0\3\11\2\0\1\1\1\0\1\11\16\1"+
+    "\1\0\1\11\44\1\1\11\1\1\12\0\10\1\3\11"+
+    "\2\0\1\11\1\0\1\1\1\0\1\11\1\1\1\11"+
+    "\1\1\1\0\1\11\5\1\1\0\1\11\1\0\2\11"+
+    "\2\1\1\11\2\0\60\1\12\0\11\1\5\0\1\11"+
+    "\3\0\2\1\1\11\2\0\54\1\5\0\1\11\6\0"+
+    "\11\1\1\11\1\1\5\0\1\11\2\1\1\11\1\1"+
+    "\1\0\31\1\1\0\4\1\4\0\1\11\5\0\1\11"+
+    "\11\1\6\0\24\1\1\0\2\1\1\11\3\0\1\11"+
+    "\1\0\11\1\1\11\1\1\4\0\17\1\1\0\1\1"+
+    "\2\11\10\1\5\0\12\1\1\0\7\1\5\0\6\1"+
+    "\1\11\4\1\10\0\5\1\7\0\5\1\1\0\1\11"+
+    "\2\0\2\1\5\0\2\1\3\0\1\1\7\0\1\11"+
+    "\7\0\1\11\1\0";
 
   private static int [] zzUnpackAttribute() {
-    int [] result = new int[790];
+    int [] result = new int[786];
     int offset = 0;
     offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
     return result;
@@ -1570,6 +1568,32 @@ private Symbol createFullHeredocBodySymbol() {
         return symbol;
     }
 
+    private boolean isLabelChar(char c) {
+        return c == '_'
+                || (c >= 'a' && c <= 'z')
+                || (c >= 'A' && c <= 'Z')
+                || (c >= 0x7f && c <= 0xff);
+    }
+
+    private boolean isEndHereOrNowdoc(String hereOrNowdoc) {
+        // check whether ID exists
+        String trimedText = yytext().trim();
+        boolean isEnd = false;
+        if (trimedText.startsWith(hereOrNowdoc)) {
+            if (trimedText.length() == hereOrNowdoc.length()) {
+                isEnd = true;
+            } else if (trimedText.length() > hereOrNowdoc.length()
+                    && !isLabelChar(trimedText.charAt(hereOrNowdoc.length()))) {
+                // e.g.
+                // $test = <<< END
+                // ENDING
+                // END
+                isEnd = true;
+            }
+        }
+        return isEnd;
+    }
+
     public int[] getParamenters(){
     	return new int[]{zzMarkedPos, zzPushbackPos, zzCurrentPos, zzStartRead, zzEndRead, yyline};
     }
@@ -1962,16 +1986,16 @@ else if (zzAtEOF) {
       zzMarkedPos = zzMarkedPosL;
 
       switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
-        case 207:
+        case 208:
           { comment = yytext();
     handleVarComment();
           }
-        case 209: break;
-        case 190:
+        case 210: break;
+        case 191:
           { return createFullSymbol(ASTPHP5Symbols.T_INTERFACE);
           }
-        case 210: break;
-        case 155:
+        case 211: break;
+        case 156:
           { int removeChars = (yytext().charAt(0) == 'b')?4:3;
     heredoc = yytext().substring(removeChars).trim();    // for 'b<<<' or '<<<'
     if (heredoc.charAt(0) == '"') {
@@ -1980,52 +2004,52 @@ else if (zzAtEOF) {
     yybegin(ST_START_HEREDOC);
     return createSymbol(ASTPHP5Symbols.T_START_HEREDOC);
           }
-        case 211: break;
+        case 212: break;
         case 26:
           { return createSymbol(ASTPHP5Symbols.T_OR);
           }
-        case 212: break;
-        case 153:
+        case 213: break;
+        case 154:
           { return createFullSymbol(ASTPHP5Symbols.T_PRINT);
           }
-        case 213: break;
-        case 177:
+        case 214: break;
+        case 178:
           { return createSymbol(ASTPHP5Symbols.T_UNSET_CAST);
           }
-        case 214: break;
+        case 215: break;
         case 35:
           { handleCommentStart();
 	yybegin(ST_ONE_LINE_COMMENT);
 //	yymore();
           }
-        case 215: break;
+        case 216: break;
         case 1:
           { return createSymbol(ASTPHP5Symbols.T_INLINE_HTML);
           }
-        case 216: break;
+        case 217: break;
         case 21:
           { return createSymbol(ASTPHP5Symbols.T_RGREATER);
           }
-        case 217: break;
-        case 125:
+        case 218: break;
+        case 128:
           { yypushback(1);
 	pushState(ST_VAR_OFFSET);
 	return createFullSymbol(ASTPHP5Symbols.T_VARIABLE);
           }
-        case 218: break;
-        case 164:
+        case 219: break;
+        case 165:
           { return createFullSymbol(ASTPHP5Symbols.T_GLOBAL);
           }
-        case 219: break;
-        case 56:
+        case 220: break;
+        case 59:
           { //	yymore();
           }
-        case 220: break;
+        case 221: break;
         case 22:
           { return createSymbol(ASTPHP5Symbols.T_TIMES);
           }
-        case 221: break;
-        case 108:
+        case 222: break;
+        case 111:
           { String text = yytext();
     if ((text.charAt(1)=='%' && asp_tags)
         || (text.charAt(1)=='?')) {
@@ -2035,204 +2059,164 @@ else if (zzAtEOF) {
         return createSymbol(ASTPHP5Symbols.T_INLINE_HTML);
     }
           }
-        case 222: break;
-        case 73:
-          { return createSymbol(ASTPHP5Symbols.T_MINUS_EQUAL);
-          }
         case 223: break;
-        case 91:
-          { return createSymbol(ASTPHP5Symbols.T_BOOLEAN_OR);
+        case 76:
+          { return createSymbol(ASTPHP5Symbols.T_MINUS_EQUAL);
           }
         case 224: break;
+        case 94:
+          { return createSymbol(ASTPHP5Symbols.T_BOOLEAN_OR);
+          }
+        case 225: break;
         case 12:
           { pushState(ST_IN_SCRIPTING);
     bracket++;
     return createSymbol(ASTPHP5Symbols.T_CURLY_OPEN);
           }
-        case 225: break;
+        case 226: break;
+        case 46:
+          { /* <ST_END_NOWDOC>{LABEL}";"?[\n\r] */
+    nowdoc=null;
+    nowdoc_len=0;
+    nowdocBody.delete(0, nowdocBody.length());
+    nowdocBodyStart = -1;
+    nowdocBodyLength = 0;
+    yybegin(ST_IN_SCRIPTING);
+    int back = 0;
+    if (yytext().charAt(yylength() - 1)==';') {
+        back++;
+    }
+    yypushback(back);
+    return createSymbol(ASTPHP5Symbols.T_END_NOWDOC);
+          }
+        case 227: break;
         case 42:
           { yypushback(1);
 	yybegin(ST_HEREDOC);
           }
-        case 226: break;
+        case 228: break;
         case 19:
           { return createSymbol(ASTPHP5Symbols.T_CLOSE_PARENTHESE);
           }
-        case 227: break;
-        case 44:
+        case 229: break;
+        case 47:
           { yypushback(yylength());
     popState();
           }
-        case 228: break;
+        case 230: break;
         case 20:
           { return createSymbol(ASTPHP5Symbols.T_NOT);
           }
-        case 229: break;
-        case 156:
+        case 231: break;
+        case 157:
           { yypushback(3);
 	pushState(ST_LOOKING_FOR_PROPERTY);
 	return createFullSymbol(ASTPHP5Symbols.T_VARIABLE);
           }
-        case 230: break;
+        case 232: break;
         case 28:
           { return createSymbol(ASTPHP5Symbols.T_QUESTION_MARK);
           }
-        case 231: break;
-        case 119:
+        case 233: break;
+        case 122:
           { return createFullSymbol(ASTPHP5Symbols.T_VAR);
           }
-        case 232: break;
-        case 204:
+        case 234: break;
+        case 205:
           { return createFullSymbol(ASTPHP5Symbols.T_FUNC_C);
           }
-        case 233: break;
-        case 143:
+        case 235: break;
+        case 144:
           { return createFullSymbol(ASTPHP5Symbols.T_TRAIT);
           }
-        case 234: break;
-        case 128:
-          { /* <ST_HEREDOC> {NEWLINE}{LABEL}";"?[\n\r] */
-        int trailingNewLineLength = 1;
-        int labelLength = yylength() - trailingNewLineLength;
-        int back = trailingNewLineLength;
-
-        if (yytext().charAt(labelLength-1) == ';') {
-           labelLength--;
-           back++;
-        }
-        if (labelLength > heredoc.length()
-                && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) {
-            back += heredoc.length();
-            yypushback(back);
-            yybegin(ST_END_HEREDOC);
-        } else {
-            yypushback(trailingNewLineLength);
-        }
-        updateHeredocBodyInfo();
-        if (yystate() == ST_END_HEREDOC) {
-            return createFullHeredocBodySymbol();
-        }
-          }
-        case 235: break;
-        case 161:
+        case 236: break;
+        case 162:
           { return createFullSymbol(ASTPHP5Symbols.T_STATIC);
           }
-        case 236: break;
-        case 133:
+        case 237: break;
+        case 134:
           { return createFullSymbol(ASTPHP5Symbols.T_EVAL);
           }
-        case 237: break;
-        case 163:
+        case 238: break;
+        case 164:
           { return createFullSymbol(ASTPHP5Symbols.T_RETURN);
           }
-        case 238: break;
-        case 146:
+        case 239: break;
+        case 147:
           { return createFullSymbol(ASTPHP5Symbols.T_UNSET);
           }
-        case 239: break;
-        case 84:
+        case 240: break;
+        case 87:
           { return createSymbol(ASTPHP5Symbols.T_DIV_EQUAL);
           }
-        case 240: break;
-        case 45:
+        case 241: break;
+        case 48:
           { popState();
     return createFullSymbol(ASTPHP5Symbols.T_STRING);
           }
-        case 241: break;
-        case 201:
+        case 242: break;
+        case 202:
           { return createFullSymbol(ASTPHP5Symbols.T_METHOD_C);
           }
-        case 242: break;
-        case 197:
+        case 243: break;
+        case 198:
           { return createFullSymbol(ASTPHP5Symbols.T_ENDFOREACH);
           }
-        case 243: break;
-        case 172:
+        case 244: break;
+        case 173:
           { return createFullSymbol(ASTPHP5Symbols.T_FINALLY);
           }
-        case 244: break;
-        case 80:
+        case 245: break;
+        case 83:
           { return createSymbol(ASTPHP5Symbols.T_IS_SMALLER_OR_EQUAL);
           }
-        case 245: break;
-        case 67:
+        case 246: break;
+        case 70:
           { return createFullSymbol(ASTPHP5Symbols.T_CONSTANT_ENCAPSED_STRING);
           }
-        case 246: break;
-        case 111:
+        case 247: break;
+        case 114:
           { return createFullSymbol(ASTPHP5Symbols.T_LOGICAL_AND);
           }
-        case 247: break;
-        case 148:
+        case 248: break;
+        case 149:
           { return createFullSymbol(ASTPHP5Symbols.T_CONST);
           }
-        case 248: break;
-        case 136:
+        case 249: break;
+        case 137:
           { return createFullSymbol(ASTPHP5Symbols.T_GOTO);
           }
-        case 249: break;
-        case 114:
+        case 250: break;
+        case 117:
           { return createFullSymbol(ASTPHP5Symbols.T_EXIT);
           }
-        case 250: break;
+        case 251: break;
         case 37:
           { yybegin(ST_IN_SCRIPTING);
     return createSymbol(ASTPHP5Symbols.T_QUATE);
           }
-        case 251: break;
-        case 100:
-          { /* <ST_END_HEREDOC>{LABEL}";"?[\n\r] { */
-    heredoc=null;
-    resetHeredocBodyInfo();
-    yybegin(ST_IN_SCRIPTING);
-    int back = 1;
-    // mark just the label
-    if (yytext().charAt(yylength() - 2)==';') {
-        back++;
-    }
-    yypushback(back);
-    return createSymbol(ASTPHP5Symbols.T_END_HEREDOC);
-          }
         case 252: break;
-        case 127:
+        case 130:
           { /* <ST_HEREDOC> {HEREDOC_CHARS}("{$" | "${") */
         yypushback(2);
         updateHeredocBodyInfo();
         return createFullHeredocBodySymbol();
           }
         case 253: break;
-        case 183:
+        case 184:
           { return createFullSymbol(ASTPHP5Symbols.T_CALLABLE);
           }
         case 254: break;
-        case 120:
+        case 123:
           { return createSymbol(ASTPHP5Symbols.T_IS_NOT_IDENTICAL);
           }
         case 255: break;
-        case 101:
-          { int length = yylength() - 1;
-    yypushback(1);
-
-    if (yytext().charAt(length - 1) == ';') {
-        length--;
-        yypushback(1);
-    }
-    if (length == nowdoc.length() && yytext().substring(0, length).equals(nowdoc)) {
-        nowdoc = null;
-        yybegin(ST_IN_SCRIPTING);
-        return createSymbol(ASTPHP5Symbols.T_END_NOWDOC);
-    } else {
-        yybegin(ST_NOWDOC);
-        updateNowdocBodyInfo();
-    }
-          }
-        case 256: break;
-        case 160:
+        case 161:
           { /* not a keyword, hust for recognize constans.*/
     return createFullSymbol(ASTPHP5Symbols.T_DEFINE);
           }
-        case 257: break;
-        case 57:
+        case 256: break;
+        case 60:
           { String yytext = yytext();
 	switch (yytext.charAt(yytext.length() - 1)) {
 		case '?':
@@ -2246,127 +2230,132 @@ else if (zzAtEOF) {
 	}
 //	yymore();
           }
-        case 258: break;
-        case 90:
+        case 257: break;
+        case 93:
           { return createSymbol(ASTPHP5Symbols.T_OR_EQUAL);
           }
-        case 259: break;
-        case 141:
+        case 258: break;
+        case 142:
           { return createFullSymbol(ASTPHP5Symbols.T_BREAK);
           }
-        case 260: break;
-        case 208:
+        case 259: break;
+        case 209:
           { yybegin(ST_HALTED_COMPILER);
 	return createSymbol(ASTPHP5Symbols.T_HALT_COMPILER);
           }
-        case 261: break;
-        case 58:
+        case 260: break;
+        case 61:
           { yybegin(ST_IN_SCRIPTING);
     return createSymbol(ASTPHP5Symbols.T_ECHO);
           }
-        case 262: break;
-        case 162:
+        case 261: break;
+        case 163:
           { return createFullSymbol(ASTPHP5Symbols.T_SWITCH);
           }
-        case 263: break;
-        case 53:
+        case 262: break;
+        case 56:
           { popState();
 	return createSymbol(ASTPHP5Symbols.T_CLOSE_RECT);
           }
-        case 264: break;
+        case 263: break;
         case 32:
           { return createSymbol(ASTPHP5Symbols.T_TILDA);
           }
-        case 265: break;
-        case 70:
+        case 264: break;
+        case 73:
           { return createFullSymbol(ASTPHP5Symbols.T_IF);
           }
-        case 266: break;
-        case 174:
+        case 265: break;
+        case 175:
           { return createFullSymbol(ASTPHP5Symbols.T_REQUIRE);
           }
-        case 267: break;
+        case 266: break;
         case 17:
           { return createSymbol(ASTPHP5Symbols.T_NEKUDOTAIM);
           }
-        case 268: break;
+        case 267: break;
         case 25:
           { return createSymbol(ASTPHP5Symbols.T_REFERENCE);
           }
-        case 269: break;
-        case 85:
+        case 268: break;
+        case 88:
           { handleCommentStart();
     yybegin(ST_COMMENT);
           }
-        case 270: break;
-        case 192:
+        case 269: break;
+        case 193:
           { return createFullSymbol(ASTPHP5Symbols.T_NAMESPACE);
           }
-        case 271: break;
-        case 199:
+        case 270: break;
+        case 200:
           { return createFullSymbol(ASTPHP5Symbols.T_IMPLEMENTS);
           }
-        case 272: break;
-        case 151:
+        case 271: break;
+        case 152:
           { return createFullSymbol(ASTPHP5Symbols.T_YIELD);
           }
-        case 273: break;
+        case 272: break;
         case 15:
           { return createSymbol(ASTPHP5Symbols.T_MINUS);
           }
+        case 273: break;
+        case 44:
+          { /* <ST_NOWDOC>{NOWDOC_CHARS}|{NEWLINE} */
+        updateNowdocBodyInfo();
+          }
         case 274: break;
-        case 195:
+        case 196:
           { return createFullSymbol(ASTPHP5Symbols.T_CLASS_C);
           }
         case 275: break;
-        case 106:
+        case 109:
           { handlePHPDocEnd();
      yybegin(ST_IN_SCRIPTING);
           }
         case 276: break;
-        case 206:
+        case 207:
           { return createFullSymbol(ASTPHP5Symbols.T_NS_C);
           }
         case 277: break;
-        case 154:
+        case 155:
           { return createSymbol(ASTPHP5Symbols.T_INT_CAST);
           }
         case 278: break;
-        case 159:
+        case 160:
           { return createFullSymbol(ASTPHP5Symbols.T_ELSEIF);
           }
         case 279: break;
-        case 94:
+        case 97:
           { return createSymbol(ASTPHP5Symbols.T_COALESCE);
           }
         case 280: break;
-        case 196:
+        case 197:
           { return createFullSymbol(ASTPHP5Symbols.T_ENDDECLARE);
           }
         case 281: break;
-        case 74:
+        case 77:
           { return createSymbol(ASTPHP5Symbols.T_DEC);
           }
         case 282: break;
-        case 95:
+        case 98:
           { yypushback(1);
     /*<ST_DOUBLE_QUOTES>{DOUBLE_QUOTES_CHARS}*("{""{"+|"$""$"+|(("{"+|"$"+)[\"]))*/
     return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE);
           }
         case 283: break;
-        case 181:
+        case 182:
           { return createFullSymbol(ASTPHP5Symbols.T_ABSTRACT);
           }
         case 284: break;
-        case 132:
+        case 133:
           { return createFullSymbol(ASTPHP5Symbols.T_ELSE);
           }
         case 285: break;
-        case 191:
+        case 192:
           { return createFullSymbol(ASTPHP5Symbols.T_INSTEADOF);
           }
         case 286: break;
-        case 75:
+        case 78:
           { pushState(ST_LOOKING_FOR_PROPERTY);
     return createSymbol(ASTPHP5Symbols.T_OBJECT_OPERATOR);
           }
@@ -2379,7 +2368,7 @@ else if (zzAtEOF) {
           { // do nothing
           }
         case 289: break;
-        case 47:
+        case 50:
           { popState();
     pushState(ST_IN_SCRIPTING);
     return createFullSymbol(ASTPHP5Symbols.T_STRING_VARNAME);
@@ -2389,16 +2378,16 @@ else if (zzAtEOF) {
           { return createSymbol(ASTPHP5Symbols.T_LGREATER);
           }
         case 291: break;
-        case 135:
+        case 136:
           { return createFullSymbol(ASTPHP5Symbols.T_LIST);
           }
         case 292: break;
-        case 105:
+        case 108:
           { handleMultilineCommentEnd();
     yybegin(ST_IN_SCRIPTING);
           }
         case 293: break;
-        case 158:
+        case 159:
           { return createFullSymbol(ASTPHP5Symbols.T_ENDFOR);
           }
         case 294: break;
@@ -2406,7 +2395,7 @@ else if (zzAtEOF) {
           { return createFullSymbol(ASTPHP5Symbols.T_LNUMBER);
           }
         case 295: break;
-        case 98:
+        case 101:
           { yypushback(1);
         /*<ST_BACKQUOTE>{BACKQUOTE_CHARS}*("{""{"+|"$""$"+|(("{"+|"$"+)[`]))*/
 	return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE);
@@ -2417,57 +2406,35 @@ else if (zzAtEOF) {
         updateHeredocBodyInfo();
           }
         case 297: break;
-        case 137:
+        case 138:
           { handleCommentStart();
           }
         case 298: break;
-        case 140:
+        case 141:
           { return createFullSymbol(ASTPHP5Symbols.T_ARRAY);
           }
         case 299: break;
-        case 131:
+        case 132:
           { return createFullSymbol(ASTPHP5Symbols.T_ECHO);
           }
         case 300: break;
-        case 48:
+        case 51:
           { return createFullSymbol(ASTPHP5Symbols.T_NUM_STRING);
           }
         case 301: break;
-        case 88:
+        case 91:
           { return createSymbol(ASTPHP5Symbols.T_AND_EQUAL);
           }
         case 302: break;
-        case 99:
-          { /* <ST_START_HEREDOC>{LABEL}";"?[\n\r] */
-    int trailingNewLineLength = 1;
-    int labelLength = yylength() - trailingNewLineLength;
-    int back = trailingNewLineLength;
-    String yytext = yytext();
-
-    if (yytext.charAt(labelLength - 1) == ';') {
-        labelLength--;
-        back++;
-    }
-    if (labelLength == heredoc.length()
-            && yytext.substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) {
-        back = back + heredoc.length();
-        yypushback(back);
-        yybegin(ST_END_HEREDOC);
-    } else {
-        yypushback(yylength());
-        yybegin(ST_HEREDOC);
-    }
-          }
-        case 303: break;
-        case 52:
+        case 55:
           { bracket++; return createSymbol(ASTPHP5Symbols.T_CURLY_OPEN);
           }
-        case 304: break;
-        case 144:
+        case 303: break;
+        case 145:
           { return createFullSymbol(ASTPHP5Symbols.T_THROW);
           }
-        case 305: break;
-        case 126:
+        case 304: break;
+        case 129:
           { /* <ST_HEREDOC> {HEREDOC_CHARS}"$"{LABEL}"["? */
         String text = yytext();
         int lastIndexOfDollar = text.lastIndexOf('$');
@@ -2475,16 +2442,16 @@ else if (zzAtEOF) {
         updateHeredocBodyInfo();
         return createFullHeredocBodySymbol();
           }
-        case 306: break;
-        case 152:
+        case 305: break;
+        case 153:
           { return createFullSymbol(ASTPHP5Symbols.T_WHILE);
           }
-        case 307: break;
-        case 189:
+        case 306: break;
+        case 190:
           { return createFullSymbol(ASTPHP5Symbols.T_ENDSWITCH);
           }
-        case 308: break;
-        case 59:
+        case 307: break;
+        case 62:
           { if (asp_tags) {
         yybegin(ST_IN_SCRIPTING);
         //return T_OPEN_TAG;
@@ -2493,23 +2460,64 @@ else if (zzAtEOF) {
         return createSymbol(ASTPHP5Symbols.T_INLINE_HTML);
     }
           }
-        case 309: break;
-        case 176:
+        case 308: break;
+        case 177:
           { return createSymbol(ASTPHP5Symbols.T_ARRAY_CAST);
           }
+        case 309: break;
+        case 102:
+          { /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
+        int trailingNewLineLength = 1;
+        int labelLength = yylength() - trailingNewLineLength;
+        int back = trailingNewLineLength;
+
+        if (yytext().charAt(labelLength-1) == ';') {
+           labelLength--;
+           back++;
+        }
+
+        if (isEndHereOrNowdoc(heredoc)) {
+            int indexOfHeredocId = yytext().indexOf(heredoc);
+            back += labelLength - indexOfHeredocId;
+            yypushback(back);
+            yybegin(ST_END_HEREDOC);
+        } else {
+            int indexOfVariable1 = yytext().indexOf("$");
+            int indexOfVariable2 = yytext().indexOf("{$");
+            if (indexOfVariable1 > 0 && indexOfVariable2 == -1) {
+                yypushback(yylength() - indexOfVariable1);
+                updateHeredocBodyInfo();
+                return createFullHeredocBodySymbol();
+            } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) {
+                yypushback(yylength() - indexOfVariable2);
+                updateHeredocBodyInfo();
+                return createFullHeredocBodySymbol();
+            } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) {
+                yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2));
+                updateHeredocBodyInfo();
+                return createFullHeredocBodySymbol();
+            } else {
+                yypushback(trailingNewLineLength);
+            }
+        }
+        updateHeredocBodyInfo();
+        if (yystate() == ST_END_HEREDOC) {
+            return createFullHeredocBodySymbol();
+        }
+          }
         case 310: break;
-        case 97:
+        case 100:
           { pushState(ST_IN_SCRIPTING);
     yypushback(yylength()-1);
     bracket++;
     return createSymbol(ASTPHP5Symbols.T_CURLY_OPEN_WITH_DOLAR);
           }
         case 311: break;
-        case 170:
+        case 171:
           { return createFullSymbol(ASTPHP5Symbols.T_DEFAULT);
           }
         case 312: break;
-        case 167:
+        case 168:
           { return createSymbol(ASTPHP5Symbols.T_DOUBLE_CAST);
           }
         case 313: break;
@@ -2522,15 +2530,33 @@ else if (zzAtEOF) {
           { return createSymbol(ASTPHP5Symbols.T_OPEN_RECT);
           }
         case 315: break;
-        case 147:
+        case 148:
           { return createFullSymbol(ASTPHP5Symbols.T_CATCH);
           }
         case 316: break;
-        case 96:
+        case 104:
+          { /* <ST_NOWDOC>{NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+        if (isEndHereOrNowdoc(nowdoc)) {
+            String yytext = yytext();
+            int newlineLength = yytext.startsWith("\r\n") ? 2 : 1;
+            int back = yylength() - newlineLength;
+            yypushback(back);
+            updateNowdocBodyInfo();
+            yybegin(ST_END_NOWDOC);
+            if (nowdocBodyLength > 0) {
+                return createFullNowdocBodySymbol();
+            }
+        } else {
+            yypushback(1);
+            updateNowdocBodyInfo();
+        }
+          }
+        case 317: break;
+        case 99:
           { pushState(ST_LOOKING_FOR_VARNAME);
     return createSymbol(ASTPHP5Symbols.T_DOLLAR_OPEN_CURLY_BRACES);
           }
-        case 317: break;
+        case 318: break;
         case 34:
           { /* This is a temporary fix which is dependant on flex and it's implementation */
     if (!stack.isEmpty()) {
@@ -2539,86 +2565,109 @@ else if (zzAtEOF) {
     bracket--;
     return createSymbol(ASTPHP5Symbols.T_CURLY_CLOSE);
           }
-        case 318: break;
-        case 86:
+        case 319: break;
+        case 89:
           { return createSymbol(ASTPHP5Symbols.T_MOD_EQUAL);
           }
-        case 319: break;
+        case 320: break;
         case 23:
           { return createSymbol(ASTPHP5Symbols.T_DIV);
           }
-        case 320: break;
+        case 321: break;
+        case 103:
+          { /* <ST_START_HEREDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
+    int trailingNewLineLength = 1;
+    int labelLength = yylength() - trailingNewLineLength;
+    int back = trailingNewLineLength;
+    String yytext = yytext();
+
+    if (yytext.charAt(labelLength - 1) == ';') {
+        labelLength--;
+        back++;
+    }
+
+    if (isEndHereOrNowdoc(heredoc)) {
+        int indexOfHeredocId = yytext().indexOf(heredoc);
+        back += labelLength - indexOfHeredocId;
+        yypushback(back);
+        yybegin(ST_END_HEREDOC);
+    } else {
+        yypushback(yylength());
+        yybegin(ST_HEREDOC);
+    }
+          }
+        case 322: break;
         case 31:
           { return createSymbol(ASTPHP5Symbols.T_CLOSE_RECT);
           }
-        case 321: break;
-        case 121:
+        case 323: break;
+        case 124:
           { return createSymbol(ASTPHP5Symbols.T_SPACESHIP);
           }
-        case 322: break;
+        case 324: break;
         case 6:
           { return createSymbol(ASTPHP5Symbols.T_PLUS);
           }
-        case 323: break;
-        case 149:
+        case 325: break;
+        case 150:
           { return createFullSymbol(ASTPHP5Symbols.T_CLASS);
           }
-        case 324: break;
-        case 115:
+        case 326: break;
+        case 118:
           { return createFullSymbol(ASTPHP5Symbols.T_FOR);
           }
-        case 325: break;
-        case 76:
+        case 327: break;
+        case 79:
           { return createSymbol(ASTPHP5Symbols.T_IS_GREATER_OR_EQUAL);
           }
-        case 326: break;
-        case 71:
+        case 328: break;
+        case 74:
           { return createFullSymbol(ASTPHP5Symbols.T_DO);
           }
-        case 327: break;
+        case 329: break;
         case 38:
           { /*<ST_BACKQUOTE>{BACKQUOTE_CHARS}+*/
 	return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE);
           }
-        case 328: break;
+        case 330: break;
         case 36:
           { /*<ST_DOUBLE_QUOTES>{DOUBLE_QUOTES_CHARS}+*/
 	return createFullSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE);
           }
-        case 329: break;
-        case 89:
+        case 331: break;
+        case 92:
           { return createSymbol(ASTPHP5Symbols.T_BOOLEAN_AND);
           }
-        case 330: break;
+        case 332: break;
         case 5:
           { return createFullSymbol(ASTPHP5Symbols.T_STRING);
           }
-        case 331: break;
-        case 169:
+        case 333: break;
+        case 170:
           { return createFullSymbol(ASTPHP5Symbols.T_INCLUDE);
           }
-        case 332: break;
+        case 334: break;
         case 4:
           { return createSymbol(ASTPHP5Symbols.T_NEKUDA);
           }
-        case 333: break;
-        case 138:
+        case 335: break;
+        case 139:
           { return createFullSymbol(ASTPHP5Symbols.T_ENDIF);
           }
-        case 334: break;
-        case 117:
+        case 336: break;
+        case 120:
           { return createFullSymbol(ASTPHP5Symbols.T_NEW);
           }
-        case 335: break;
-        case 54:
+        case 337: break;
+        case 57:
           { bracket--; return createSymbol(ASTPHP5Symbols.T_CURLY_CLOSE);
           }
-        case 336: break;
-        case 198:
+        case 338: break;
+        case 199:
           { return createFullSymbol(ASTPHP5Symbols.T_INSTANCEOF);
           }
-        case 337: break;
-        case 179:
+        case 339: break;
+        case 180:
           { int bprefix = (yytext().charAt(0) != '<') ? 1 : 0;
         int startString=3+bprefix;
         /* 3 is <<<, 2 is quotes, 1 is newline */
@@ -2633,62 +2682,62 @@ else if (zzAtEOF) {
         yybegin(ST_START_NOWDOC);
         return createSymbol(ASTPHP5Symbols.T_START_NOWDOC);
           }
-        case 338: break;
-        case 46:
+        case 340: break;
+        case 49:
           { yypushback(yylength());
     popState();
     pushState(ST_IN_SCRIPTING);
           }
-        case 339: break;
-        case 157:
+        case 341: break;
+        case 158:
           { isEndedPhp = false;
     whitespaceEndPosition = getTokenStartPosition() + yylength();
     yybegin(ST_IN_SCRIPTING);
     //return T_OPEN_TAG;
     //return createSymbol(ASTPHP5Symbols.T_OPEN_TAG);
           }
-        case 340: break;
-        case 64:
+        case 342: break;
+        case 67:
           { return createSymbol(ASTPHP5Symbols.T_PLUS_EQUAL);
           }
-        case 341: break;
+        case 343: break;
         case 8:
           { whitespaceEndPosition = getTokenStartPosition() + yylength();
           }
-        case 342: break;
-        case 175:
+        case 344: break;
+        case 176:
           { return createFullSymbol(ASTPHP5Symbols.T_PRIVATE);
           }
-        case 343: break;
-        case 203:
+        case 345: break;
+        case 204:
           { return createFullSymbol(ASTPHP5Symbols.T_REQUIRE_ONCE);
           }
-        case 344: break;
-        case 173:
+        case 346: break;
+        case 174:
           { return createFullSymbol(ASTPHP5Symbols.T_FOREACH);
           }
-        case 345: break;
-        case 150:
+        case 347: break;
+        case 151:
           { return createFullSymbol(ASTPHP5Symbols.T_CLONE);
           }
-        case 346: break;
-        case 142:
+        case 348: break;
+        case 143:
           { return createFullSymbol(ASTPHP5Symbols.T_ISSET);
           }
-        case 347: break;
+        case 349: break;
         case 18:
           { return createSymbol(ASTPHP5Symbols.T_OPEN_PARENTHESE);
           }
-        case 348: break;
-        case 165:
+        case 350: break;
+        case 166:
           { return createFullSymbol(ASTPHP5Symbols.T_PUBLIC);
           }
-        case 349: break;
-        case 118:
+        case 351: break;
+        case 121:
           { return createSymbol(ASTPHP5Symbols.T_SR_EQUAL);
           }
-        case 350: break;
-        case 60:
+        case 352: break;
+        case 63:
           { if (short_tags_allowed || yylength()>2) { /* yyleng>2 means it's not <? but <script> */
         yybegin(ST_IN_SCRIPTING);
         //return T_OPEN_TAG;
@@ -2697,104 +2746,126 @@ else if (zzAtEOF) {
         return createSymbol(ASTPHP5Symbols.T_INLINE_HTML);
     }
           }
-        case 351: break;
-        case 139:
+        case 353: break;
+        case 140:
           { return createFullSymbol(ASTPHP5Symbols.T_EMPTY);
           }
-        case 352: break;
+        case 354: break;
         case 40:
           { /* <ST_HEREDOC> {HEREDOC_CHARS} */
         updateHeredocBodyInfo();
           }
-        case 353: break;
-        case 79:
+        case 355: break;
+        case 82:
           { return createSymbol(ASTPHP5Symbols.T_IS_NOT_EQUAL);
           }
-        case 354: break;
-        case 82:
+        case 356: break;
+        case 85:
           { return createSymbol(ASTPHP5Symbols.T_MUL_EQUAL);
           }
-        case 355: break;
-        case 124:
+        case 357: break;
+        case 127:
           { if (!parsePHPDoc()) {
 handleCommentStart();
 yybegin(ST_DOCBLOCK);
 }
           }
-        case 356: break;
-        case 122:
+        case 358: break;
+        case 105:
+          { /* <ST_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+    // there is no [\r\n] if it is the last line
+    // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]?
+    if (isEndHereOrNowdoc(nowdoc)) {
+        int indexOfNowdocId = yytext().indexOf(nowdoc);
+        int back = yylength() - indexOfNowdocId - nowdoc.length();
+        yypushback(back);
+        nowdoc = null;
+        nowdoc_len = 0;
+        nowdocBody.delete(0, nowdocBody.length());
+        nowdocBodyStart = -1;
+        nowdocBodyLength = 0;
+        yybegin(ST_IN_SCRIPTING);
+        return createSymbol(ASTPHP5Symbols.T_END_NOWDOC);
+    } else {
+        yypushback(1); // [\r\n] length
+        yybegin(ST_NOWDOC);
+        updateNowdocBodyInfo();
+    }
+          }
+        case 359: break;
+        case 125:
           { return createSymbol(ASTPHP5Symbols.T_SL_EQUAL);
           }
-        case 357: break;
-        case 113:
+        case 360: break;
+        case 116:
           { return createFullSymbol(ASTPHP5Symbols.T_TRY);
           }
-        case 358: break;
-        case 145:
+        case 361: break;
+        case 146:
           { return createFullSymbol(ASTPHP5Symbols.T_FINAL);
           }
-        case 359: break;
-        case 130:
+        case 362: break;
+        case 131:
           { int len = yylength();
         yypushback(2); // go back to mark end of comment in the next token
         comment = yytext();
           }
-        case 360: break;
-        case 186:
+        case 363: break;
+        case 187:
           { return createSymbol(ASTPHP5Symbols.T_OBJECT_CAST);
           }
-        case 361: break;
-        case 166:
+        case 364: break;
+        case 167:
           { return createSymbol(ASTPHP5Symbols.T_BOOL_CAST);
           }
-        case 362: break;
+        case 365: break;
         case 39:
           { yybegin(ST_IN_SCRIPTING);
     return createSymbol(ASTPHP5Symbols.T_BACKQUATE);
           }
-        case 363: break;
+        case 366: break;
         case 7:
           { return createSymbol(ASTPHP5Symbols.T_NS_SEPARATOR);
           }
-        case 364: break;
-        case 185:
+        case 367: break;
+        case 186:
           { return createSymbol(ASTPHP5Symbols.T_STRING_CAST);
           }
-        case 365: break;
-        case 110:
+        case 368: break;
+        case 113:
           { return createFullSymbol(ASTPHP5Symbols.T_LOGICAL_XOR);
           }
-        case 366: break;
-        case 49:
+        case 369: break;
+        case 52:
           { yypushback(1);
 	popState();
         /*<ST_VAR_OFFSET>[ \n\r\t\\'#]*/
 	return createSymbol(ASTPHP5Symbols.T_ENCAPSED_AND_WHITESPACE);
           }
-        case 367: break;
-        case 61:
+        case 370: break;
+        case 64:
           { return createFullSymbol(ASTPHP5Symbols.T_DNUMBER);
           }
-        case 368: break;
+        case 371: break;
         case 24:
           { return createSymbol(ASTPHP5Symbols.T_PRECENT);
           }
-        case 369: break;
-        case 205:
+        case 372: break;
+        case 206:
           { comment = yytext();
     handleVarComment();
     // if we want to handle the var comment in  ast, then return the T_VAR_Comment symbol
     // but it needs some changes in parser grammar. see issue #154967
     //return createFullSymbol(ASTPHP5Symbols.T_VAR_COMMENT);
           }
-        case 370: break;
-        case 93:
+        case 373: break;
+        case 96:
           { isEndedPhp = true;
     yybegin(YYINITIAL);
     return createSymbol(ASTPHP5Symbols.T_SEMICOLON);  /* implicit ';' at php-end tag */
           }
-        case 371: break;
-        case 87:
+        case 374: break;
+        case 90:
           { if (asp_tags) {
         yybegin(YYINITIAL);
         return createSymbol(ASTPHP5Symbols.T_SEMICOLON);  /* implicit ';' at php-end tag */
@@ -2802,81 +2873,79 @@ else if (zzAtEOF) {
         return createSymbol(ASTPHP5Symbols.T_INLINE_HTML);
     }
           }
-        case 372: break;
-        case 182:
+        case 375: break;
+        case 183:
           { return createFullSymbol(ASTPHP5Symbols.T_FUNCTION);
           }
-        case 373: break;
-        case 180:
+        case 376: break;
+        case 181:
           { return createFullSymbol(ASTPHP5Symbols.T_ENDWHILE);
           }
-        case 374: break;
+        case 377: break;
         case 27:
           { return createSymbol(ASTPHP5Symbols.T_KOVA);
           }
-        case 375: break;
+        case 378: break;
+        case 43:
+          { /* <ST_END_HEREDOC>{TABS_AND_SPACES}{LABEL}";"? */
+    heredoc=null;
+    resetHeredocBodyInfo();
+    yybegin(ST_IN_SCRIPTING);
+    int back = 0;
+    // mark just the label
+    if (yytext().charAt(yylength() - 1)==';') {
+        back++;
+    }
+    yypushback(back);
+    return createSymbol(ASTPHP5Symbols.T_END_HEREDOC);
+          }
+        case 379: break;
         case 10:
           { yybegin(ST_DOUBLE_QUOTES);
     return createSymbol(ASTPHP5Symbols.T_QUATE);
           }
-        case 376: break;
-        case 184:
+        case 380: break;
+        case 185:
           { return createFullSymbol(ASTPHP5Symbols.T_CONTINUE);
           }
-        case 377: break;
-        case 112:
+        case 381: break;
+        case 115:
           { return createSymbol(ASTPHP5Symbols.T_IS_IDENTICAL);
           }
-        case 378: break;
-        case 69:
+        case 382: break;
+        case 72:
           { return createSymbol(ASTPHP5Symbols.T_DOUBLE_ARROW);
           }
-        case 379: break;
-        case 194:
+        case 383: break;
+        case 195:
           { return createFullSymbol(ASTPHP5Symbols.T_TRAIT_C);
           }
-        case 380: break;
-        case 102:
-          { /* <ST_END_NOWDOC>{LABEL}";"?[\n\r] */
-    nowdoc=null;
-    nowdoc_len=0;
-    nowdocBody.delete(0, nowdocBody.length());
-    nowdocBodyStart = -1;
-    nowdocBodyLength = 0;
-    yybegin(ST_IN_SCRIPTING);
-    int back = 1;
-    if (yytext().charAt(yylength() - 2)==';') {
-        back++;
-    }
-    yypushback(back);
-    return createSymbol(ASTPHP5Symbols.T_END_NOWDOC);
-          }
-        case 381: break;
-        case 78:
+        case 384: break;
+        case 81:
           { return createSymbol(ASTPHP5Symbols.T_PAAMAYIM_NEKUDOTAYIM);
           }
-        case 382: break;
-        case 116:
+        case 385: break;
+        case 119:
           { return createFullSymbol(ASTPHP5Symbols.T_USE);
           }
-        case 383: break;
-        case 77:
+        case 386: break;
+        case 80:
           { return createSymbol(ASTPHP5Symbols.T_SR);
           }
-        case 384: break;
+        case 387: break;
         case 14:
           { return createSymbol(ASTPHP5Symbols.T_EQUAL);
           }
-        case 385: break;
+        case 388: break;
         case 29:
           { return createSymbol(ASTPHP5Symbols.T_COMMA);
           }
-        case 386: break;
-        case 178:
+        case 389: break;
+        case 179:
           { return createFullSymbol(ASTPHP5Symbols.T_DIR);
           }
-        case 387: break;
-        case 107:
+        case 390: break;
+        case 110:
           { if (asp_tags || yytext().charAt(0)!='%') { /* asp comment? */
         isEndedPhp = true;
 	    handleLineCommentEnd();
@@ -2885,142 +2954,117 @@ else if (zzAtEOF) {
 		//return T_COMMENT;
 	}
           }
-        case 388: break;
-        case 193:
+        case 391: break;
+        case 194:
           { return createFullSymbol(ASTPHP5Symbols.T_PROTECTED);
           }
-        case 389: break;
-        case 62:
+        case 392: break;
+        case 65:
           { return createSymbol(ASTPHP5Symbols.T_CONCAT_EQUAL);
           }
-        case 390: break;
-        case 104:
+        case 393: break;
+        case 107:
           { /* treat numbers (almost) as strings inside encapsulated strings */
     return createFullSymbol(ASTPHP5Symbols.T_NUM_STRING);
           }
-        case 391: break;
+        case 394: break;
         case 9:
           { return createSymbol(ASTPHP5Symbols.T_DOLLAR);
           }
-        case 392: break;
-        case 63:
+        case 395: break;
+        case 66:
           { return createSymbol(ASTPHP5Symbols.T_INC);
           }
-        case 393: break;
-        case 43:
+        case 396: break;
+        case 45:
           { yypushback(1);
 	yybegin(ST_NOWDOC);
           }
-        case 394: break;
-        case 72:
+        case 397: break;
+        case 75:
           { return createFullSymbol(ASTPHP5Symbols.T_LOGICAL_OR);
           }
-        case 395: break;
-        case 81:
+        case 398: break;
+        case 84:
           { return createSymbol(ASTPHP5Symbols.T_SL);
           }
-        case 396: break;
-        case 65:
+        case 399: break;
+        case 68:
           { return createFullSymbol(ASTPHP5Symbols.T_AS);
           }
-        case 397: break;
-        case 202:
+        case 400: break;
+        case 203:
           { return createFullSymbol(ASTPHP5Symbols.T_INCLUDE_ONCE);
           }
-        case 398: break;
-        case 123:
+        case 401: break;
+        case 126:
           { return createSymbol(ASTPHP5Symbols.T_POW_EQUAL);
           }
-        case 399: break;
-        case 68:
+        case 402: break;
+        case 71:
           { return createSymbol(ASTPHP5Symbols.T_IS_EQUAL);
           }
-        case 400: break;
+        case 403: break;
         case 33:
           { return createSymbol(ASTPHP5Symbols.T_AT);
           }
-        case 401: break;
-        case 50:
+        case 404: break;
+        case 53:
           { return createSymbol(ASTPHP5Symbols.T_QUATE);
           }
-        case 402: break;
-        case 188:
+        case 405: break;
+        case 189:
           { return createFullSymbol(ASTPHP5Symbols.T_LINE);
           }
-        case 403: break;
-        case 168:
+        case 406: break;
+        case 169:
           { return createFullSymbol(ASTPHP5Symbols.T_EXTENDS);
           }
-        case 404: break;
-        case 129:
-          { /* <ST_NOWDOC>{NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] */
-    String text = yytext();
-
-    if (text.charAt(text.length() - 2)== ';') {
-        text = text.substring(0, text.length() - 2);
-        yypushback(1);
-    } else {
-        text = text.substring(0, text.length() - 1);
-    }
-
-    int textLength = text.length();
-    if (textLength > nowdoc_len && text.substring(textLength - nowdoc_len, textLength).equals(nowdoc)) {
-        yypushback(nowdoc_len + 1);
-        updateNowdocBodyInfo();
-        yybegin(ST_END_NOWDOC);
-        if (nowdocBodyLength > 0) {
-            return createFullNowdocBodySymbol();
-        }
-    } else {
-        yypushback(1);
-        updateNowdocBodyInfo();
-    }
-          }
-        case 405: break;
-        case 66:
+        case 407: break;
+        case 69:
           { return createFullSymbol(ASTPHP5Symbols.T_VARIABLE);
           }
-        case 406: break;
-        case 200:
+        case 408: break;
+        case 201:
           { return createSymbol(ASTPHP5Symbols.T_YIELD_FROM);
           }
-        case 407: break;
-        case 171:
+        case 409: break;
+        case 172:
           { return createFullSymbol(ASTPHP5Symbols.T_DECLARE);
           }
-        case 408: break;
-        case 92:
+        case 410: break;
+        case 95:
           { return createSymbol(ASTPHP5Symbols.T_XOR_EQUAL);
           }
-        case 409: break;
-        case 83:
+        case 411: break;
+        case 86:
           { return createSymbol(ASTPHP5Symbols.T_POW);
           }
-        case 410: break;
-        case 134:
+        case 412: break;
+        case 135:
           { return createFullSymbol(ASTPHP5Symbols.T_CASE);
           }
-        case 411: break;
-        case 187:
+        case 413: break;
+        case 188:
           { return createFullSymbol(ASTPHP5Symbols.T_FILE);
           }
-        case 412: break;
-        case 103:
+        case 414: break;
+        case 106:
           { return createSymbol(ASTPHP5Symbols.T_OBJECT_OPERATOR);
           }
-        case 413: break;
-        case 109:
+        case 415: break;
+        case 112:
           { return createSymbol(ASTPHP5Symbols.T_ELLIPSIS);
           }
-        case 414: break;
-        case 51:
+        case 416: break;
+        case 54:
           { return createSymbol(ASTPHP5Symbols.T_BACKQUATE);
           }
-        case 415: break;
-        case 55:
+        case 417: break;
+        case 58:
           {
           }
-        case 416: break;
+        case 418: break;
         default:
           if (zzInput == YYEOF && (zzStartRead == zzCurrentPos || zzLexicalState == ST_DOCBLOCK)) {
             zzAtEOF = true;
@@ -3035,7 +3079,7 @@ else if (zzAtEOF) {
                 return createSymbol(ASTPHP5Symbols.EOF);
               }
             }
-            case 791: break;
+            case 787: break;
             default:
               {     return createSymbol(ASTPHP5Symbols.EOF);
  }
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java
index 27d10c830a..6dfbc3201a 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/Quote.java
@@ -20,16 +20,17 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
  * Represents complex qoute(i.e. qoute that includes string and variables).
  * Also represents heredoc
- * <pre>e.g.<pre>
+ * <pre>e.g.
  * "this is $a quote",
  * "'single ${$complex->quote()}'"
  * >>>Heredoc\n  This is here documents \nHeredoc;\n
- *
+ * </pre>
  * Note: "This is".$not." a quote node",
  *       'This is $not a quote too'
  */
@@ -58,7 +59,7 @@ public Quote(int start, int end, List<Exception> expressions, Quote.Type type) {
      * @return expression list of the echo statement
      */
     public List<Expression> getExpressions() {
-        return this.expressions;
+        return Collections.unmodifiableList(this.expressions);
     }
 
     /**
@@ -80,7 +81,7 @@ public String toString() {
         for (Expression expression : getExpressions()) {
             sb.append(expression).append(","); //NOI18N
         }
-        return getQuoteType() + " " + sb.toString();
+        return getQuoteType() + " " + sb.toString(); //NOI18N
     }
 
 }
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java b/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java
index f1ba6cab7a..9b1f745926 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP73UnhandledError.java
@@ -95,6 +95,7 @@ public CheckVisitor(FileObject fileObject) {
 
         public Collection<VerificationError> getErrors() {
             checkFunctionCallTrailingCommas();
+            checkFlexibleHeredocAndNowdoc();
             return Collections.unmodifiableCollection(errors);
         }
 
@@ -209,6 +210,56 @@ private void checkListReferenceAssignment(List<ArrayElement> elements) {
             });
         }
 
+        private void checkFlexibleHeredocAndNowdoc() {
+            if (CancelSupport.getDefault().isCancelled()) {
+                return;
+            }
+
+            BaseDocument document = GsfUtilities.getDocument(fileObject, true);
+            if (document == null) {
+                return;
+            }
+            document.readLock();
+            try {
+                TokenSequence<PHPTokenId> ts = LexUtilities.getPHPTokenSequence(document, document.getLength());
+                if (ts == null) {
+                    return;
+                }
+                ts.move(document.getLength());
+                checkHeredocNowdocIndentationAndNewline(ts);
+            } finally {
+                document.readUnlock();
+            }
+        }
+
+        private void checkHeredocNowdocIndentationAndNewline(TokenSequence<PHPTokenId> ts) {
+            Token<? extends PHPTokenId> endTag;
+            List<PHPTokenId> lookforEndTokens = Arrays.asList(PHPTokenId.PHP_HEREDOC_TAG_END, PHPTokenId.PHP_NOWDOC_TAG_END);
+            while (ts.movePrevious()
+                    && (endTag = LexUtilities.findPreviousToken(ts, lookforEndTokens)) != null) {
+                String endId = endTag.text().toString();
+                // indentation of closing marker
+                int offset = ts.offset();
+                if (endId.contains(" ") || endId.contains("\t")) { // NOI18N
+                    createError(offset, offset + endId.length());
+                }
+                // new line of closing marker
+                if (ts.moveNext()) {
+                    Token<PHPTokenId> newLine = ts.token();
+                    if (newLine != null) {
+                        if (TokenUtilities.startsWith(newLine.text(), "\r") // NOI18N
+                                || (TokenUtilities.startsWith(newLine.text(), "\n") // NOI18N
+                                || TokenUtilities.textEquals(newLine.text(), ";"))) { // NOI18N
+                            // noop
+                        } else {
+                            createError(ts.offset(), ts.offset() + newLine.length());
+                        }
+                    }
+                }
+                ts.move(offset);
+            }
+        }
+
         private void createError(ASTNode node) {
             createError(node.getStartOffset(), node.getEndOffset());
         }
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass
index d9737b4ff5..c9a98aab5c 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_001.pass
@@ -11,27 +11,29 @@ token #9 WHITESPACE
 token #10 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
 token #11 PHP_CONSTANT_ENCAPSED_STRING This is a heredoc test.
 token #12 PHP_CONSTANT_ENCAPSED_STRING \n
-token #13 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #14 PHP_SEMICOLON ;
-token #15 WHITESPACE \n\n
-token #16 PHP_VARIABLE $x
-token #17 WHITESPACE  
-token #18 PHP_OPERATOR =
-token #19 WHITESPACE  
-token #20 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #21 PHP_CONSTANT_ENCAPSED_STRING This is another heredoc test.
-token #22 PHP_CONSTANT_ENCAPSED_STRING \n
-token #23 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #24 PHP_SEMICOLON ;
-token #25 WHITESPACE \n\n
-token #26 PHP_PRINT print
-token #27 WHITESPACE  
-token #28 PHP_CONSTANT_ENCAPSED_STRING "
-token #29 PHP_CURLY_OPEN {
-token #30 PHP_VARIABLE $x
-token #31 PHP_CURLY_CLOSE }
-token #32 PHP_CONSTANT_ENCAPSED_STRING "
-token #33 PHP_SEMICOLON ;
-token #34 WHITESPACE \n\n
-token #35 PHP_CLOSETAG ?>
-token #36 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n
+token #13 PHP_CONSTANT_ENCAPSED_STRING \n
+token #14 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #15 PHP_SEMICOLON ;
+token #16 WHITESPACE \n\n
+token #17 PHP_VARIABLE $x
+token #18 WHITESPACE  
+token #19 PHP_OPERATOR =
+token #20 WHITESPACE  
+token #21 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #22 PHP_CONSTANT_ENCAPSED_STRING This is another heredoc test.
+token #23 PHP_CONSTANT_ENCAPSED_STRING \n
+token #24 PHP_CONSTANT_ENCAPSED_STRING \n
+token #25 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #26 PHP_SEMICOLON ;
+token #27 WHITESPACE \n\n
+token #28 PHP_PRINT print
+token #29 WHITESPACE  
+token #30 PHP_CONSTANT_ENCAPSED_STRING "
+token #31 PHP_CURLY_OPEN {
+token #32 PHP_VARIABLE $x
+token #33 PHP_CURLY_CLOSE }
+token #34 PHP_CONSTANT_ENCAPSED_STRING "
+token #35 PHP_SEMICOLON ;
+token #36 WHITESPACE \n\n
+token #37 PHP_CLOSETAG ?>
+token #38 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass
index 053dc1e31a..f0be6a81f8 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_002.pass
@@ -11,27 +11,29 @@ token #9 WHITESPACE
 token #10 PHP_HEREDOC_TAG_START b<<<ENDOFHEREDOC\n
 token #11 PHP_CONSTANT_ENCAPSED_STRING This is a heredoc test.
 token #12 PHP_CONSTANT_ENCAPSED_STRING \n
-token #13 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #14 PHP_SEMICOLON ;
-token #15 WHITESPACE \n\n
-token #16 PHP_VARIABLE $x
-token #17 WHITESPACE  
-token #18 PHP_OPERATOR =
-token #19 WHITESPACE  
-token #20 PHP_HEREDOC_TAG_START b<<<ENDOFHEREDOC\n
-token #21 PHP_CONSTANT_ENCAPSED_STRING This is another heredoc test.
-token #22 PHP_CONSTANT_ENCAPSED_STRING \n
-token #23 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #24 PHP_SEMICOLON ;
-token #25 WHITESPACE \n\n
-token #26 PHP_PRINT print
-token #27 WHITESPACE  
-token #28 PHP_CONSTANT_ENCAPSED_STRING "
-token #29 PHP_CURLY_OPEN {
-token #30 PHP_VARIABLE $x
-token #31 PHP_CURLY_CLOSE }
-token #32 PHP_CONSTANT_ENCAPSED_STRING "
-token #33 PHP_SEMICOLON ;
-token #34 WHITESPACE \n\n
-token #35 PHP_CLOSETAG ?>
-token #36 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n
+token #13 PHP_CONSTANT_ENCAPSED_STRING \n
+token #14 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #15 PHP_SEMICOLON ;
+token #16 WHITESPACE \n\n
+token #17 PHP_VARIABLE $x
+token #18 WHITESPACE  
+token #19 PHP_OPERATOR =
+token #20 WHITESPACE  
+token #21 PHP_HEREDOC_TAG_START b<<<ENDOFHEREDOC\n
+token #22 PHP_CONSTANT_ENCAPSED_STRING This is another heredoc test.
+token #23 PHP_CONSTANT_ENCAPSED_STRING \n
+token #24 PHP_CONSTANT_ENCAPSED_STRING \n
+token #25 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #26 PHP_SEMICOLON ;
+token #27 WHITESPACE \n\n
+token #28 PHP_PRINT print
+token #29 WHITESPACE  
+token #30 PHP_CONSTANT_ENCAPSED_STRING "
+token #31 PHP_CURLY_OPEN {
+token #32 PHP_VARIABLE $x
+token #33 PHP_CURLY_CLOSE }
+token #34 PHP_CONSTANT_ENCAPSED_STRING "
+token #35 PHP_SEMICOLON ;
+token #36 WHITESPACE \n\n
+token #37 PHP_CLOSETAG ?>
+token #38 T_INLINE_HTML \n--EXPECT--\nThis is a heredoc test.\nThis is another heredoc test.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass
index b1628b726a..240dac5179 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_003.pass
@@ -13,29 +13,31 @@ token #11 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #
 token #12 PHP_VARIABLE $a
 token #13 PHP_CONSTANT_ENCAPSED_STRING .
 token #14 PHP_CONSTANT_ENCAPSED_STRING \n
-token #15 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #16 PHP_SEMICOLON ;
-token #17 WHITESPACE \n\n
-token #18 PHP_VARIABLE $x
-token #19 WHITESPACE  
-token #20 PHP_OPERATOR =
-token #21 WHITESPACE  
-token #22 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #23 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #
-token #24 PHP_VARIABLE $b
-token #25 PHP_CONSTANT_ENCAPSED_STRING .
-token #26 PHP_CONSTANT_ENCAPSED_STRING \n
-token #27 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #28 PHP_SEMICOLON ;
-token #29 WHITESPACE \n\n
-token #30 PHP_PRINT print
-token #31 WHITESPACE  
-token #32 PHP_CONSTANT_ENCAPSED_STRING "
-token #33 PHP_CURLY_OPEN {
-token #34 PHP_VARIABLE $x
-token #35 PHP_CURLY_CLOSE }
-token #36 PHP_CONSTANT_ENCAPSED_STRING "
-token #37 PHP_SEMICOLON ;
-token #38 WHITESPACE \n\n
-token #39 PHP_CLOSETAG ?>
-token #40 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n
+token #15 PHP_CONSTANT_ENCAPSED_STRING \n
+token #16 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #17 PHP_SEMICOLON ;
+token #18 WHITESPACE \n\n
+token #19 PHP_VARIABLE $x
+token #20 WHITESPACE  
+token #21 PHP_OPERATOR =
+token #22 WHITESPACE  
+token #23 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #24 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #
+token #25 PHP_VARIABLE $b
+token #26 PHP_CONSTANT_ENCAPSED_STRING .
+token #27 PHP_CONSTANT_ENCAPSED_STRING \n
+token #28 PHP_CONSTANT_ENCAPSED_STRING \n
+token #29 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #30 PHP_SEMICOLON ;
+token #31 WHITESPACE \n\n
+token #32 PHP_PRINT print
+token #33 WHITESPACE  
+token #34 PHP_CONSTANT_ENCAPSED_STRING "
+token #35 PHP_CURLY_OPEN {
+token #36 PHP_VARIABLE $x
+token #37 PHP_CURLY_CLOSE }
+token #38 PHP_CONSTANT_ENCAPSED_STRING "
+token #39 PHP_SEMICOLON ;
+token #40 WHITESPACE \n\n
+token #41 PHP_CLOSETAG ?>
+token #42 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass
index ad286346ae..206f62e699 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_004.pass
@@ -15,31 +15,33 @@ token #13 PHP_VARIABLE $a
 token #14 PHP_CURLY_CLOSE }
 token #15 PHP_CONSTANT_ENCAPSED_STRING .
 token #16 PHP_CONSTANT_ENCAPSED_STRING \n
-token #17 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #18 PHP_SEMICOLON ;
-token #19 WHITESPACE \n\n
-token #20 PHP_VARIABLE $x
-token #21 WHITESPACE  
-token #22 PHP_OPERATOR =
-token #23 WHITESPACE  
-token #24 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #25 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #
-token #26 PHP_CURLY_OPEN {
-token #27 PHP_VARIABLE $b
-token #28 PHP_CURLY_CLOSE }
-token #29 PHP_CONSTANT_ENCAPSED_STRING .
-token #30 PHP_CONSTANT_ENCAPSED_STRING \n
-token #31 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #32 PHP_SEMICOLON ;
-token #33 WHITESPACE \n\n
-token #34 PHP_PRINT print
-token #35 WHITESPACE  
-token #36 PHP_CONSTANT_ENCAPSED_STRING "
-token #37 PHP_CURLY_OPEN {
-token #38 PHP_VARIABLE $x
-token #39 PHP_CURLY_CLOSE }
-token #40 PHP_CONSTANT_ENCAPSED_STRING "
-token #41 PHP_SEMICOLON ;
-token #42 WHITESPACE \n\n
-token #43 PHP_CLOSETAG ?>
-token #44 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n
+token #17 PHP_CONSTANT_ENCAPSED_STRING \n
+token #18 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #19 PHP_SEMICOLON ;
+token #20 WHITESPACE \n\n
+token #21 PHP_VARIABLE $x
+token #22 WHITESPACE  
+token #23 PHP_OPERATOR =
+token #24 WHITESPACE  
+token #25 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #26 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #
+token #27 PHP_CURLY_OPEN {
+token #28 PHP_VARIABLE $b
+token #29 PHP_CURLY_CLOSE }
+token #30 PHP_CONSTANT_ENCAPSED_STRING .
+token #31 PHP_CONSTANT_ENCAPSED_STRING \n
+token #32 PHP_CONSTANT_ENCAPSED_STRING \n
+token #33 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #34 PHP_SEMICOLON ;
+token #35 WHITESPACE \n\n
+token #36 PHP_PRINT print
+token #37 WHITESPACE  
+token #38 PHP_CONSTANT_ENCAPSED_STRING "
+token #39 PHP_CURLY_OPEN {
+token #40 PHP_VARIABLE $x
+token #41 PHP_CURLY_CLOSE }
+token #42 PHP_CONSTANT_ENCAPSED_STRING "
+token #43 PHP_SEMICOLON ;
+token #44 WHITESPACE \n\n
+token #45 PHP_CLOSETAG ?>
+token #46 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #1.\nThis is heredoc test #2.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass
index e597e6afd3..6145dd0b21 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_005.pass
@@ -22,38 +22,40 @@ token #20 PHP_OBJECT_OPERATOR ->
 token #21 PHP_STRING d
 token #22 PHP_CONSTANT_ENCAPSED_STRING .
 token #23 PHP_CONSTANT_ENCAPSED_STRING \n
-token #24 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #25 PHP_SEMICOLON ;
-token #26 WHITESPACE \n\n
-token #27 PHP_VARIABLE $x
-token #28 WHITESPACE  
-token #29 PHP_OPERATOR =
-token #30 WHITESPACE  
-token #31 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #32 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #s 
-token #33 PHP_VARIABLE $a
-token #34 PHP_ENCAPSED_AND_WHITESPACE , 
-token #35 PHP_VARIABLE $b
-token #36 PHP_ENCAPSED_AND_WHITESPACE , 
-token #37 PHP_VARIABLE $c
-token #38 PHP_TOKEN [
-token #39 PHP_ENCAPSED_AND_WHITESPACE 'c'], and 
-token #40 PHP_VARIABLE $d
-token #41 PHP_OBJECT_OPERATOR ->
-token #42 PHP_STRING d
-token #43 PHP_CONSTANT_ENCAPSED_STRING .
-token #44 PHP_CONSTANT_ENCAPSED_STRING \n
-token #45 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #46 PHP_SEMICOLON ;
-token #47 WHITESPACE \n\n
-token #48 PHP_PRINT print
-token #49 WHITESPACE  
-token #50 PHP_CONSTANT_ENCAPSED_STRING "
-token #51 PHP_CURLY_OPEN {
-token #52 PHP_VARIABLE $x
-token #53 PHP_CURLY_CLOSE }
-token #54 PHP_CONSTANT_ENCAPSED_STRING "
-token #55 PHP_SEMICOLON ;
-token #56 WHITESPACE \n\n
-token #57 PHP_CLOSETAG ?>
-token #58 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in %sheredoc_005.php on line 6\n
+token #24 PHP_CONSTANT_ENCAPSED_STRING \n
+token #25 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #26 PHP_SEMICOLON ;
+token #27 WHITESPACE \n\n
+token #28 PHP_VARIABLE $x
+token #29 WHITESPACE  
+token #30 PHP_OPERATOR =
+token #31 WHITESPACE  
+token #32 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #33 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #s 
+token #34 PHP_VARIABLE $a
+token #35 PHP_ENCAPSED_AND_WHITESPACE , 
+token #36 PHP_VARIABLE $b
+token #37 PHP_ENCAPSED_AND_WHITESPACE , 
+token #38 PHP_VARIABLE $c
+token #39 PHP_TOKEN [
+token #40 PHP_ENCAPSED_AND_WHITESPACE 'c'], and 
+token #41 PHP_VARIABLE $d
+token #42 PHP_OBJECT_OPERATOR ->
+token #43 PHP_STRING d
+token #44 PHP_CONSTANT_ENCAPSED_STRING .
+token #45 PHP_CONSTANT_ENCAPSED_STRING \n
+token #46 PHP_CONSTANT_ENCAPSED_STRING \n
+token #47 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #48 PHP_SEMICOLON ;
+token #49 WHITESPACE \n\n
+token #50 PHP_PRINT print
+token #51 WHITESPACE  
+token #52 PHP_CONSTANT_ENCAPSED_STRING "
+token #53 PHP_CURLY_OPEN {
+token #54 PHP_VARIABLE $x
+token #55 PHP_CURLY_CLOSE }
+token #56 PHP_CONSTANT_ENCAPSED_STRING "
+token #57 PHP_SEMICOLON ;
+token #58 WHITESPACE \n\n
+token #59 PHP_CLOSETAG ?>
+token #60 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in %sheredoc_005.php on line 6\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass
index 0b68f2837c..1fe5336c1b 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_006.pass
@@ -32,48 +32,50 @@ token #30 PHP_STRING d
 token #31 PHP_CURLY_CLOSE }
 token #32 PHP_CONSTANT_ENCAPSED_STRING .
 token #33 PHP_CONSTANT_ENCAPSED_STRING \n
-token #34 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #35 PHP_SEMICOLON ;
-token #36 WHITESPACE \n\n
-token #37 PHP_VARIABLE $x
-token #38 WHITESPACE  
-token #39 PHP_OPERATOR =
-token #40 WHITESPACE  
-token #41 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #42 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #s 
-token #43 PHP_CURLY_OPEN {
-token #44 PHP_VARIABLE $a
-token #45 PHP_CURLY_CLOSE }
-token #46 PHP_ENCAPSED_AND_WHITESPACE , 
-token #47 PHP_CURLY_OPEN {
-token #48 PHP_VARIABLE $b
-token #49 PHP_CURLY_CLOSE }
-token #50 PHP_ENCAPSED_AND_WHITESPACE , 
-token #51 PHP_CURLY_OPEN {
-token #52 PHP_VARIABLE $c
-token #53 PHP_TOKEN [
-token #54 PHP_CONSTANT_ENCAPSED_STRING 'c'
-token #55 PHP_TOKEN ]
-token #56 PHP_CURLY_CLOSE }
-token #57 PHP_ENCAPSED_AND_WHITESPACE , and 
-token #58 PHP_CURLY_OPEN {
-token #59 PHP_VARIABLE $d
-token #60 PHP_OBJECT_OPERATOR ->
-token #61 PHP_STRING d
-token #62 PHP_CURLY_CLOSE }
-token #63 PHP_CONSTANT_ENCAPSED_STRING .
-token #64 PHP_CONSTANT_ENCAPSED_STRING \n
-token #65 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #66 PHP_SEMICOLON ;
-token #67 WHITESPACE \n\n
-token #68 PHP_PRINT print
-token #69 WHITESPACE  
-token #70 PHP_CONSTANT_ENCAPSED_STRING "
-token #71 PHP_CURLY_OPEN {
-token #72 PHP_VARIABLE $x
-token #73 PHP_CURLY_CLOSE }
-token #74 PHP_CONSTANT_ENCAPSED_STRING "
-token #75 PHP_SEMICOLON ;
-token #76 WHITESPACE \n\n
-token #77 PHP_CLOSETAG ?>
-token #78 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n
+token #34 PHP_CONSTANT_ENCAPSED_STRING \n
+token #35 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #36 PHP_SEMICOLON ;
+token #37 WHITESPACE \n\n
+token #38 PHP_VARIABLE $x
+token #39 WHITESPACE  
+token #40 PHP_OPERATOR =
+token #41 WHITESPACE  
+token #42 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #43 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #s 
+token #44 PHP_CURLY_OPEN {
+token #45 PHP_VARIABLE $a
+token #46 PHP_CURLY_CLOSE }
+token #47 PHP_ENCAPSED_AND_WHITESPACE , 
+token #48 PHP_CURLY_OPEN {
+token #49 PHP_VARIABLE $b
+token #50 PHP_CURLY_CLOSE }
+token #51 PHP_ENCAPSED_AND_WHITESPACE , 
+token #52 PHP_CURLY_OPEN {
+token #53 PHP_VARIABLE $c
+token #54 PHP_TOKEN [
+token #55 PHP_CONSTANT_ENCAPSED_STRING 'c'
+token #56 PHP_TOKEN ]
+token #57 PHP_CURLY_CLOSE }
+token #58 PHP_ENCAPSED_AND_WHITESPACE , and 
+token #59 PHP_CURLY_OPEN {
+token #60 PHP_VARIABLE $d
+token #61 PHP_OBJECT_OPERATOR ->
+token #62 PHP_STRING d
+token #63 PHP_CURLY_CLOSE }
+token #64 PHP_CONSTANT_ENCAPSED_STRING .
+token #65 PHP_CONSTANT_ENCAPSED_STRING \n
+token #66 PHP_CONSTANT_ENCAPSED_STRING \n
+token #67 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #68 PHP_SEMICOLON ;
+token #69 WHITESPACE \n\n
+token #70 PHP_PRINT print
+token #71 WHITESPACE  
+token #72 PHP_CONSTANT_ENCAPSED_STRING "
+token #73 PHP_CURLY_OPEN {
+token #74 PHP_VARIABLE $x
+token #75 PHP_CURLY_CLOSE }
+token #76 PHP_CONSTANT_ENCAPSED_STRING "
+token #77 PHP_SEMICOLON ;
+token #78 WHITESPACE \n\n
+token #79 PHP_CLOSETAG ?>
+token #80 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass
index 58a8e918eb..49da0d4e56 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_007.pass
@@ -30,46 +30,48 @@ token #28 PHP_STRING d
 token #29 PHP_CURLY_CLOSE }
 token #30 PHP_CONSTANT_ENCAPSED_STRING .
 token #31 PHP_CONSTANT_ENCAPSED_STRING \n
-token #32 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #33 PHP_SEMICOLON ;
-token #34 WHITESPACE \n\n
-token #35 PHP_VARIABLE $x
-token #36 WHITESPACE  
-token #37 PHP_OPERATOR =
-token #38 WHITESPACE  
-token #39 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #40 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #s 
-token #41 PHP_VARIABLE $a
-token #42 PHP_ENCAPSED_AND_WHITESPACE , 
-token #43 PHP_CURLY_OPEN {
-token #44 PHP_VARIABLE $b
-token #45 PHP_CURLY_CLOSE }
-token #46 PHP_ENCAPSED_AND_WHITESPACE , 
-token #47 PHP_CURLY_OPEN {
-token #48 PHP_VARIABLE $c
-token #49 PHP_TOKEN [
-token #50 PHP_CONSTANT_ENCAPSED_STRING 'c'
-token #51 PHP_TOKEN ]
-token #52 PHP_CURLY_CLOSE }
-token #53 PHP_ENCAPSED_AND_WHITESPACE , and 
-token #54 PHP_CURLY_OPEN {
-token #55 PHP_VARIABLE $d
-token #56 PHP_OBJECT_OPERATOR ->
-token #57 PHP_STRING d
-token #58 PHP_CURLY_CLOSE }
-token #59 PHP_CONSTANT_ENCAPSED_STRING .
-token #60 PHP_CONSTANT_ENCAPSED_STRING \n
-token #61 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #62 PHP_SEMICOLON ;
-token #63 WHITESPACE \n\n
-token #64 PHP_PRINT print
-token #65 WHITESPACE  
-token #66 PHP_CONSTANT_ENCAPSED_STRING "
-token #67 PHP_CURLY_OPEN {
-token #68 PHP_VARIABLE $x
-token #69 PHP_CURLY_CLOSE }
-token #70 PHP_CONSTANT_ENCAPSED_STRING "
-token #71 PHP_SEMICOLON ;
-token #72 WHITESPACE \n\n
-token #73 PHP_CLOSETAG ?>
-token #74 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n
+token #32 PHP_CONSTANT_ENCAPSED_STRING \n
+token #33 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #34 PHP_SEMICOLON ;
+token #35 WHITESPACE \n\n
+token #36 PHP_VARIABLE $x
+token #37 WHITESPACE  
+token #38 PHP_OPERATOR =
+token #39 WHITESPACE  
+token #40 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #41 PHP_ENCAPSED_AND_WHITESPACE This is heredoc test #s 
+token #42 PHP_VARIABLE $a
+token #43 PHP_ENCAPSED_AND_WHITESPACE , 
+token #44 PHP_CURLY_OPEN {
+token #45 PHP_VARIABLE $b
+token #46 PHP_CURLY_CLOSE }
+token #47 PHP_ENCAPSED_AND_WHITESPACE , 
+token #48 PHP_CURLY_OPEN {
+token #49 PHP_VARIABLE $c
+token #50 PHP_TOKEN [
+token #51 PHP_CONSTANT_ENCAPSED_STRING 'c'
+token #52 PHP_TOKEN ]
+token #53 PHP_CURLY_CLOSE }
+token #54 PHP_ENCAPSED_AND_WHITESPACE , and 
+token #55 PHP_CURLY_OPEN {
+token #56 PHP_VARIABLE $d
+token #57 PHP_OBJECT_OPERATOR ->
+token #58 PHP_STRING d
+token #59 PHP_CURLY_CLOSE }
+token #60 PHP_CONSTANT_ENCAPSED_STRING .
+token #61 PHP_CONSTANT_ENCAPSED_STRING \n
+token #62 PHP_CONSTANT_ENCAPSED_STRING \n
+token #63 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #64 PHP_SEMICOLON ;
+token #65 WHITESPACE \n\n
+token #66 PHP_PRINT print
+token #67 WHITESPACE  
+token #68 PHP_CONSTANT_ENCAPSED_STRING "
+token #69 PHP_CURLY_OPEN {
+token #70 PHP_VARIABLE $x
+token #71 PHP_CURLY_CLOSE }
+token #72 PHP_CONSTANT_ENCAPSED_STRING "
+token #73 PHP_SEMICOLON ;
+token #74 WHITESPACE \n\n
+token #75 PHP_CLOSETAG ?>
+token #76 T_INLINE_HTML \n--EXPECT--\nThis is heredoc test #s 1, 2, 3, and 4.\nThis is heredoc test #s 1, 2, 3, and 4.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_009.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_009.pass
deleted file mode 100644
index 789919006c..0000000000
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_009.pass
+++ /dev/null
@@ -1,49 +0,0 @@
-token #0 T_INLINE_HTML --TEST--\nTorture the T_END_HEREDOC rules (heredoc)\n--FILE--\n
-token #1 PHP_OPENTAG <?php
-token #2 WHITESPACE \n\n
-token #3 PHP_REQUIRE_ONCE require_once
-token #4 WHITESPACE  
-token #5 PHP_CONSTANT_ENCAPSED_STRING 'nowdoc.inc'
-token #6 PHP_SEMICOLON ;
-token #7 WHITESPACE \n\n
-token #8 PHP_PRINT print
-token #9 WHITESPACE  
-token #10 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #11 PHP_CONSTANT_ENCAPSED_STRING ENDOFHEREDOC    ;
-token #12 PHP_CONSTANT_ENCAPSED_STRING \n    ENDOFHEREDOC;
-token #13 PHP_CONSTANT_ENCAPSED_STRING \nENDOFHEREDOC    
-token #14 PHP_CONSTANT_ENCAPSED_STRING \n    ENDOFHEREDOC
-token #15 PHP_ENCAPSED_AND_WHITESPACE \n
-token #16 PHP_VARIABLE $ENDOFHEREDOC
-token #17 PHP_CONSTANT_ENCAPSED_STRING ;
-token #18 PHP_CONSTANT_ENCAPSED_STRING \n
-token #19 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #20 PHP_SEMICOLON ;
-token #21 WHITESPACE \n\n
-token #22 PHP_VARIABLE $x
-token #23 WHITESPACE  
-token #24 PHP_OPERATOR =
-token #25 WHITESPACE  
-token #26 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #27 PHP_CONSTANT_ENCAPSED_STRING ENDOFHEREDOC    ;
-token #28 PHP_CONSTANT_ENCAPSED_STRING \n    ENDOFHEREDOC;
-token #29 PHP_CONSTANT_ENCAPSED_STRING \nENDOFHEREDOC    
-token #30 PHP_CONSTANT_ENCAPSED_STRING \n    ENDOFHEREDOC
-token #31 PHP_ENCAPSED_AND_WHITESPACE \n
-token #32 PHP_VARIABLE $ENDOFHEREDOC
-token #33 PHP_CONSTANT_ENCAPSED_STRING ;
-token #34 PHP_CONSTANT_ENCAPSED_STRING \n
-token #35 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #36 PHP_SEMICOLON ;
-token #37 WHITESPACE \n\n
-token #38 PHP_PRINT print
-token #39 WHITESPACE  
-token #40 PHP_CONSTANT_ENCAPSED_STRING "
-token #41 PHP_CURLY_OPEN {
-token #42 PHP_VARIABLE $x
-token #43 PHP_CURLY_CLOSE }
-token #44 PHP_CONSTANT_ENCAPSED_STRING "
-token #45 PHP_SEMICOLON ;
-token #46 WHITESPACE \n\n
-token #47 PHP_CLOSETAG ?>
-token #48 T_INLINE_HTML \n--EXPECTF--\nNotice: Undefined variable: ENDOFHEREDOC in %s on line %d\nENDOFHEREDOC    ;\n    ENDOFHEREDOC;\nENDOFHEREDOC    \n    ENDOFHEREDOC\n;\n\nNotice: Undefined variable: ENDOFHEREDOC in %s on line %d\nENDOFHEREDOC    ;\n    ENDOFHEREDOC;\nENDOFHEREDOC    \n    ENDOFHEREDOC\n;\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_010.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_010.pass
deleted file mode 100644
index 063b78bdef..0000000000
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_010.pass
+++ /dev/null
@@ -1,74 +0,0 @@
-token #0 T_INLINE_HTML --TEST--\nTorture the T_END_HEREDOC rules with variable expansions (heredoc)\n--FILE--\n
-token #1 PHP_OPENTAG <?php
-token #2 WHITESPACE \n\n
-token #3 PHP_REQUIRE_ONCE require_once
-token #4 WHITESPACE  
-token #5 PHP_CONSTANT_ENCAPSED_STRING 'nowdoc.inc'
-token #6 PHP_SEMICOLON ;
-token #7 WHITESPACE \n
-token #8 PHP_VARIABLE $fooledYou
-token #9 WHITESPACE  
-token #10 PHP_OPERATOR =
-token #11 WHITESPACE  
-token #12 PHP_CONSTANT_ENCAPSED_STRING ''
-token #13 PHP_SEMICOLON ;
-token #14 WHITESPACE \n\n
-token #15 PHP_PRINT print
-token #16 WHITESPACE  
-token #17 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #18 PHP_CURLY_OPEN {
-token #19 PHP_VARIABLE $fooledYou
-token #20 PHP_CURLY_CLOSE }
-token #21 PHP_ENCAPSED_AND_WHITESPACE ENDOFHEREDOC
-token #22 PHP_CURLY_OPEN {
-token #23 PHP_VARIABLE $fooledYou
-token #24 PHP_CURLY_CLOSE }
-token #25 PHP_ENCAPSED_AND_WHITESPACE \nENDOFHEREDOC
-token #26 PHP_CURLY_OPEN {
-token #27 PHP_VARIABLE $fooledYou
-token #28 PHP_CURLY_CLOSE }
-token #29 PHP_ENCAPSED_AND_WHITESPACE \n
-token #30 PHP_CURLY_OPEN {
-token #31 PHP_VARIABLE $fooledYou
-token #32 PHP_CURLY_CLOSE }
-token #33 PHP_CONSTANT_ENCAPSED_STRING ENDOFHEREDOC
-token #34 PHP_CONSTANT_ENCAPSED_STRING \n
-token #35 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #36 PHP_SEMICOLON ;
-token #37 WHITESPACE \n\n
-token #38 PHP_VARIABLE $x
-token #39 WHITESPACE  
-token #40 PHP_OPERATOR =
-token #41 WHITESPACE  
-token #42 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #43 PHP_CURLY_OPEN {
-token #44 PHP_VARIABLE $fooledYou
-token #45 PHP_CURLY_CLOSE }
-token #46 PHP_ENCAPSED_AND_WHITESPACE ENDOFHEREDOC
-token #47 PHP_CURLY_OPEN {
-token #48 PHP_VARIABLE $fooledYou
-token #49 PHP_CURLY_CLOSE }
-token #50 PHP_ENCAPSED_AND_WHITESPACE \nENDOFHEREDOC
-token #51 PHP_CURLY_OPEN {
-token #52 PHP_VARIABLE $fooledYou
-token #53 PHP_CURLY_CLOSE }
-token #54 PHP_ENCAPSED_AND_WHITESPACE \n
-token #55 PHP_CURLY_OPEN {
-token #56 PHP_VARIABLE $fooledYou
-token #57 PHP_CURLY_CLOSE }
-token #58 PHP_CONSTANT_ENCAPSED_STRING ENDOFHEREDOC
-token #59 PHP_CONSTANT_ENCAPSED_STRING \n
-token #60 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #61 PHP_SEMICOLON ;
-token #62 WHITESPACE \n\n
-token #63 PHP_PRINT print
-token #64 WHITESPACE  
-token #65 PHP_CONSTANT_ENCAPSED_STRING "
-token #66 PHP_CURLY_OPEN {
-token #67 PHP_VARIABLE $x
-token #68 PHP_CURLY_CLOSE }
-token #69 PHP_CONSTANT_ENCAPSED_STRING "
-token #70 PHP_SEMICOLON ;
-token #71 WHITESPACE \n\n
-token #72 PHP_CLOSETAG ?>
-token #73 T_INLINE_HTML \n--EXPECT--\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\nENDOFHEREDOC\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass
index 3a6c62bb53..e53094de1a 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_011.pass
@@ -20,22 +20,23 @@ token #18 PHP_OPERATOR =
 token #19 WHITESPACE  
 token #20 PHP_HEREDOC_TAG_START <<<THISMUSTNOTERROR\n
 token #21 PHP_CONSTANT_ENCAPSED_STRING If you see this, everything is ok.
-token #22 PHP_HEREDOC_TAG_END \nTHISMUSTNOTERROR
-token #23 PHP_SEMICOLON ;
-token #24 WHITESPACE \n\n
-token #25 PHP_CURLY_CLOSE }
-token #26 PHP_SEMICOLON ;
-token #27 WHITESPACE \n\n
-token #28 PHP_PRINT print
-token #29 WHITESPACE  
-token #30 PHP_STRING e
-token #31 PHP_PAAMAYIM_NEKUDOTAYIM ::
-token #32 PHP_STRING E
-token #33 WHITESPACE  
-token #34 PHP_TOKEN .
-token #35 WHITESPACE  
-token #36 PHP_CONSTANT_ENCAPSED_STRING "\n"
-token #37 PHP_SEMICOLON ;
-token #38 WHITESPACE \n\n
-token #39 PHP_CLOSETAG ?>
-token #40 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n
+token #22 PHP_CONSTANT_ENCAPSED_STRING \n
+token #23 PHP_HEREDOC_TAG_END THISMUSTNOTERROR
+token #24 PHP_SEMICOLON ;
+token #25 WHITESPACE \n\n
+token #26 PHP_CURLY_CLOSE }
+token #27 PHP_SEMICOLON ;
+token #28 WHITESPACE \n\n
+token #29 PHP_PRINT print
+token #30 WHITESPACE  
+token #31 PHP_STRING e
+token #32 PHP_PAAMAYIM_NEKUDOTAYIM ::
+token #33 PHP_STRING E
+token #34 WHITESPACE  
+token #35 PHP_TOKEN .
+token #36 WHITESPACE  
+token #37 PHP_CONSTANT_ENCAPSED_STRING "\n"
+token #38 PHP_SEMICOLON ;
+token #39 WHITESPACE \n\n
+token #40 PHP_CLOSETAG ?>
+token #41 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass
index e9143b1fa9..12f8ddd28f 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_012.pass
@@ -15,13 +15,14 @@ token #13 WHITESPACE
 token #14 PHP_HEREDOC_TAG_START <<<"MYLABEL"\n
 token #15 PHP_ENCAPSED_AND_WHITESPACE test: 
 token #16 PHP_VARIABLE $test
-token #17 PHP_HEREDOC_TAG_END \nMYLABEL
-token #18 PHP_SEMICOLON ;
-token #19 WHITESPACE \n
-token #20 PHP_ECHO echo
-token #21 WHITESPACE  
-token #22 PHP_VARIABLE $var
-token #23 PHP_SEMICOLON ;
-token #24 WHITESPACE \n
-token #25 PHP_CLOSETAG ?>
-token #26 T_INLINE_HTML \n--EXPECT--\ntest: foo\n
+token #17 PHP_CONSTANT_ENCAPSED_STRING \n
+token #18 PHP_HEREDOC_TAG_END MYLABEL
+token #19 PHP_SEMICOLON ;
+token #20 WHITESPACE \n
+token #21 PHP_ECHO echo
+token #22 WHITESPACE  
+token #23 PHP_VARIABLE $var
+token #24 PHP_SEMICOLON ;
+token #25 WHITESPACE \n
+token #26 PHP_CLOSETAG ?>
+token #27 T_INLINE_HTML \n--EXPECT--\ntest: foo\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass
index ba70c610a7..efed7eea29 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_013.pass
@@ -16,13 +16,14 @@ token #14 PHP_STRING prefix
 token #15 PHP_HEREDOC_TAG_START <<<"MYLABEL"\n
 token #16 PHP_ENCAPSED_AND_WHITESPACE test: 
 token #17 PHP_VARIABLE $test
-token #18 PHP_HEREDOC_TAG_END \nMYLABEL
-token #19 PHP_SEMICOLON ;
-token #20 WHITESPACE \n
-token #21 PHP_ECHO echo
-token #22 WHITESPACE  
-token #23 PHP_VARIABLE $var
-token #24 PHP_SEMICOLON ;
-token #25 WHITESPACE \n
-token #26 PHP_CLOSETAG ?>
-token #27 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_START_HEREDOC in %sheredoc_013.php on line %d\n
+token #18 PHP_CONSTANT_ENCAPSED_STRING \n
+token #19 PHP_HEREDOC_TAG_END MYLABEL
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n
+token #22 PHP_ECHO echo
+token #23 WHITESPACE  
+token #24 PHP_VARIABLE $var
+token #25 PHP_SEMICOLON ;
+token #26 WHITESPACE \n
+token #27 PHP_CLOSETAG ?>
+token #28 T_INLINE_HTML \n--EXPECTF--\nParse error: syntax error, unexpected T_START_HEREDOC in %sheredoc_013.php on line %d\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass
index cace7f7e10..3519aded35 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/heredoc_015.pass
@@ -15,33 +15,34 @@ token #13 PHP_OPERATOR =
 token #14 WHITESPACE  
 token #15 PHP_HEREDOC_TAG_START <<<THISMUSTNOTERROR\n
 token #16 PHP_CONSTANT_ENCAPSED_STRING If you see this, everything is ok.
-token #17 PHP_HEREDOC_TAG_END \nTHISMUSTNOTERROR
-token #18 PHP_SEMICOLON ;
-token #19 WHITESPACE \n\n
-token #20 PHP_CURLY_CLOSE }
-token #21 PHP_SEMICOLON ;
-token #22 WHITESPACE \n
-token #23 PHP_VARIABLE $e
-token #24 WHITESPACE  
-token #25 PHP_OPERATOR =
-token #26 WHITESPACE  
-token #27 PHP_NEW new
-token #28 WHITESPACE  
-token #29 PHP_STRING e
-token #30 PHP_TOKEN (
-token #31 PHP_TOKEN )
-token #32 PHP_SEMICOLON ;
-token #33 WHITESPACE \n
-token #34 PHP_PRINT print
-token #35 WHITESPACE  
-token #36 PHP_VARIABLE $e
-token #37 PHP_OBJECT_OPERATOR ->
-token #38 PHP_STRING e
-token #39 WHITESPACE  
-token #40 PHP_TOKEN .
-token #41 WHITESPACE  
-token #42 PHP_CONSTANT_ENCAPSED_STRING "\n"
-token #43 PHP_SEMICOLON ;
-token #44 WHITESPACE \n\n
-token #45 PHP_CLOSETAG ?>
-token #46 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n
+token #17 PHP_CONSTANT_ENCAPSED_STRING \n
+token #18 PHP_HEREDOC_TAG_END THISMUSTNOTERROR
+token #19 PHP_SEMICOLON ;
+token #20 WHITESPACE \n\n
+token #21 PHP_CURLY_CLOSE }
+token #22 PHP_SEMICOLON ;
+token #23 WHITESPACE \n
+token #24 PHP_VARIABLE $e
+token #25 WHITESPACE  
+token #26 PHP_OPERATOR =
+token #27 WHITESPACE  
+token #28 PHP_NEW new
+token #29 WHITESPACE  
+token #30 PHP_STRING e
+token #31 PHP_TOKEN (
+token #32 PHP_TOKEN )
+token #33 PHP_SEMICOLON ;
+token #34 WHITESPACE \n
+token #35 PHP_PRINT print
+token #36 WHITESPACE  
+token #37 PHP_VARIABLE $e
+token #38 PHP_OBJECT_OPERATOR ->
+token #39 PHP_STRING e
+token #40 WHITESPACE  
+token #41 PHP_TOKEN .
+token #42 WHITESPACE  
+token #43 PHP_CONSTANT_ENCAPSED_STRING "\n"
+token #44 PHP_SEMICOLON ;
+token #45 WHITESPACE \n\n
+token #46 PHP_CLOSETAG ?>
+token #47 T_INLINE_HTML \n--EXPECT--\nIf you see this, everything is ok.\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass
index bc1014db7b..5050ef76f8 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/issue225549.pass
@@ -10,7 +10,8 @@ token #8 PHP_CURLY_OPEN {
 token #9 PHP_VARIABLE $url
 token #10 PHP_CURLY_CLOSE }
 token #11 PHP_CONSTANT_ENCAPSED_STRING "</a>
-token #12 PHP_HEREDOC_TAG_END \nEOT
-token #13 PHP_SEMICOLON ;
-token #14 WHITESPACE \n
-token #15 PHP_CLOSETAG ?>\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING \n
+token #13 PHP_HEREDOC_TAG_END EOT
+token #14 PHP_SEMICOLON ;
+token #15 WHITESPACE \n
+token #16 PHP_CLOSETAG ?>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass
index dd33072f0d..4c00ed030e 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_008.pass
@@ -9,23 +9,25 @@ token #7 WHITESPACE \n\n
 token #8 PHP_PRINT print
 token #9 WHITESPACE  
 token #10 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #11 PHP_NOWDOC_TAG_END ENDOFNOWDOC;\n
-token #12 WHITESPACE \n
-token #13 PHP_VARIABLE $x
-token #14 WHITESPACE  
-token #15 PHP_OPERATOR =
-token #16 WHITESPACE  
-token #17 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #18 PHP_NOWDOC_TAG_END ENDOFNOWDOC;\n
-token #19 WHITESPACE \n
-token #20 PHP_PRINT print
-token #21 WHITESPACE  
-token #22 PHP_CONSTANT_ENCAPSED_STRING "
-token #23 PHP_CURLY_OPEN {
-token #24 PHP_VARIABLE $x
-token #25 PHP_CURLY_CLOSE }
-token #26 PHP_CONSTANT_ENCAPSED_STRING "
-token #27 PHP_SEMICOLON ;
-token #28 WHITESPACE \n\n
-token #29 PHP_CLOSETAG ?>
-token #30 T_INLINE_HTML \n--EXPECT--\n
+token #11 PHP_NOWDOC_TAG_END ENDOFNOWDOC
+token #12 PHP_SEMICOLON ;
+token #13 WHITESPACE \n\n
+token #14 PHP_VARIABLE $x
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
+token #19 PHP_NOWDOC_TAG_END ENDOFNOWDOC
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n\n
+token #22 PHP_PRINT print
+token #23 WHITESPACE  
+token #24 PHP_CONSTANT_ENCAPSED_STRING "
+token #25 PHP_CURLY_OPEN {
+token #26 PHP_VARIABLE $x
+token #27 PHP_CURLY_CLOSE }
+token #28 PHP_CONSTANT_ENCAPSED_STRING "
+token #29 PHP_SEMICOLON ;
+token #30 WHITESPACE \n\n
+token #31 PHP_CLOSETAG ?>
+token #32 T_INLINE_HTML \n--EXPECT--\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_009.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_009.pass
deleted file mode 100644
index 33106495c3..0000000000
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_009.pass
+++ /dev/null
@@ -1,35 +0,0 @@
-token #0 T_INLINE_HTML --TEST--\nTorture the T_END_NOWDOC rules (nowdoc)\n--FILE--\n
-token #1 PHP_OPENTAG <?php
-token #2 WHITESPACE \n\n
-token #3 PHP_REQUIRE_ONCE require_once
-token #4 WHITESPACE  
-token #5 PHP_CONSTANT_ENCAPSED_STRING 'nowdoc.inc'
-token #6 PHP_SEMICOLON ;
-token #7 WHITESPACE \n\n
-token #8 PHP_PRINT print
-token #9 WHITESPACE  
-token #10 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #11 PHP_CONSTANT_ENCAPSED_STRING ENDOFNOWDOC    ;\n    ENDOFNOWDOC;\nENDOFNOWDOC    \n    ENDOFNOWDOC\n$ENDOFNOWDOC;\n\n
-token #12 PHP_NOWDOC_TAG_END ENDOFNOWDOC
-token #13 PHP_SEMICOLON ;
-token #14 WHITESPACE \n\n
-token #15 PHP_VARIABLE $x
-token #16 WHITESPACE  
-token #17 PHP_OPERATOR =
-token #18 WHITESPACE  
-token #19 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #20 PHP_CONSTANT_ENCAPSED_STRING ENDOFNOWDOC    ;\n    ENDOFNOWDOC;\nENDOFNOWDOC    \n    ENDOFNOWDOC\n$ENDOFNOWDOC;\n\n
-token #21 PHP_NOWDOC_TAG_END ENDOFNOWDOC
-token #22 PHP_SEMICOLON ;
-token #23 WHITESPACE \n\n
-token #24 PHP_PRINT print
-token #25 WHITESPACE  
-token #26 PHP_CONSTANT_ENCAPSED_STRING "
-token #27 PHP_CURLY_OPEN {
-token #28 PHP_VARIABLE $x
-token #29 PHP_CURLY_CLOSE }
-token #30 PHP_CONSTANT_ENCAPSED_STRING "
-token #31 PHP_SEMICOLON ;
-token #32 WHITESPACE \n\n
-token #33 PHP_CLOSETAG ?>
-token #34 T_INLINE_HTML \n--EXPECT--\nENDOFNOWDOC    ;\n    ENDOFNOWDOC;\nENDOFNOWDOC    \n    ENDOFNOWDOC\n$ENDOFNOWDOC;\nENDOFNOWDOC    ;\n    ENDOFNOWDOC;\nENDOFNOWDOC    \n    ENDOFNOWDOC\n$ENDOFNOWDOC;\n\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_010.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_010.pass
deleted file mode 100644
index c9a51e05b1..0000000000
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_010.pass
+++ /dev/null
@@ -1,42 +0,0 @@
-token #0 T_INLINE_HTML --TEST--\nTorture the T_END_NOWDOC rules with variable expansions (nowdoc)\n--FILE--\n
-token #1 PHP_OPENTAG <?php
-token #2 WHITESPACE \n\n
-token #3 PHP_REQUIRE_ONCE require_once
-token #4 WHITESPACE  
-token #5 PHP_CONSTANT_ENCAPSED_STRING 'nowdoc.inc'
-token #6 PHP_SEMICOLON ;
-token #7 WHITESPACE \n
-token #8 PHP_VARIABLE $fooledYou
-token #9 WHITESPACE  
-token #10 PHP_OPERATOR =
-token #11 WHITESPACE  
-token #12 PHP_CONSTANT_ENCAPSED_STRING ''
-token #13 PHP_SEMICOLON ;
-token #14 WHITESPACE \n\n
-token #15 PHP_PRINT print
-token #16 WHITESPACE  
-token #17 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #18 PHP_CONSTANT_ENCAPSED_STRING {$fooledYou}ENDOFNOWDOC{$fooledYou}\nENDOFNOWDOC{$fooledYou}\n{$fooledYou}ENDOFNOWDOC\n\n
-token #19 PHP_NOWDOC_TAG_END ENDOFNOWDOC
-token #20 PHP_SEMICOLON ;
-token #21 WHITESPACE \n\n
-token #22 PHP_VARIABLE $x
-token #23 WHITESPACE  
-token #24 PHP_OPERATOR =
-token #25 WHITESPACE  
-token #26 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #27 PHP_CONSTANT_ENCAPSED_STRING {$fooledYou}ENDOFNOWDOC{$fooledYou}\nENDOFNOWDOC{$fooledYou}\n{$fooledYou}ENDOFNOWDOC\n\n
-token #28 PHP_NOWDOC_TAG_END ENDOFNOWDOC
-token #29 PHP_SEMICOLON ;
-token #30 WHITESPACE \n\n
-token #31 PHP_PRINT print
-token #32 WHITESPACE  
-token #33 PHP_CONSTANT_ENCAPSED_STRING "
-token #34 PHP_CURLY_OPEN {
-token #35 PHP_VARIABLE $x
-token #36 PHP_CURLY_CLOSE }
-token #37 PHP_CONSTANT_ENCAPSED_STRING "
-token #38 PHP_SEMICOLON ;
-token #39 WHITESPACE \n\n
-token #40 PHP_CLOSETAG ?>
-token #41 T_INLINE_HTML \n--EXPECT--\n{$fooledYou}ENDOFNOWDOC{$fooledYou}\nENDOFNOWDOC{$fooledYou}\n{$fooledYou}ENDOFNOWDOC\n{$fooledYou}ENDOFNOWDOC{$fooledYou}\nENDOFNOWDOC{$fooledYou}\n{$fooledYou}ENDOFNOWDOC\n\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass
index ba140f3403..e371334c97 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_012.pass
@@ -11,22 +11,19 @@ token #9 WHITESPACE
 token #10 PHP_OPERATOR =
 token #11 WHITESPACE  
 token #12 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
-token #13 PHP_CONSTANT_ENCAPSED_STRING This is a nowdoc test.\nNOTREALLYEND;
-token #14 PHP_CONSTANT_ENCAPSED_STRING \nAnother line\nNOTENDEITHER;
-token #15 PHP_CONSTANT_ENCAPSED_STRING \nENDOFNOWDOCWILLBESOON
-token #16 PHP_CONSTANT_ENCAPSED_STRING \nNow let's finish it\n
-token #17 PHP_NOWDOC_TAG_END ENDOFNOWDOC
-token #18 PHP_SEMICOLON ;
-token #19 WHITESPACE \n
-token #20 PHP_PRINT print
-token #21 WHITESPACE  
-token #22 PHP_CONSTANT_ENCAPSED_STRING "
-token #23 PHP_CURLY_OPEN {
-token #24 PHP_VARIABLE $x
-token #25 PHP_CURLY_CLOSE }
-token #26 PHP_ENCAPSED_AND_WHITESPACE \n
-token #27 PHP_CONSTANT_ENCAPSED_STRING "
-token #28 PHP_SEMICOLON ;
-token #29 WHITESPACE \n\n
-token #30 PHP_CLOSETAG ?>
-token #31 T_INLINE_HTML \n--EXPECT--\nThis is a nowdoc test.\nNOTREALLYEND;\nAnother line\nNOTENDEITHER;\nENDOFNOWDOCWILLBESOON\nNow let's finish it\n
+token #13 PHP_CONSTANT_ENCAPSED_STRING This is a nowdoc test.\nNOTREALLYEND;\nAnother line\nNOTENDEITHER;\nENDOFNOWDOCWILLBESOON\nNow let's finish it\n
+token #14 PHP_NOWDOC_TAG_END ENDOFNOWDOC
+token #15 PHP_SEMICOLON ;
+token #16 WHITESPACE \n
+token #17 PHP_PRINT print
+token #18 WHITESPACE  
+token #19 PHP_CONSTANT_ENCAPSED_STRING "
+token #20 PHP_CURLY_OPEN {
+token #21 PHP_VARIABLE $x
+token #22 PHP_CURLY_CLOSE }
+token #23 PHP_ENCAPSED_AND_WHITESPACE \n
+token #24 PHP_CONSTANT_ENCAPSED_STRING "
+token #25 PHP_SEMICOLON ;
+token #26 WHITESPACE \n\n
+token #27 PHP_CLOSETAG ?>
+token #28 T_INLINE_HTML \n--EXPECT--\nThis is a nowdoc test.\nNOTREALLYEND;\nAnother line\nNOTENDEITHER;\nENDOFNOWDOCWILLBESOON\nNow let's finish it\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass
index d51a90ccf3..07ef356e6a 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_013.pass
@@ -6,38 +6,37 @@ token #4 WHITESPACE
 token #5 PHP_OPERATOR =
 token #6 WHITESPACE  
 token #7 PHP_NOWDOC_TAG_START <<<'EOF'\n
-token #8 PHP_CONSTANT_ENCAPSED_STRING <?php\n  $x = <<<'EOT'\nsome string    \nEOT
-token #9 PHP_CONSTANT_ENCAPSED_STRING \n  $y = 2;\n?>\n
-token #10 PHP_NOWDOC_TAG_END EOF
-token #11 PHP_SEMICOLON ;
-token #12 WHITESPACE \n
-token #13 PHP_STRING highlight_string
-token #14 PHP_TOKEN (
-token #15 PHP_VARIABLE $code
-token #16 PHP_TOKEN )
-token #17 PHP_SEMICOLON ;
-token #18 WHITESPACE \n
-token #19 PHP_CLOSETAG ?>
-token #20 T_INLINE_HTML \n--EXPECT--\n
-token #21 T_INLINE_HTML <
-token #22 T_INLINE_HTML code>
-token #23 T_INLINE_HTML <
-token #24 T_INLINE_HTML span style="color: #000000">\n
-token #25 T_INLINE_HTML <
-token #26 T_INLINE_HTML span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;$x&nbsp;</span>
-token #27 T_INLINE_HTML <
-token #28 T_INLINE_HTML span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOT'<br /></span>
-token #29 T_INLINE_HTML <
-token #30 T_INLINE_HTML span style="color: #0000BB">some&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;<br /></span>
-token #31 T_INLINE_HTML <
-token #32 T_INLINE_HTML span style="color: #007700">EOT<br />&nbsp;&nbsp;</span>
-token #33 T_INLINE_HTML <
-token #34 T_INLINE_HTML span style="color: #0000BB">$y&nbsp;</span>
-token #35 T_INLINE_HTML <
-token #36 T_INLINE_HTML span style="color: #007700">=&nbsp;</span>
-token #37 T_INLINE_HTML <
-token #38 T_INLINE_HTML span style="color: #0000BB">2</span>
-token #39 T_INLINE_HTML <
-token #40 T_INLINE_HTML span style="color: #007700">;<br /></span>
-token #41 T_INLINE_HTML <
-token #42 T_INLINE_HTML span style="color: #0000BB">?&gt;</span>\n</span>\n</code>\n
+token #8 PHP_CONSTANT_ENCAPSED_STRING <?php\n  $x = <<<'EOT'\nsome string    \nEOT\n  $y = 2;\n?>\n
+token #9 PHP_NOWDOC_TAG_END EOF
+token #10 PHP_SEMICOLON ;
+token #11 WHITESPACE \n
+token #12 PHP_STRING highlight_string
+token #13 PHP_TOKEN (
+token #14 PHP_VARIABLE $code
+token #15 PHP_TOKEN )
+token #16 PHP_SEMICOLON ;
+token #17 WHITESPACE \n
+token #18 PHP_CLOSETAG ?>
+token #19 T_INLINE_HTML \n--EXPECT--\n
+token #20 T_INLINE_HTML <
+token #21 T_INLINE_HTML code>
+token #22 T_INLINE_HTML <
+token #23 T_INLINE_HTML span style="color: #000000">\n
+token #24 T_INLINE_HTML <
+token #25 T_INLINE_HTML span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;$x&nbsp;</span>
+token #26 T_INLINE_HTML <
+token #27 T_INLINE_HTML span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOT'<br /></span>
+token #28 T_INLINE_HTML <
+token #29 T_INLINE_HTML span style="color: #0000BB">some&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;<br /></span>
+token #30 T_INLINE_HTML <
+token #31 T_INLINE_HTML span style="color: #007700">EOT<br />&nbsp;&nbsp;</span>
+token #32 T_INLINE_HTML <
+token #33 T_INLINE_HTML span style="color: #0000BB">$y&nbsp;</span>
+token #34 T_INLINE_HTML <
+token #35 T_INLINE_HTML span style="color: #007700">=&nbsp;</span>
+token #36 T_INLINE_HTML <
+token #37 T_INLINE_HTML span style="color: #0000BB">2</span>
+token #38 T_INLINE_HTML <
+token #39 T_INLINE_HTML span style="color: #007700">;<br /></span>
+token #40 T_INLINE_HTML <
+token #41 T_INLINE_HTML span style="color: #0000BB">?&gt;</span>\n</span>\n</code>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass
index 5d556ff0ad..4451ee65ff 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_014.pass
@@ -6,38 +6,37 @@ token #4 WHITESPACE
 token #5 PHP_OPERATOR =
 token #6 WHITESPACE  
 token #7 PHP_NOWDOC_TAG_START <<<'EOF'\n
-token #8 PHP_CONSTANT_ENCAPSED_STRING <?php\n  $x = <<<'EOT'\nEOT
-token #9 PHP_CONSTANT_ENCAPSED_STRING \n  $y = 2;\n?>\n
-token #10 PHP_NOWDOC_TAG_END EOF
-token #11 PHP_SEMICOLON ;
-token #12 WHITESPACE \n
-token #13 PHP_STRING highlight_string
-token #14 PHP_TOKEN (
-token #15 PHP_VARIABLE $code
-token #16 PHP_TOKEN )
-token #17 PHP_SEMICOLON ;
-token #18 WHITESPACE \n
-token #19 PHP_CLOSETAG ?>
-token #20 T_INLINE_HTML \n--EXPECT--\n
-token #21 T_INLINE_HTML <
-token #22 T_INLINE_HTML code>
-token #23 T_INLINE_HTML <
-token #24 T_INLINE_HTML span style="color: #000000">\n
-token #25 T_INLINE_HTML <
-token #26 T_INLINE_HTML span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;$x&nbsp;</span>
-token #27 T_INLINE_HTML <
-token #28 T_INLINE_HTML span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOT'<br /></span>
-token #29 T_INLINE_HTML <
-token #30 T_INLINE_HTML span style="color: #0000BB"></span>
-token #31 T_INLINE_HTML <
-token #32 T_INLINE_HTML span style="color: #007700">EOT<br />&nbsp;&nbsp;</span>
-token #33 T_INLINE_HTML <
-token #34 T_INLINE_HTML span style="color: #0000BB">$y&nbsp;</span>
-token #35 T_INLINE_HTML <
-token #36 T_INLINE_HTML span style="color: #007700">=&nbsp;</span>
-token #37 T_INLINE_HTML <
-token #38 T_INLINE_HTML span style="color: #0000BB">2</span>
-token #39 T_INLINE_HTML <
-token #40 T_INLINE_HTML span style="color: #007700">;<br /></span>
-token #41 T_INLINE_HTML <
-token #42 T_INLINE_HTML span style="color: #0000BB">?&gt;</span>\n</span>\n</code>\n
+token #8 PHP_CONSTANT_ENCAPSED_STRING <?php\n  $x = <<<'EOT'\nEOT\n  $y = 2;\n?>\n
+token #9 PHP_NOWDOC_TAG_END EOF
+token #10 PHP_SEMICOLON ;
+token #11 WHITESPACE \n
+token #12 PHP_STRING highlight_string
+token #13 PHP_TOKEN (
+token #14 PHP_VARIABLE $code
+token #15 PHP_TOKEN )
+token #16 PHP_SEMICOLON ;
+token #17 WHITESPACE \n
+token #18 PHP_CLOSETAG ?>
+token #19 T_INLINE_HTML \n--EXPECT--\n
+token #20 T_INLINE_HTML <
+token #21 T_INLINE_HTML code>
+token #22 T_INLINE_HTML <
+token #23 T_INLINE_HTML span style="color: #000000">\n
+token #24 T_INLINE_HTML <
+token #25 T_INLINE_HTML span style="color: #0000BB">&lt;?php<br />&nbsp;&nbsp;$x&nbsp;</span>
+token #26 T_INLINE_HTML <
+token #27 T_INLINE_HTML span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOT'<br /></span>
+token #28 T_INLINE_HTML <
+token #29 T_INLINE_HTML span style="color: #0000BB"></span>
+token #30 T_INLINE_HTML <
+token #31 T_INLINE_HTML span style="color: #007700">EOT<br />&nbsp;&nbsp;</span>
+token #32 T_INLINE_HTML <
+token #33 T_INLINE_HTML span style="color: #0000BB">$y&nbsp;</span>
+token #34 T_INLINE_HTML <
+token #35 T_INLINE_HTML span style="color: #007700">=&nbsp;</span>
+token #36 T_INLINE_HTML <
+token #37 T_INLINE_HTML span style="color: #0000BB">2</span>
+token #38 T_INLINE_HTML <
+token #39 T_INLINE_HTML span style="color: #007700">;<br /></span>
+token #40 T_INLINE_HTML <
+token #41 T_INLINE_HTML span style="color: #0000BB">?&gt;</span>\n</span>\n</code>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass
index b9b1654463..2c29bfb82f 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest/lexer/nowdoc_015.pass
@@ -74,128 +74,131 @@ token #72 WHITESPACE
 token #73 PHP_OPERATOR =
 token #74 WHITESPACE  
 token #75 PHP_NOWDOC_TAG_START <<<'EOF'\n
-token #76 PHP_NOWDOC_TAG_END EOF;\n
-token #77 PHP_STRING var_dump
-token #78 PHP_TOKEN (
-token #79 PHP_VARIABLE $x
-token #80 PHP_TOKEN )
-token #81 PHP_SEMICOLON ;
-token #82 WHITESPACE \n
-token #83 PHP_STRING trigger_error
-token #84 PHP_TOKEN (
-token #85 PHP_CONSTANT_ENCAPSED_STRING "line"
-token #86 PHP_TOKEN ,
-token #87 WHITESPACE  
-token #88 PHP_STRING E_USER_ERROR
-token #89 PHP_TOKEN )
-token #90 PHP_SEMICOLON ;
-token #91 WHITESPACE \n
-token #92 PHP_VARIABLE $x
-token #93 WHITESPACE  
-token #94 PHP_OPERATOR =
+token #76 PHP_NOWDOC_TAG_END EOF
+token #77 PHP_SEMICOLON ;
+token #78 WHITESPACE \n
+token #79 PHP_STRING var_dump
+token #80 PHP_TOKEN (
+token #81 PHP_VARIABLE $x
+token #82 PHP_TOKEN )
+token #83 PHP_SEMICOLON ;
+token #84 WHITESPACE \n
+token #85 PHP_STRING trigger_error
+token #86 PHP_TOKEN (
+token #87 PHP_CONSTANT_ENCAPSED_STRING "line"
+token #88 PHP_TOKEN ,
+token #89 WHITESPACE  
+token #90 PHP_STRING E_USER_ERROR
+token #91 PHP_TOKEN )
+token #92 PHP_SEMICOLON ;
+token #93 WHITESPACE \n
+token #94 PHP_VARIABLE $x
 token #95 WHITESPACE  
-token #96 PHP_HEREDOC_TAG_START <<<EOF\n
-token #97 PHP_CONSTANT_ENCAPSED_STRING test
-token #98 PHP_HEREDOC_TAG_END \nEOF
-token #99 PHP_SEMICOLON ;
-token #100 WHITESPACE \n
-token #101 PHP_STRING var_dump
-token #102 PHP_TOKEN (
-token #103 PHP_VARIABLE $x
-token #104 PHP_TOKEN )
-token #105 PHP_SEMICOLON ;
-token #106 WHITESPACE \n
-token #107 PHP_STRING trigger_error
-token #108 PHP_TOKEN (
-token #109 PHP_CONSTANT_ENCAPSED_STRING "line"
-token #110 PHP_TOKEN ,
-token #111 WHITESPACE  
-token #112 PHP_STRING E_USER_ERROR
-token #113 PHP_TOKEN )
-token #114 PHP_SEMICOLON ;
-token #115 WHITESPACE \n
-token #116 PHP_VARIABLE $x
-token #117 WHITESPACE  
-token #118 PHP_OPERATOR =
-token #119 WHITESPACE  
-token #120 PHP_NOWDOC_TAG_START <<<'EOF'\n
-token #121 PHP_CONSTANT_ENCAPSED_STRING test\n
-token #122 PHP_NOWDOC_TAG_END EOF;\n
-token #123 PHP_STRING var_dump
-token #124 PHP_TOKEN (
-token #125 PHP_VARIABLE $x
-token #126 PHP_TOKEN )
-token #127 PHP_SEMICOLON ;
-token #128 WHITESPACE \n
-token #129 PHP_STRING trigger_error
-token #130 PHP_TOKEN (
-token #131 PHP_CONSTANT_ENCAPSED_STRING "line"
-token #132 PHP_TOKEN ,
-token #133 WHITESPACE  
-token #134 PHP_STRING E_USER_ERROR
-token #135 PHP_TOKEN )
-token #136 PHP_SEMICOLON ;
-token #137 WHITESPACE \n
-token #138 PHP_VARIABLE $x
-token #139 WHITESPACE  
-token #140 PHP_OPERATOR =
-token #141 WHITESPACE  
-token #142 PHP_HEREDOC_TAG_START <<<EOF\n
-token #143 PHP_CONSTANT_ENCAPSED_STRING test1
-token #144 PHP_CONSTANT_ENCAPSED_STRING \ntest2
-token #145 PHP_CONSTANT_ENCAPSED_STRING \n
-token #146 PHP_CONSTANT_ENCAPSED_STRING \ntest3
-token #147 PHP_CONSTANT_ENCAPSED_STRING \n
-token #148 PHP_CONSTANT_ENCAPSED_STRING \n
-token #149 PHP_HEREDOC_TAG_END \nEOF
-token #150 PHP_SEMICOLON ;
-token #151 WHITESPACE \n
-token #152 PHP_STRING var_dump
-token #153 PHP_TOKEN (
-token #154 PHP_VARIABLE $x
-token #155 PHP_TOKEN )
+token #96 PHP_OPERATOR =
+token #97 WHITESPACE  
+token #98 PHP_HEREDOC_TAG_START <<<EOF\n
+token #99 PHP_CONSTANT_ENCAPSED_STRING test
+token #100 PHP_CONSTANT_ENCAPSED_STRING \n
+token #101 PHP_HEREDOC_TAG_END EOF
+token #102 PHP_SEMICOLON ;
+token #103 WHITESPACE \n
+token #104 PHP_STRING var_dump
+token #105 PHP_TOKEN (
+token #106 PHP_VARIABLE $x
+token #107 PHP_TOKEN )
+token #108 PHP_SEMICOLON ;
+token #109 WHITESPACE \n
+token #110 PHP_STRING trigger_error
+token #111 PHP_TOKEN (
+token #112 PHP_CONSTANT_ENCAPSED_STRING "line"
+token #113 PHP_TOKEN ,
+token #114 WHITESPACE  
+token #115 PHP_STRING E_USER_ERROR
+token #116 PHP_TOKEN )
+token #117 PHP_SEMICOLON ;
+token #118 WHITESPACE \n
+token #119 PHP_VARIABLE $x
+token #120 WHITESPACE  
+token #121 PHP_OPERATOR =
+token #122 WHITESPACE  
+token #123 PHP_NOWDOC_TAG_START <<<'EOF'\n
+token #124 PHP_CONSTANT_ENCAPSED_STRING test\n
+token #125 PHP_NOWDOC_TAG_END EOF
+token #126 PHP_SEMICOLON ;
+token #127 WHITESPACE \n
+token #128 PHP_STRING var_dump
+token #129 PHP_TOKEN (
+token #130 PHP_VARIABLE $x
+token #131 PHP_TOKEN )
+token #132 PHP_SEMICOLON ;
+token #133 WHITESPACE \n
+token #134 PHP_STRING trigger_error
+token #135 PHP_TOKEN (
+token #136 PHP_CONSTANT_ENCAPSED_STRING "line"
+token #137 PHP_TOKEN ,
+token #138 WHITESPACE  
+token #139 PHP_STRING E_USER_ERROR
+token #140 PHP_TOKEN )
+token #141 PHP_SEMICOLON ;
+token #142 WHITESPACE \n
+token #143 PHP_VARIABLE $x
+token #144 WHITESPACE  
+token #145 PHP_OPERATOR =
+token #146 WHITESPACE  
+token #147 PHP_HEREDOC_TAG_START <<<EOF\n
+token #148 PHP_CONSTANT_ENCAPSED_STRING test1
+token #149 PHP_CONSTANT_ENCAPSED_STRING \ntest2
+token #150 PHP_CONSTANT_ENCAPSED_STRING \n
+token #151 PHP_CONSTANT_ENCAPSED_STRING \ntest3
+token #152 PHP_CONSTANT_ENCAPSED_STRING \n
+token #153 PHP_CONSTANT_ENCAPSED_STRING \n
+token #154 PHP_CONSTANT_ENCAPSED_STRING \n
+token #155 PHP_HEREDOC_TAG_END EOF
 token #156 PHP_SEMICOLON ;
 token #157 WHITESPACE \n
-token #158 PHP_STRING trigger_error
+token #158 PHP_STRING var_dump
 token #159 PHP_TOKEN (
-token #160 PHP_CONSTANT_ENCAPSED_STRING "line"
-token #161 PHP_TOKEN ,
-token #162 WHITESPACE  
-token #163 PHP_STRING E_USER_ERROR
-token #164 PHP_TOKEN )
-token #165 PHP_SEMICOLON ;
-token #166 WHITESPACE \n
-token #167 PHP_VARIABLE $x
+token #160 PHP_VARIABLE $x
+token #161 PHP_TOKEN )
+token #162 PHP_SEMICOLON ;
+token #163 WHITESPACE \n
+token #164 PHP_STRING trigger_error
+token #165 PHP_TOKEN (
+token #166 PHP_CONSTANT_ENCAPSED_STRING "line"
+token #167 PHP_TOKEN ,
 token #168 WHITESPACE  
-token #169 PHP_OPERATOR =
-token #170 WHITESPACE  
-token #171 PHP_NOWDOC_TAG_START <<<'EOF'\n
-token #172 PHP_CONSTANT_ENCAPSED_STRING test1\n
-token #173 PHP_CONSTANT_ENCAPSED_STRING test2\n
-token #174 PHP_CONSTANT_ENCAPSED_STRING \ntest3
-token #175 PHP_CONSTANT_ENCAPSED_STRING \n\n\n
-token #176 PHP_NOWDOC_TAG_END EOF
-token #177 PHP_SEMICOLON ;
-token #178 WHITESPACE \n
-token #179 PHP_STRING var_dump
-token #180 PHP_TOKEN (
-token #181 PHP_VARIABLE $x
-token #182 PHP_TOKEN )
-token #183 PHP_SEMICOLON ;
-token #184 WHITESPACE \n
-token #185 PHP_STRING trigger_error
-token #186 PHP_TOKEN (
-token #187 PHP_CONSTANT_ENCAPSED_STRING "line"
-token #188 PHP_TOKEN ,
-token #189 WHITESPACE  
-token #190 PHP_STRING E_USER_ERROR
-token #191 PHP_TOKEN )
-token #192 PHP_SEMICOLON ;
-token #193 WHITESPACE \n
-token #194 PHP_ECHO echo
-token #195 WHITESPACE  
-token #196 PHP_CONSTANT_ENCAPSED_STRING "ok\n"
-token #197 PHP_SEMICOLON ;
-token #198 WHITESPACE \n
-token #199 PHP_CLOSETAG ?>
-token #200 T_INLINE_HTML \n--EXPECT--\n6\nstring(0) ""\n10\nstring(0) ""\n14\nstring(4) "test"\n19\nstring(4) "test"\n24\nstring(20) "test1\ntest2\n\ntest3\n\n"\n34\nstring(20) "test1\ntest2\n\ntest3\n\n"\n44\nok\n
+token #169 PHP_STRING E_USER_ERROR
+token #170 PHP_TOKEN )
+token #171 PHP_SEMICOLON ;
+token #172 WHITESPACE \n
+token #173 PHP_VARIABLE $x
+token #174 WHITESPACE  
+token #175 PHP_OPERATOR =
+token #176 WHITESPACE  
+token #177 PHP_NOWDOC_TAG_START <<<'EOF'\n
+token #178 PHP_CONSTANT_ENCAPSED_STRING test1\ntest2\n\ntest3\n\n\n
+token #179 PHP_NOWDOC_TAG_END EOF
+token #180 PHP_SEMICOLON ;
+token #181 WHITESPACE \n
+token #182 PHP_STRING var_dump
+token #183 PHP_TOKEN (
+token #184 PHP_VARIABLE $x
+token #185 PHP_TOKEN )
+token #186 PHP_SEMICOLON ;
+token #187 WHITESPACE \n
+token #188 PHP_STRING trigger_error
+token #189 PHP_TOKEN (
+token #190 PHP_CONSTANT_ENCAPSED_STRING "line"
+token #191 PHP_TOKEN ,
+token #192 WHITESPACE  
+token #193 PHP_STRING E_USER_ERROR
+token #194 PHP_TOKEN )
+token #195 PHP_SEMICOLON ;
+token #196 WHITESPACE \n
+token #197 PHP_ECHO echo
+token #198 WHITESPACE  
+token #199 PHP_CONSTANT_ENCAPSED_STRING "ok\n"
+token #200 PHP_SEMICOLON ;
+token #201 WHITESPACE \n
+token #202 PHP_CLOSETAG ?>
+token #203 T_INLINE_HTML \n--EXPECT--\n6\nstring(0) ""\n10\nstring(0) ""\n14\nstring(4) "test"\n19\nstring(4) "test"\n24\nstring(20) "test1\ntest2\n\ntest3\n\n"\n34\nstring(20) "test1\ntest2\n\ntest3\n\n"\n44\nok\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_01.pass
new file mode 100644
index 0000000000..1a769b5fb5
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_01.pass
@@ -0,0 +1,26 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #19 PHP_CONSTANT_ENCAPSED_STRING     spaces indentation
+token #20 PHP_CONSTANT_ENCAPSED_STRING \n
+token #21 PHP_HEREDOC_TAG_END     HEREDOC
+token #22 PHP_SEMICOLON ;
+token #23 WHITESPACE \n
+token #24 PHP_CURLY_CLOSE }
+token #25 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_02.pass
new file mode 100644
index 0000000000..5b3779b5a0
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_02.pass
@@ -0,0 +1,24 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #19 PHP_HEREDOC_TAG_END     HEREDOC
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n
+token #22 PHP_CURLY_CLOSE }
+token #23 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_03.pass
new file mode 100644
index 0000000000..d4d4581d68
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_03.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 WHITESPACE  
+token #12 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #13 PHP_HEREDOC_TAG_END     HEREDOC
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_04.pass
new file mode 100644
index 0000000000..d4d4581d68
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_spaces_04.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 WHITESPACE  
+token #12 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #13 PHP_HEREDOC_TAG_END     HEREDOC
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_01.pass
new file mode 100644
index 0000000000..cbe437e31e
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_01.pass
@@ -0,0 +1,26 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #19 PHP_CONSTANT_ENCAPSED_STRING \ttab indentation
+token #20 PHP_CONSTANT_ENCAPSED_STRING \n
+token #21 PHP_HEREDOC_TAG_END \tHEREDOC
+token #22 PHP_SEMICOLON ;
+token #23 WHITESPACE \n
+token #24 PHP_CURLY_CLOSE }
+token #25 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_02.pass
new file mode 100644
index 0000000000..14f345c18d
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_02.pass
@@ -0,0 +1,24 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #19 PHP_HEREDOC_TAG_END \tHEREDOC
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n
+token #22 PHP_CURLY_CLOSE }
+token #23 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_03.pass
new file mode 100644
index 0000000000..d7421694c7
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_indent_tabs_03.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 WHITESPACE  
+token #12 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #13 PHP_HEREDOC_TAG_END \tHEREDOC
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_01.pass
new file mode 100644
index 0000000000..25aa5e9296
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_01.pass
@@ -0,0 +1,93 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_LINE_COMMENT //
+token #7 PHP_LINE_COMMENT  allow these in lexer but ParseError will be thrown\n
+token #8 PHP_VARIABLE $array
+token #9 WHITESPACE  
+token #10 PHP_OPERATOR =
+token #11 WHITESPACE  
+token #12 PHP_TOKEN [
+token #13 PHP_HEREDOC_TAG_START <<< END\n
+token #14 PHP_CONSTANT_ENCAPSED_STRING     spaces
+token #15 PHP_CONSTANT_ENCAPSED_STRING \n\ttabs
+token #16 PHP_CONSTANT_ENCAPSED_STRING \nnospaces
+token #17 PHP_CONSTANT_ENCAPSED_STRING \n        \tspaces tabs
+token #18 PHP_CONSTANT_ENCAPSED_STRING \n\t\t        tabs spaces
+token #19 PHP_CONSTANT_ENCAPSED_STRING \n
+token #20 PHP_HEREDOC_TAG_END END
+token #21 PHP_TOKEN ,
+token #22 WHITESPACE  
+token #23 PHP_VARIABLE $test
+token #24 PHP_TOKEN ]
+token #25 PHP_SEMICOLON ;
+token #26 WHITESPACE \n\n
+token #27 PHP_VARIABLE $array2
+token #28 WHITESPACE  
+token #29 PHP_OPERATOR =
+token #30 WHITESPACE  
+token #31 PHP_TOKEN [
+token #32 PHP_HEREDOC_TAG_START <<< END\n
+token #33 PHP_CONSTANT_ENCAPSED_STRING     spaces
+token #34 PHP_CONSTANT_ENCAPSED_STRING \n\ttabs
+token #35 PHP_CONSTANT_ENCAPSED_STRING \n        \tspaces tabs
+token #36 PHP_CONSTANT_ENCAPSED_STRING \n\t\t        tabs spaces
+token #37 PHP_CONSTANT_ENCAPSED_STRING \n
+token #38 PHP_HEREDOC_TAG_END     END
+token #39 PHP_TOKEN ,
+token #40 WHITESPACE  
+token #41 PHP_VARIABLE $test
+token #42 PHP_TOKEN [
+token #43 PHP_NUMBER 0
+token #44 PHP_TOKEN ]
+token #45 PHP_TOKEN ]
+token #46 PHP_SEMICOLON ;
+token #47 WHITESPACE \n\n
+token #48 PHP_VARIABLE $array3
+token #49 WHITESPACE  
+token #50 PHP_OPERATOR =
+token #51 WHITESPACE  
+token #52 PHP_TOKEN [
+token #53 PHP_HEREDOC_TAG_START <<< END\n
+token #54 PHP_ENCAPSED_AND_WHITESPACE     
+token #55 PHP_VARIABLE $test
+token #56 PHP_ENCAPSED_AND_WHITESPACE \n    spaces 
+token #57 PHP_VARIABLE $test
+token #58 PHP_ENCAPSED_AND_WHITESPACE \n\ttabs 
+token #59 PHP_CURLY_OPEN {
+token #60 PHP_VARIABLE $test
+token #61 PHP_CURLY_CLOSE }
+token #62 PHP_ENCAPSED_AND_WHITESPACE \n                spaces tabs 
+token #63 PHP_TOKEN ${
+token #64 PHP_STRING test
+token #65 PHP_CURLY_CLOSE }
+token #66 PHP_ENCAPSED_AND_WHITESPACE \n
+token #67 PHP_VARIABLE $test
+token #68 PHP_CONSTANT_ENCAPSED_STRING \n\t\t        tabs spaces
+token #69 PHP_CONSTANT_ENCAPSED_STRING \nnospaces test
+token #70 PHP_CONSTANT_ENCAPSED_STRING \n
+token #71 PHP_HEREDOC_TAG_END     END
+token #72 PHP_TOKEN ,
+token #73 WHITESPACE  
+token #74 PHP_TOKEN $
+token #75 PHP_CURLY_OPEN {
+token #76 PHP_STRING test
+token #77 PHP_CURLY_CLOSE }
+token #78 PHP_TOKEN ]
+token #79 PHP_SEMICOLON ;
+token #80 WHITESPACE \n\n
+token #81 PHP_VARIABLE $test
+token #82 WHITESPACE  
+token #83 PHP_OPERATOR =
+token #84 WHITESPACE  
+token #85 PHP_HEREDOC_TAG_START <<< END\n
+token #86 PHP_CONSTANT_ENCAPSED_STRING     \t    spaces tabs spaces
+token #87 PHP_CONSTANT_ENCAPSED_STRING \n
+token #88 PHP_HEREDOC_TAG_END         \tEND
+token #89 PHP_SEMICOLON ;
+token #90 WHITESPACE  
+token #91 PHP_LINE_COMMENT //
+token #92 PHP_LINE_COMMENT  spaces tabs\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_02.pass
new file mode 100644
index 0000000000..5f6217f42d
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_02.pass
@@ -0,0 +1,90 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $name
+token #7 PHP_OPERATOR =
+token #8 PHP_CONSTANT_ENCAPSED_STRING "Junichi"
+token #9 PHP_SEMICOLON ;
+token #10 WHITESPACE \n
+token #11 PHP_VARIABLE $age
+token #12 PHP_OPERATOR =
+token #13 PHP_NUMBER 100
+token #14 PHP_SEMICOLON ;
+token #15 WHITESPACE \n
+token #16 PHP_ECHO echo
+token #17 WHITESPACE  
+token #18 PHP_HEREDOC_TAG_START <<<HEREDOC\n
+token #19 PHP_ENCAPSED_AND_WHITESPACE Name: 
+token #20 PHP_VARIABLE $name
+token #21 PHP_CONSTANT_ENCAPSED_STRING <br>
+token #22 PHP_ENCAPSED_AND_WHITESPACE \nMy age is: 
+token #23 PHP_VARIABLE $age
+token #24 PHP_CONSTANT_ENCAPSED_STRING <br>
+token #25 PHP_CONSTANT_ENCAPSED_STRING \n
+token #26 PHP_HEREDOC_TAG_END HEREDOC
+token #27 PHP_SEMICOLON ;
+token #28 WHITESPACE \n
+token #29 PHP_VARIABLE $name
+token #30 PHP_OPERATOR =
+token #31 PHP_CONSTANT_ENCAPSED_STRING "Jun"
+token #32 PHP_SEMICOLON ;
+token #33 WHITESPACE \n\n
+token #34 PHP_LINE_COMMENT //
+token #35 PHP_LINE_COMMENT  defferent indentation for body(spaces) ending marker(tabs)\n
+token #36 PHP_LINE_COMMENT //
+token #37 PHP_LINE_COMMENT  allow this in the lexer but spaces and tabs MUST NOT be intermixed\n
+token #38 PHP_VARIABLE $x
+token #39 WHITESPACE  
+token #40 PHP_OPERATOR =
+token #41 WHITESPACE  
+token #42 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #43 PHP_CONSTANT_ENCAPSED_STRING     This is another heredoc test.
+token #44 PHP_ENCAPSED_AND_WHITESPACE \n    With another line in it. 
+token #45 PHP_CURLY_OPEN {
+token #46 PHP_VARIABLE $test
+token #47 PHP_CURLY_CLOSE }
+token #48 PHP_ENCAPSED_AND_WHITESPACE  
+token #49 PHP_VARIABLE $test
+token #50 PHP_ENCAPSED_AND_WHITESPACE  
+token #51 PHP_TOKEN ${
+token #52 PHP_STRING test
+token #53 PHP_CURLY_CLOSE }
+token #54 PHP_CONSTANT_ENCAPSED_STRING  variable test.
+token #55 PHP_ENCAPSED_AND_WHITESPACE \n    test. 
+token #56 PHP_VARIABLE $object
+token #57 PHP_OBJECT_OPERATOR ->
+token #58 PHP_STRING field
+token #59 PHP_CONSTANT_ENCAPSED_STRING \n
+token #60 PHP_HEREDOC_TAG_END \t\tENDOFHEREDOC
+token #61 PHP_SEMICOLON ;
+token #62 WHITESPACE \n\n
+token #63 PHP_LINE_COMMENT //
+token #64 PHP_LINE_COMMENT  body(tabs) ending marker(spaces)\n
+token #65 PHP_VARIABLE $y
+token #66 WHITESPACE  
+token #67 PHP_OPERATOR =
+token #68 WHITESPACE  
+token #69 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #70 PHP_CONSTANT_ENCAPSED_STRING \t\tThis is another heredoc test.
+token #71 PHP_ENCAPSED_AND_WHITESPACE \n\t\tWith another line in it. 
+token #72 PHP_CURLY_OPEN {
+token #73 PHP_VARIABLE $test
+token #74 PHP_CURLY_CLOSE }
+token #75 PHP_ENCAPSED_AND_WHITESPACE  
+token #76 PHP_VARIABLE $test
+token #77 PHP_ENCAPSED_AND_WHITESPACE  
+token #78 PHP_TOKEN ${
+token #79 PHP_STRING test
+token #80 PHP_CURLY_CLOSE }
+token #81 PHP_CONSTANT_ENCAPSED_STRING  variable test.
+token #82 PHP_ENCAPSED_AND_WHITESPACE \n\t\ttest. 
+token #83 PHP_VARIABLE $object
+token #84 PHP_OBJECT_OPERATOR ->
+token #85 PHP_STRING field
+token #86 PHP_CONSTANT_ENCAPSED_STRING \n
+token #87 PHP_HEREDOC_TAG_END     ENDOFHEREDOC
+token #88 PHP_SEMICOLON ;
+token #89 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_03.pass
new file mode 100644
index 0000000000..54676cfe9f
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_mixed_03.pass
@@ -0,0 +1,39 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_HEREDOC_TAG_START <<< END\n
+token #12 PHP_ENCAPSED_AND_WHITESPACE     
+token #13 PHP_VARIABLE $test
+token #14 PHP_ENCAPSED_AND_WHITESPACE \n    spaces 
+token #15 PHP_VARIABLE $test
+token #16 PHP_ENCAPSED_AND_WHITESPACE \n\ttabs 
+token #17 PHP_CURLY_OPEN {
+token #18 PHP_VARIABLE $test
+token #19 PHP_CURLY_CLOSE }
+token #20 PHP_ENCAPSED_AND_WHITESPACE \n                spaces tabs 
+token #21 PHP_TOKEN ${
+token #22 PHP_STRING test
+token #23 PHP_CURLY_CLOSE }
+token #24 PHP_ENCAPSED_AND_WHITESPACE \n
+token #25 PHP_VARIABLE $test
+token #26 PHP_CONSTANT_ENCAPSED_STRING \n\t\t        tabs spaces
+token #27 PHP_CONSTANT_ENCAPSED_STRING \nnospaces test
+token #28 PHP_CONSTANT_ENCAPSED_STRING \n
+token #29 PHP_HEREDOC_TAG_END     END
+token #30 PHP_TOKEN ,
+token #31 WHITESPACE  
+token #32 PHP_TOKEN $
+token #33 PHP_CURLY_OPEN {
+token #34 PHP_STRING test
+token #35 PHP_CURLY_CLOSE }
+token #36 PHP_TOKEN ]
+token #37 PHP_SEMICOLON ;
+token #38 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_01.pass
new file mode 100644
index 0000000000..4dad7abc63
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_01.pass
@@ -0,0 +1,34 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_STRING test
+token #7 PHP_TOKEN (
+token #8 PHP_HEREDOC_TAG_START <<< HEREDOC\n
+token #9 PHP_CONSTANT_ENCAPSED_STRING     foo
+token #10 PHP_CONSTANT_ENCAPSED_STRING \n  bar
+token #11 PHP_CONSTANT_ENCAPSED_STRING \nqux
+token #12 PHP_CONSTANT_ENCAPSED_STRING \n
+token #13 PHP_HEREDOC_TAG_END HEREDOC
+token #14 PHP_TOKEN )
+token #15 PHP_SEMICOLON ;
+token #16 WHITESPACE \n\n
+token #17 PHP_VARIABLE $array
+token #18 WHITESPACE  
+token #19 PHP_OPERATOR =
+token #20 WHITESPACE  
+token #21 PHP_TOKEN [
+token #22 PHP_HEREDOC_TAG_START <<< END\n
+token #23 PHP_CONSTANT_ENCAPSED_STRING foo
+token #24 PHP_CONSTANT_ENCAPSED_STRING \nbar
+token #25 PHP_CONSTANT_ENCAPSED_STRING \nbaz
+token #26 PHP_CONSTANT_ENCAPSED_STRING \n
+token #27 PHP_HEREDOC_TAG_END END
+token #28 PHP_TOKEN ,
+token #29 WHITESPACE  
+token #30 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #31 PHP_TOKEN ]
+token #32 PHP_SEMICOLON ;
+token #33 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_02.pass
new file mode 100644
index 0000000000..143a3ea7e7
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_02.pass
@@ -0,0 +1,23 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_HEREDOC_TAG_START <<< END\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING foo
+token #13 PHP_CONSTANT_ENCAPSED_STRING \nbar
+token #14 PHP_CONSTANT_ENCAPSED_STRING \nENDING
+token #15 PHP_CONSTANT_ENCAPSED_STRING \n
+token #16 PHP_HEREDOC_TAG_END END
+token #17 PHP_TOKEN ,
+token #18 WHITESPACE  
+token #19 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #20 PHP_TOKEN ]
+token #21 PHP_SEMICOLON ;
+token #22 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_03.pass
new file mode 100644
index 0000000000..3be957754a
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_03.pass
@@ -0,0 +1,23 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_HEREDOC_TAG_START <<< END\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING     foo END
+token #13 PHP_CONSTANT_ENCAPSED_STRING \n    bar
+token #14 PHP_CONSTANT_ENCAPSED_STRING \n        ENDING
+token #15 PHP_CONSTANT_ENCAPSED_STRING \n
+token #16 PHP_HEREDOC_TAG_END END
+token #17 PHP_TOKEN ,
+token #18 WHITESPACE  
+token #19 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #20 PHP_TOKEN ]
+token #21 PHP_SEMICOLON ;
+token #22 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_04.pass
new file mode 100644
index 0000000000..01038f8af2
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/heredoc_new_line_04.pass
@@ -0,0 +1,25 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_HEREDOC_TAG_START <<< END\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING     foo END
+token #13 PHP_ENCAPSED_AND_WHITESPACE \n    
+token #14 PHP_VARIABLE $test
+token #15 PHP_CONSTANT_ENCAPSED_STRING  bar
+token #16 PHP_CONSTANT_ENCAPSED_STRING \n        ENDING
+token #17 PHP_CONSTANT_ENCAPSED_STRING \n
+token #18 PHP_HEREDOC_TAG_END END
+token #19 PHP_TOKEN ,
+token #20 WHITESPACE  
+token #21 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #22 PHP_TOKEN ]
+token #23 PHP_SEMICOLON ;
+token #24 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_01.pass
new file mode 100644
index 0000000000..014de870b7
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_01.pass
@@ -0,0 +1,25 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #19 PHP_CONSTANT_ENCAPSED_STRING     spaces indentation\n
+token #20 PHP_NOWDOC_TAG_END     NOWDOC
+token #21 PHP_SEMICOLON ;
+token #22 WHITESPACE \n
+token #23 PHP_CURLY_CLOSE }
+token #24 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_02.pass
new file mode 100644
index 0000000000..63011bb5e7
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_02.pass
@@ -0,0 +1,24 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #19 PHP_NOWDOC_TAG_END     NOWDOC
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n
+token #22 PHP_CURLY_CLOSE }
+token #23 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_03.pass
new file mode 100644
index 0000000000..32720e96d6
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_03.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 WHITESPACE  
+token #12 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #13 PHP_NOWDOC_TAG_END     NOWDOC
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_04.pass
new file mode 100644
index 0000000000..32720e96d6
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_spaces_04.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 WHITESPACE  
+token #12 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #13 PHP_NOWDOC_TAG_END     NOWDOC
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_01.pass
new file mode 100644
index 0000000000..6f02f371e7
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_01.pass
@@ -0,0 +1,25 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #19 PHP_CONSTANT_ENCAPSED_STRING \ttab indentation\n
+token #20 PHP_NOWDOC_TAG_END \tNOWDOC
+token #21 PHP_SEMICOLON ;
+token #22 WHITESPACE \n
+token #23 PHP_CURLY_CLOSE }
+token #24 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_02.pass
new file mode 100644
index 0000000000..f69c0d3758
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_02.pass
@@ -0,0 +1,24 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_CLASS class
+token #7 WHITESPACE  
+token #8 PHP_STRING Foo
+token #9 WHITESPACE \n
+token #10 PHP_CURLY_OPEN {
+token #11 WHITESPACE \n    
+token #12 PHP_PUBLIC public
+token #13 WHITESPACE  
+token #14 PHP_VARIABLE $test
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #19 PHP_NOWDOC_TAG_END \tNOWDOC
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n
+token #22 PHP_CURLY_CLOSE }
+token #23 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_03.pass
new file mode 100644
index 0000000000..323f0a2df5
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_indent_tabs_03.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 WHITESPACE  
+token #12 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #13 PHP_NOWDOC_TAG_END \tNOWDOC
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_01.pass
new file mode 100644
index 0000000000..3ab2935f09
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_01.pass
@@ -0,0 +1,67 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_LINE_COMMENT //
+token #7 PHP_LINE_COMMENT  allow these in lexer but ParseError will be thrown\n
+token #8 PHP_VARIABLE $array
+token #9 WHITESPACE  
+token #10 PHP_OPERATOR =
+token #11 WHITESPACE  
+token #12 PHP_TOKEN [
+token #13 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #14 PHP_CONSTANT_ENCAPSED_STRING     spaces\n\ttabs\nnospaces\n        \tspaces tabs\n\t\t        tabs spaces\n
+token #15 PHP_NOWDOC_TAG_END END
+token #16 PHP_TOKEN ,
+token #17 WHITESPACE  
+token #18 PHP_VARIABLE $test
+token #19 PHP_TOKEN ]
+token #20 PHP_SEMICOLON ;
+token #21 WHITESPACE \n\n
+token #22 PHP_VARIABLE $array2
+token #23 WHITESPACE  
+token #24 PHP_OPERATOR =
+token #25 WHITESPACE  
+token #26 PHP_TOKEN [
+token #27 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #28 PHP_CONSTANT_ENCAPSED_STRING     spaces\n\ttabs\n        \tspaces tabs\n\t\t        tabs spaces\n
+token #29 PHP_NOWDOC_TAG_END     END
+token #30 PHP_TOKEN ,
+token #31 WHITESPACE  
+token #32 PHP_VARIABLE $test
+token #33 PHP_TOKEN [
+token #34 PHP_NUMBER 0
+token #35 PHP_TOKEN ]
+token #36 PHP_TOKEN ]
+token #37 PHP_SEMICOLON ;
+token #38 WHITESPACE \n\n
+token #39 PHP_VARIABLE $array3
+token #40 WHITESPACE  
+token #41 PHP_OPERATOR =
+token #42 WHITESPACE  
+token #43 PHP_TOKEN [
+token #44 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #45 PHP_CONSTANT_ENCAPSED_STRING     $test\n    spaces $test\n\ttabs {$test}\n                spaces tabs ${test}\n$test\n\t\t        tabs spaces\nnospaces test\n
+token #46 PHP_NOWDOC_TAG_END     END
+token #47 PHP_TOKEN ,
+token #48 WHITESPACE  
+token #49 PHP_TOKEN $
+token #50 PHP_CURLY_OPEN {
+token #51 PHP_STRING test
+token #52 PHP_CURLY_CLOSE }
+token #53 PHP_TOKEN ]
+token #54 PHP_SEMICOLON ;
+token #55 WHITESPACE \n\n
+token #56 PHP_VARIABLE $test
+token #57 WHITESPACE  
+token #58 PHP_OPERATOR =
+token #59 WHITESPACE  
+token #60 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #61 PHP_CONSTANT_ENCAPSED_STRING     \t    spaces tabs spaces\n
+token #62 PHP_NOWDOC_TAG_END         \tEND
+token #63 PHP_SEMICOLON ;
+token #64 WHITESPACE  
+token #65 PHP_LINE_COMMENT //
+token #66 PHP_LINE_COMMENT  spaces tabs\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_02.pass
new file mode 100644
index 0000000000..b5cf96eed5
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_02.pass
@@ -0,0 +1,52 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $name
+token #7 PHP_OPERATOR =
+token #8 PHP_CONSTANT_ENCAPSED_STRING "Junichi"
+token #9 PHP_SEMICOLON ;
+token #10 WHITESPACE \n
+token #11 PHP_VARIABLE $age
+token #12 PHP_OPERATOR =
+token #13 PHP_NUMBER 100
+token #14 PHP_SEMICOLON ;
+token #15 WHITESPACE \n
+token #16 PHP_ECHO echo
+token #17 WHITESPACE  
+token #18 PHP_NOWDOC_TAG_START <<<'NOWDOC'\n
+token #19 PHP_CONSTANT_ENCAPSED_STRING Name: $name<br>\nMy age is: $age<br>\n
+token #20 PHP_NOWDOC_TAG_END NOWDOC
+token #21 PHP_SEMICOLON ;
+token #22 WHITESPACE \n
+token #23 PHP_VARIABLE $name
+token #24 PHP_OPERATOR =
+token #25 PHP_CONSTANT_ENCAPSED_STRING "Jun"
+token #26 PHP_SEMICOLON ;
+token #27 WHITESPACE \n\n
+token #28 PHP_LINE_COMMENT //
+token #29 PHP_LINE_COMMENT  defferent indentation for body(spaces) ending marker(tabs)\n
+token #30 PHP_LINE_COMMENT //
+token #31 PHP_LINE_COMMENT  allow this in the lexer but spaces and tabs MUST NOT be intermixed\n
+token #32 PHP_VARIABLE $x
+token #33 WHITESPACE  
+token #34 PHP_OPERATOR =
+token #35 WHITESPACE  
+token #36 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
+token #37 PHP_CONSTANT_ENCAPSED_STRING     This is another nowdoc test.\n    With another line in it. {$test} $test ${test} variable test.\n    test. $object->field\n
+token #38 PHP_NOWDOC_TAG_END \t\tENDOFNOWDOC
+token #39 PHP_SEMICOLON ;
+token #40 WHITESPACE \n\n
+token #41 PHP_LINE_COMMENT //
+token #42 PHP_LINE_COMMENT  body(tabs) ending marker(spaces)\n
+token #43 PHP_VARIABLE $y
+token #44 WHITESPACE  
+token #45 PHP_OPERATOR =
+token #46 WHITESPACE  
+token #47 PHP_NOWDOC_TAG_START <<<'ENDOFNOWDOC'\n
+token #48 PHP_CONSTANT_ENCAPSED_STRING \t\tThis is another nowdoc test.\n\t\tWith another line in it. {$test} $test ${test} variable test.\n\t\ttest. $object->field\n
+token #49 PHP_NOWDOC_TAG_END     ENDOFNOWDOC
+token #50 PHP_SEMICOLON ;
+token #51 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_03.pass
new file mode 100644
index 0000000000..c1d137a42e
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_mixed_03.pass
@@ -0,0 +1,23 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING     $test\n    spaces $test\n\ttabs {$test}\n                spaces tabs ${test}\n$test\n\t\t        tabs spaces\nnospaces test\n
+token #13 PHP_NOWDOC_TAG_END     END
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_TOKEN $
+token #17 PHP_CURLY_OPEN {
+token #18 PHP_STRING test
+token #19 PHP_CURLY_CLOSE }
+token #20 PHP_TOKEN ]
+token #21 PHP_SEMICOLON ;
+token #22 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_01.pass
new file mode 100644
index 0000000000..8280319aa0
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_01.pass
@@ -0,0 +1,28 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_STRING test
+token #7 PHP_TOKEN (
+token #8 PHP_NOWDOC_TAG_START <<< 'NOWDOC'\n
+token #9 PHP_CONSTANT_ENCAPSED_STRING     foo\n  bar\nqux\n
+token #10 PHP_NOWDOC_TAG_END NOWDOC
+token #11 PHP_TOKEN )
+token #12 PHP_SEMICOLON ;
+token #13 WHITESPACE \n\n
+token #14 PHP_VARIABLE $array
+token #15 WHITESPACE  
+token #16 PHP_OPERATOR =
+token #17 WHITESPACE  
+token #18 PHP_TOKEN [
+token #19 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #20 PHP_CONSTANT_ENCAPSED_STRING foo\nbar\nbaz\n
+token #21 PHP_NOWDOC_TAG_END END
+token #22 PHP_TOKEN ,
+token #23 WHITESPACE  
+token #24 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #25 PHP_TOKEN ]
+token #26 PHP_SEMICOLON ;
+token #27 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_02.pass
new file mode 100644
index 0000000000..9d6ed59587
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_02.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING foo\nbar\nENDING\n
+token #13 PHP_NOWDOC_TAG_END END
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_03.pass
new file mode 100644
index 0000000000..ff0971c5a1
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_03.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING     foo END\n    bar\n        ENDING\n
+token #13 PHP_NOWDOC_TAG_END END
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_04.pass
new file mode 100644
index 0000000000..5c4b0c3f6d
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest/lexer/php73/nowdoc_new_line_04.pass
@@ -0,0 +1,20 @@
+token #0 PHP_OPENTAG <?php
+token #1 WHITESPACE \n
+token #2 PHP_COMMENT_START /*
+token #3 PHP_COMMENT \n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * "License"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n 
+token #4 PHP_COMMENT_END */
+token #5 WHITESPACE \n\n
+token #6 PHP_VARIABLE $array
+token #7 WHITESPACE  
+token #8 PHP_OPERATOR =
+token #9 WHITESPACE  
+token #10 PHP_TOKEN [
+token #11 PHP_NOWDOC_TAG_START <<< 'END'\n
+token #12 PHP_CONSTANT_ENCAPSED_STRING     foo END\n    $test bar\n        ENDING\n
+token #13 PHP_NOWDOC_TAG_END END
+token #14 PHP_TOKEN ,
+token #15 WHITESPACE  
+token #16 PHP_CONSTANT_ENCAPSED_STRING 'qux'
+token #17 PHP_TOKEN ]
+token #18 PHP_SEMICOLON ;
+token #19 WHITESPACE \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc00.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc00.pass
index 3ee8fe1699..836c70b025 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc00.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc00.pass
@@ -19,45 +19,48 @@ token #17 PHP_CONSTANT_ENCAPSED_STRING <br>
 token #18 PHP_ENCAPSED_AND_WHITESPACE \nMy age is: 
 token #19 PHP_VARIABLE $age
 token #20 PHP_CONSTANT_ENCAPSED_STRING <br>
-token #21 PHP_HEREDOC_TAG_END \nHEREDOC
-token #22 PHP_SEMICOLON ;
-token #23 WHITESPACE \n
-token #24 PHP_VARIABLE $name
-token #25 PHP_OPERATOR =
-token #26 PHP_CONSTANT_ENCAPSED_STRING "Honza"
-token #27 PHP_SEMICOLON ;
-token #28 WHITESPACE \n\n
-token #29 PHP_VARIABLE $x
-token #30 WHITESPACE  
-token #31 PHP_OPERATOR =
-token #32 WHITESPACE  
-token #33 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #34 PHP_CONSTANT_ENCAPSED_STRING This is another heredoc test.
-token #35 PHP_CONSTANT_ENCAPSED_STRING \nWith another line in it.
-token #36 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #37 PHP_SEMICOLON ;
-token #38 WHITESPACE \n\n\n
-token #39 PHP_VARIABLE $x
-token #40 WHITESPACE  
-token #41 PHP_OPERATOR =
+token #21 PHP_CONSTANT_ENCAPSED_STRING \n
+token #22 PHP_HEREDOC_TAG_END HEREDOC
+token #23 PHP_SEMICOLON ;
+token #24 WHITESPACE \n
+token #25 PHP_VARIABLE $name
+token #26 PHP_OPERATOR =
+token #27 PHP_CONSTANT_ENCAPSED_STRING "Honza"
+token #28 PHP_SEMICOLON ;
+token #29 WHITESPACE \n\n
+token #30 PHP_VARIABLE $x
+token #31 WHITESPACE  
+token #32 PHP_OPERATOR =
+token #33 WHITESPACE  
+token #34 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #35 PHP_CONSTANT_ENCAPSED_STRING This is another heredoc test.
+token #36 PHP_CONSTANT_ENCAPSED_STRING \nWith another line in it.
+token #37 PHP_CONSTANT_ENCAPSED_STRING \n
+token #38 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #39 PHP_SEMICOLON ;
+token #40 WHITESPACE \n\n\n
+token #41 PHP_VARIABLE $x
 token #42 WHITESPACE  
-token #43 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
-token #44 PHP_CONSTANT_ENCAPSED_STRING This is a heredoc test.
-token #45 PHP_CONSTANT_ENCAPSED_STRING \nNOTREALLYEND;
-token #46 PHP_CONSTANT_ENCAPSED_STRING \nAnother line
-token #47 PHP_CONSTANT_ENCAPSED_STRING \nNOTENDEITHER;
-token #48 PHP_CONSTANT_ENCAPSED_STRING \nENDOFHEREDOCWILLBESOON
-token #49 PHP_CONSTANT_ENCAPSED_STRING \nNow let's finish it
-token #50 PHP_HEREDOC_TAG_END \nENDOFHEREDOC
-token #51 PHP_SEMICOLON ;
-token #52 WHITESPACE \n\n\n
-token #53 PHP_PRINT print
-token #54 WHITESPACE  
-token #55 PHP_CONSTANT_ENCAPSED_STRING "
-token #56 PHP_CURLY_OPEN {
-token #57 PHP_VARIABLE $x
-token #58 PHP_CURLY_CLOSE }
-token #59 PHP_CONSTANT_ENCAPSED_STRING "
-token #60 PHP_SEMICOLON ;
-token #61 WHITESPACE \n
-token #62 PHP_CLOSETAG ?>\n
+token #43 PHP_OPERATOR =
+token #44 WHITESPACE  
+token #45 PHP_HEREDOC_TAG_START <<<ENDOFHEREDOC\n
+token #46 PHP_CONSTANT_ENCAPSED_STRING This is a heredoc test.
+token #47 PHP_CONSTANT_ENCAPSED_STRING \nNOTREALLYEND;
+token #48 PHP_CONSTANT_ENCAPSED_STRING \nAnother line
+token #49 PHP_CONSTANT_ENCAPSED_STRING \nNOTENDEITHER;
+token #50 PHP_CONSTANT_ENCAPSED_STRING \nENDOFHEREDOCWILLBESOON
+token #51 PHP_CONSTANT_ENCAPSED_STRING \nNow let's finish it
+token #52 PHP_CONSTANT_ENCAPSED_STRING \n
+token #53 PHP_HEREDOC_TAG_END ENDOFHEREDOC
+token #54 PHP_SEMICOLON ;
+token #55 WHITESPACE \n\n\n
+token #56 PHP_PRINT print
+token #57 WHITESPACE  
+token #58 PHP_CONSTANT_ENCAPSED_STRING "
+token #59 PHP_CURLY_OPEN {
+token #60 PHP_VARIABLE $x
+token #61 PHP_CURLY_CLOSE }
+token #62 PHP_CONSTANT_ENCAPSED_STRING "
+token #63 PHP_SEMICOLON ;
+token #64 WHITESPACE \n
+token #65 PHP_CLOSETAG ?>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass
index a86a636535..53b4372a91 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_02.pass
@@ -5,8 +5,9 @@ token #3 WHITESPACE
 token #4 PHP_HEREDOC_TAG_START <<<ABC\n
 token #5 PHP_CONSTANT_ENCAPSED_STRING     foo bar
 token #6 PHP_CONSTANT_ENCAPSED_STRING \n    baz asd
-token #7 PHP_HEREDOC_TAG_END \nABC
-token #8 PHP_SEMICOLON ;
-token #9 WHITESPACE \n
-token #10 PHP_CLOSETAG ?> 
-token #11 T_INLINE_HTML \n
+token #7 PHP_CONSTANT_ENCAPSED_STRING \n
+token #8 PHP_HEREDOC_TAG_END ABC
+token #9 PHP_SEMICOLON ;
+token #10 WHITESPACE \n
+token #11 PHP_CLOSETAG ?> 
+token #12 T_INLINE_HTML \n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass
index 8237f26689..34f85c7ae6 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/heredoc_03.pass
@@ -5,11 +5,12 @@ token #3 WHITESPACE
 token #4 PHP_HEREDOC_TAG_START <<<HERE\n
 token #5 PHP_ENCAPSED_AND_WHITESPACE select * from 
 token #6 PHP_VARIABLE $foo
-token #7 PHP_HEREDOC_TAG_END \nHERE
-token #8 WHITESPACE \n 
-token #9 PHP_TOKEN .
-token #10 WHITESPACE  
-token #11 PHP_CONSTANT_ENCAPSED_STRING " where foo = bar"
-token #12 PHP_SEMICOLON ;
-token #13 WHITESPACE \n
-token #14 PHP_CLOSETAG ?>\n
+token #7 PHP_CONSTANT_ENCAPSED_STRING \n
+token #8 PHP_HEREDOC_TAG_END HERE
+token #9 WHITESPACE \n 
+token #10 PHP_TOKEN .
+token #11 WHITESPACE  
+token #12 PHP_CONSTANT_ENCAPSED_STRING " where foo = bar"
+token #13 PHP_SEMICOLON ;
+token #14 WHITESPACE \n
+token #15 PHP_CLOSETAG ?>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass
index cd16a2a4fc..a5a129cf71 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue221484.pass
@@ -5,7 +5,8 @@ token #3 WHITESPACE
 token #4 PHP_HEREDOC_TAG_START <<<ABC\n
 token #5 PHP_CONSTANT_ENCAPSED_STRING foo bar
 token #6 PHP_CONSTANT_ENCAPSED_STRING \nbaz
-token #7 PHP_HEREDOC_TAG_END \nABC
-token #8 PHP_SEMICOLON ;
-token #9 WHITESPACE \n\n
-token #10 PHP_CLOSETAG ?>\n
+token #7 PHP_CONSTANT_ENCAPSED_STRING \n
+token #8 PHP_HEREDOC_TAG_END ABC
+token #9 PHP_SEMICOLON ;
+token #10 WHITESPACE \n\n
+token #11 PHP_CLOSETAG ?>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass
index 11fe4ff8f9..ad650d623c 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_01.pass
@@ -6,7 +6,8 @@ token #4 PHP_OPERATOR =
 token #5 WHITESPACE  
 token #6 PHP_HEREDOC_TAG_START <<<EOD\n
 token #7 PHP_CONSTANT_ENCAPSED_STRING $
-token #8 PHP_HEREDOC_TAG_END \nEOD
-token #9 PHP_SEMICOLON ;
-token #10 WHITESPACE \n\n
-token #11 PHP_CLOSETAG ?>\n
+token #8 PHP_CONSTANT_ENCAPSED_STRING \n
+token #9 PHP_HEREDOC_TAG_END EOD
+token #10 PHP_SEMICOLON ;
+token #11 WHITESPACE \n\n
+token #12 PHP_CLOSETAG ?>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass
index 53562925d0..8077249fc8 100644
--- a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/lexer/PHPLexerTest/lexer/issue222092_02.pass
@@ -6,7 +6,8 @@ token #4 PHP_OPERATOR =
 token #5 WHITESPACE  
 token #6 PHP_HEREDOC_TAG_START <<<EOD\n
 token #7 PHP_CONSTANT_ENCAPSED_STRING {
-token #8 PHP_HEREDOC_TAG_END \nEOD
-token #9 PHP_SEMICOLON ;
-token #10 WHITESPACE \n\n
-token #11 PHP_CLOSETAG ?>\n
+token #8 PHP_CONSTANT_ENCAPSED_STRING \n
+token #9 PHP_HEREDOC_TAG_END EOD
+token #10 PHP_SEMICOLON ;
+token #11 WHITESPACE \n\n
+token #12 PHP_CLOSETAG ?>\n
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/functionCallTrailingCommas_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/functionCallTrailingCommas_01.pass
similarity index 100%
rename from php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/functionCallTrailingCommas_01.pass
rename to php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/functionCallTrailingCommas_01.pass
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_01.pass
new file mode 100644
index 0000000000..3e1b3428bd
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_01.pass
@@ -0,0 +1,73 @@
+<testresult testFile='heredoc_indent_spaces_01.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='846' end='858'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='858' end='885'>
+            <text>    spaces indentation\n    </text>
+        </token>
+        <token id='T_END_HEREDOC' start='885' end='892'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='892' end='893'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='894' end='895'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='896' end='896'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='896'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='895' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='895' isCurly='true'>
+                    <FieldsDeclaration start='831' end='893' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Quote start='846' end='892' type='HEREDOC'>
+                                <Expressions>
+                                    <Scalar start='858' end='885' type='STRING' value='    spaces indentation\n    '/>
+                                </Expressions>
+                            </Quote>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_02.pass
new file mode 100644
index 0000000000..e3bfece962
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_02.pass
@@ -0,0 +1,69 @@
+<testresult testFile='heredoc_indent_spaces_02.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='846' end='858'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='862' end='869'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='869' end='870'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='871' end='872'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='873' end='873'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='873'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='872' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='872' isCurly='true'>
+                    <FieldsDeclaration start='831' end='870' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Quote start='846' end='869' type='HEREDOC'>
+                                <Expressions>
+                                </Expressions>
+                            </Quote>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_03.pass
new file mode 100644
index 0000000000..955345aef2
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_03.pass
@@ -0,0 +1,68 @@
+<testresult testFile='heredoc_indent_spaces_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='826' end='838'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='842' end='849'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_COMMA' start='849' end='850'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='851' end='856'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='856' end='857'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='857' end='858'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='859' end='859'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='859'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='858'>
+                <Assignment start='815' end='857' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='857' type='NEW'>
+                        <ArrayElement start='826' end='849'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='826' end='849' type='HEREDOC'>
+                                    <Expressions>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='851' end='856'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='851' end='856' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_04.pass
new file mode 100644
index 0000000000..e9a6457d3c
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_spaces_04.pass
@@ -0,0 +1,68 @@
+<testresult testFile='heredoc_indent_spaces_04.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='826' end='838'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='842' end='849'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_COMMA' start='849' end='850'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='851' end='856'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='856' end='857'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='857' end='858'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='859' end='859'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='858'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='858'>
+                <Assignment start='815' end='857' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='857' type='NEW'>
+                        <ArrayElement start='826' end='849'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='826' end='849' type='HEREDOC'>
+                                    <Expressions>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='851' end='856'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='851' end='856' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_01.pass
new file mode 100644
index 0000000000..7d6d77b26a
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_01.pass
@@ -0,0 +1,73 @@
+<testresult testFile='heredoc_indent_tabs_01.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='846' end='858'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='858' end='876'>
+            <text>\ttab indentation\n\t</text>
+        </token>
+        <token id='T_END_HEREDOC' start='876' end='883'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='883' end='884'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='885' end='886'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='887' end='887'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='887'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='886' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='886' isCurly='true'>
+                    <FieldsDeclaration start='831' end='884' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Quote start='846' end='883' type='HEREDOC'>
+                                <Expressions>
+                                    <Scalar start='858' end='876' type='STRING' value='\ttab indentation\n\t'/>
+                                </Expressions>
+                            </Quote>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_02.pass
new file mode 100644
index 0000000000..2ab20f9105
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_02.pass
@@ -0,0 +1,69 @@
+<testresult testFile='heredoc_indent_tabs_02.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='846' end='858'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='859' end='866'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='866' end='867'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='868' end='869'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='870' end='870'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='870'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='869' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='869' isCurly='true'>
+                    <FieldsDeclaration start='831' end='867' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Quote start='846' end='866' type='HEREDOC'>
+                                <Expressions>
+                                </Expressions>
+                            </Quote>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_03.pass
new file mode 100644
index 0000000000..1333022282
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_indent_tabs_03.pass
@@ -0,0 +1,68 @@
+<testresult testFile='heredoc_indent_tabs_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='826' end='838'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='839' end='846'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_COMMA' start='846' end='847'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='848' end='853'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='853' end='854'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='854' end='855'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='856' end='856'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='856'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='855'>
+                <Assignment start='815' end='854' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='854' type='NEW'>
+                        <ArrayElement start='826' end='846'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='826' end='846' type='HEREDOC'>
+                                    <Expressions>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='848' end='853'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='848' end='853' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_01.pass
new file mode 100644
index 0000000000..57a06bae5b
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_01.pass
@@ -0,0 +1,319 @@
+<testresult testFile='heredoc_mixed_01.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='869' end='875'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='876' end='877'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='878' end='879'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='879' end='887'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='887' end='956'>
+            <text>    spaces\n\ttabs\nnospaces\n        \tspaces tabs\n\t\t        tabs spaces\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='956' end='959'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='959' end='960'>
+            <text>,</text>
+        </token>
+        <token id='T_VARIABLE' start='961' end='966'>
+            <text>$test</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='966' end='967'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='967' end='968'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='970' end='977'>
+            <text>$array2</text>
+        </token>
+        <token id='T_EQUAL' start='978' end='979'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='980' end='981'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='981' end='989'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='989' end='1053'>
+            <text>    spaces\n\ttabs\n        \tspaces tabs\n\t\t        tabs spaces\n    </text>
+        </token>
+        <token id='T_END_HEREDOC' start='1053' end='1056'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='1056' end='1057'>
+            <text>,</text>
+        </token>
+        <token id='T_VARIABLE' start='1058' end='1063'>
+            <text>$test</text>
+        </token>
+        <token id='T_OPEN_RECT' start='1063' end='1064'>
+            <text>[</text>
+        </token>
+        <token id='T_LNUMBER' start='1064' end='1065'>
+            <text>0</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='1065' end='1066'>
+            <text>]</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='1066' end='1067'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='1067' end='1068'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1070' end='1077'>
+            <text>$array3</text>
+        </token>
+        <token id='T_EQUAL' start='1078' end='1079'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='1080' end='1081'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='1081' end='1089'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1089' end='1093'>
+            <text>    </text>
+        </token>
+        <token id='T_VARIABLE' start='1093' end='1098'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1098' end='1110'>
+            <text>\n    spaces </text>
+        </token>
+        <token id='T_VARIABLE' start='1110' end='1115'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1115' end='1122'>
+            <text>\n\ttabs </text>
+        </token>
+        <token id='T_CURLY_OPEN_WITH_DOLAR' start='1122' end='1123'>
+            <text>{</text>
+        </token>
+        <token id='T_VARIABLE' start='1123' end='1128'>
+            <text>$test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1128' end='1129'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1129' end='1158'>
+            <text>\n                spaces tabs </text>
+        </token>
+        <token id='T_DOLLAR_OPEN_CURLY_BRACES' start='1158' end='1160'>
+            <text>${</text>
+        </token>
+        <token id='T_STRING_VARNAME' start='1160' end='1164'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1164' end='1165'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1165' end='1166'>
+            <text>\n</text>
+        </token>
+        <token id='T_VARIABLE' start='1166' end='1171'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1171' end='1212'>
+            <text>\n\t\t        tabs spaces\nnospaces test\n    </text>
+        </token>
+        <token id='T_END_HEREDOC' start='1212' end='1215'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='1215' end='1216'>
+            <text>,</text>
+        </token>
+        <token id='T_DOLLAR' start='1217' end='1218'>
+            <text>$</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='1218' end='1219'>
+            <text>{</text>
+        </token>
+        <token id='T_STRING' start='1219' end='1223'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1223' end='1224'>
+            <text>}</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='1224' end='1225'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='1225' end='1226'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1228' end='1233'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='1234' end='1235'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='1236' end='1244'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1244' end='1281'>
+            <text>    \t    spaces tabs spaces\n        \t</text>
+        </token>
+        <token id='T_END_HEREDOC' start='1281' end='1284'>
+            <text>END</text>
+        </token>
+        <token id='T_SEMICOLON' start='1284' end='1285'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='1301' end='1301'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='1286'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='815' end='869' commentType='singleLine'/>
+            <Comment start='1286' end='1301' commentType='singleLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='815' end='869' commentType='singleLine'/>
+            <Comment start='1286' end='1301' commentType='singleLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='869' end='968'>
+                <Assignment start='869' end='967' operator='EQUAL'>
+                    <Variable start='869' end='875' isDollared='true'>
+                        <Identifier start='870' end='875' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='878' end='967' type='NEW'>
+                        <ArrayElement start='879' end='959'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='879' end='959' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='887' end='956' type='STRING' value='    spaces\n\ttabs\nnospaces\n        \tspaces tabs\n\t\t        tabs spaces\n'/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='961' end='966'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Variable start='961' end='966' isDollared='true'>
+                                    <Identifier start='962' end='966' name='test'/>
+                                </Variable>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='970' end='1068'>
+                <Assignment start='970' end='1067' operator='EQUAL'>
+                    <Variable start='970' end='977' isDollared='true'>
+                        <Identifier start='971' end='977' name='array2'/>
+                    </Variable>
+                    <ArrayCreation start='980' end='1067' type='NEW'>
+                        <ArrayElement start='981' end='1056'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='981' end='1056' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='989' end='1053' type='STRING' value='    spaces\n\ttabs\n        \tspaces tabs\n\t\t        tabs spaces\n    '/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='1058' end='1066'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <ArrayAccess start='1058' end='1066' type='VARIABLE_ARRAY' isDollared='false'>
+                                    <ArrayDimension start='1063' end='1066'>
+                                        <Index>
+                                            <Scalar start='1064' end='1065' type='INT' value='0'/>
+                                        </Index>
+                                    </ArrayDimension>
+                                    <Name>
+                                        <Variable start='1058' end='1063' isDollared='true'>
+                                            <Identifier start='1059' end='1063' name='test'/>
+                                        </Variable>
+                                    </Name>
+                                </ArrayAccess>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1070' end='1226'>
+                <Assignment start='1070' end='1225' operator='EQUAL'>
+                    <Variable start='1070' end='1077' isDollared='true'>
+                        <Identifier start='1071' end='1077' name='array3'/>
+                    </Variable>
+                    <ArrayCreation start='1080' end='1225' type='NEW'>
+                        <ArrayElement start='1081' end='1215'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='1081' end='1215' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='1089' end='1093' type='STRING' value='    '/>
+                                        <Variable start='1093' end='1098' isDollared='true'>
+                                            <Identifier start='1094' end='1098' name='test'/>
+                                        </Variable>
+                                        <Scalar start='1098' end='1110' type='STRING' value='\n    spaces '/>
+                                        <Variable start='1110' end='1115' isDollared='true'>
+                                            <Identifier start='1111' end='1115' name='test'/>
+                                        </Variable>
+                                        <Scalar start='1115' end='1122' type='STRING' value='\n\ttabs '/>
+                                        <ReflectionVariable start='1122' end='1129'>
+                                            <Variable start='1123' end='1128' isDollared='true'>
+                                                <Identifier start='1124' end='1128' name='test'/>
+                                            </Variable>
+                                        </ReflectionVariable>
+                                        <Scalar start='1129' end='1158' type='STRING' value='\n                spaces tabs '/>
+                                        <ReflectionVariable start='1158' end='1165'>
+                                            <Scalar start='1160' end='1164' type='STRING' value='test'/>
+                                        </ReflectionVariable>
+                                        <Scalar start='1165' end='1166' type='STRING' value='\n'/>
+                                        <Variable start='1166' end='1171' isDollared='true'>
+                                            <Identifier start='1167' end='1171' name='test'/>
+                                        </Variable>
+                                        <Scalar start='1171' end='1212' type='STRING' value='\n\t\t        tabs spaces\nnospaces test\n    '/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='1217' end='1224'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <ReflectionVariable start='1217' end='1224'>
+                                    <NamespaceName start='1219' end='1223' isCurrent='false' isGlobal='false'>
+                                        <Identifier start='1219' end='1223' name='test'/>
+                                    </NamespaceName>
+                                </ReflectionVariable>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1228' end='1285'>
+                <Assignment start='1228' end='1284' operator='EQUAL'>
+                    <Variable start='1228' end='1233' isDollared='true'>
+                        <Identifier start='1229' end='1233' name='test'/>
+                    </Variable>
+                    <Quote start='1236' end='1284' type='HEREDOC'>
+                        <Expressions>
+                            <Scalar start='1244' end='1281' type='STRING' value='    \t    spaces tabs spaces\n        \t'/>
+                        </Expressions>
+                    </Quote>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_02.pass
new file mode 100644
index 0000000000..913b02a1f0
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_02.pass
@@ -0,0 +1,317 @@
+<testresult testFile='heredoc_mixed_02.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='820'>
+            <text>$name</text>
+        </token>
+        <token id='T_EQUAL' start='820' end='821'>
+            <text>=</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='821' end='830'>
+            <text>"Junichi"</text>
+        </token>
+        <token id='T_SEMICOLON' start='830' end='831'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='832' end='836'>
+            <text>$age</text>
+        </token>
+        <token id='T_EQUAL' start='836' end='837'>
+            <text>=</text>
+        </token>
+        <token id='T_LNUMBER' start='837' end='840'>
+            <text>100</text>
+        </token>
+        <token id='T_SEMICOLON' start='840' end='841'>
+            <text>;</text>
+        </token>
+        <token id='T_ECHO' start='842' end='846'>
+            <text>echo</text>
+        </token>
+        <token id='T_START_HEREDOC' start='847' end='858'>
+            <text>&lt;&lt;&lt;HEREDOC\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='858' end='864'>
+            <text>Name: </text>
+        </token>
+        <token id='T_VARIABLE' start='864' end='869'>
+            <text>$name</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='869' end='885'>
+            <text>&lt;br&gt;\nMy age is: </text>
+        </token>
+        <token id='T_VARIABLE' start='885' end='889'>
+            <text>$age</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='889' end='894'>
+            <text>&lt;br&gt;\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='894' end='901'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='901' end='902'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='903' end='908'>
+            <text>$name</text>
+        </token>
+        <token id='T_EQUAL' start='908' end='909'>
+            <text>=</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='909' end='914'>
+            <text>"Jun"</text>
+        </token>
+        <token id='T_SEMICOLON' start='914' end='915'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1049' end='1051'>
+            <text>$x</text>
+        </token>
+        <token id='T_EQUAL' start='1052' end='1053'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='1054' end='1070'>
+            <text>&lt;&lt;&lt;ENDOFHEREDOC\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1070' end='1133'>
+            <text>    This is another heredoc test.\n    With another line in it. </text>
+        </token>
+        <token id='T_CURLY_OPEN_WITH_DOLAR' start='1133' end='1134'>
+            <text>{</text>
+        </token>
+        <token id='T_VARIABLE' start='1134' end='1139'>
+            <text>$test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1139' end='1140'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1140' end='1141'>
+            <text> </text>
+        </token>
+        <token id='T_VARIABLE' start='1141' end='1146'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1146' end='1147'>
+            <text> </text>
+        </token>
+        <token id='T_DOLLAR_OPEN_CURLY_BRACES' start='1147' end='1149'>
+            <text>${</text>
+        </token>
+        <token id='T_STRING_VARNAME' start='1149' end='1153'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1153' end='1154'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1154' end='1180'>
+            <text> variable test.\n    test. </text>
+        </token>
+        <token id='T_VARIABLE' start='1180' end='1187'>
+            <text>$object</text>
+        </token>
+        <token id='T_OBJECT_OPERATOR' start='1187' end='1189'>
+            <text>-&gt;</text>
+        </token>
+        <token id='T_STRING' start='1189' end='1194'>
+            <text>field</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1194' end='1197'>
+            <text>\n\t\t</text>
+        </token>
+        <token id='T_END_HEREDOC' start='1197' end='1209'>
+            <text>ENDOFHEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='1209' end='1210'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1248' end='1250'>
+            <text>$y</text>
+        </token>
+        <token id='T_EQUAL' start='1251' end='1252'>
+            <text>=</text>
+        </token>
+        <token id='T_START_HEREDOC' start='1253' end='1269'>
+            <text>&lt;&lt;&lt;ENDOFHEREDOC\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1269' end='1328'>
+            <text>\t\tThis is another heredoc test.\n\t\tWith another line in it. </text>
+        </token>
+        <token id='T_CURLY_OPEN_WITH_DOLAR' start='1328' end='1329'>
+            <text>{</text>
+        </token>
+        <token id='T_VARIABLE' start='1329' end='1334'>
+            <text>$test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1334' end='1335'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1335' end='1336'>
+            <text> </text>
+        </token>
+        <token id='T_VARIABLE' start='1336' end='1341'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1341' end='1342'>
+            <text> </text>
+        </token>
+        <token id='T_DOLLAR_OPEN_CURLY_BRACES' start='1342' end='1344'>
+            <text>${</text>
+        </token>
+        <token id='T_STRING_VARNAME' start='1344' end='1348'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1348' end='1349'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1349' end='1373'>
+            <text> variable test.\n\t\ttest. </text>
+        </token>
+        <token id='T_VARIABLE' start='1373' end='1380'>
+            <text>$object</text>
+        </token>
+        <token id='T_OBJECT_OPERATOR' start='1380' end='1382'>
+            <text>-&gt;</text>
+        </token>
+        <token id='T_STRING' start='1382' end='1387'>
+            <text>field</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1387' end='1392'>
+            <text>\n    </text>
+        </token>
+        <token id='T_END_HEREDOC' start='1392' end='1404'>
+            <text>ENDOFHEREDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='1404' end='1405'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='1406' end='1406'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='1406'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='917' end='979' commentType='singleLine'/>
+            <Comment start='979' end='1049' commentType='singleLine'/>
+            <Comment start='1212' end='1248' commentType='singleLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='917' end='979' commentType='singleLine'/>
+            <Comment start='979' end='1049' commentType='singleLine'/>
+            <Comment start='1212' end='1248' commentType='singleLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='831'>
+                <Assignment start='815' end='830' operator='EQUAL'>
+                    <Variable start='815' end='820' isDollared='true'>
+                        <Identifier start='816' end='820' name='name'/>
+                    </Variable>
+                    <Scalar start='821' end='830' type='STRING' value='"Junichi"'/>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='832' end='841'>
+                <Assignment start='832' end='840' operator='EQUAL'>
+                    <Variable start='832' end='836' isDollared='true'>
+                        <Identifier start='833' end='836' name='age'/>
+                    </Variable>
+                    <Scalar start='837' end='840' type='INT' value='100'/>
+                </Assignment>
+            </ExpressionStatement>
+            <EchoStatement start='842' end='902'>
+                <Quote start='847' end='901' type='HEREDOC'>
+                    <Expressions>
+                        <Scalar start='858' end='864' type='STRING' value='Name: '/>
+                        <Variable start='864' end='869' isDollared='true'>
+                            <Identifier start='865' end='869' name='name'/>
+                        </Variable>
+                        <Scalar start='869' end='885' type='STRING' value='&lt;br&gt;\nMy age is: '/>
+                        <Variable start='885' end='889' isDollared='true'>
+                            <Identifier start='886' end='889' name='age'/>
+                        </Variable>
+                        <Scalar start='889' end='894' type='STRING' value='&lt;br&gt;\n'/>
+                    </Expressions>
+                </Quote>
+            </EchoStatement>
+            <ExpressionStatement start='903' end='915'>
+                <Assignment start='903' end='914' operator='EQUAL'>
+                    <Variable start='903' end='908' isDollared='true'>
+                        <Identifier start='904' end='908' name='name'/>
+                    </Variable>
+                    <Scalar start='909' end='914' type='STRING' value='"Jun"'/>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1049' end='1210'>
+                <Assignment start='1049' end='1209' operator='EQUAL'>
+                    <Variable start='1049' end='1051' isDollared='true'>
+                        <Identifier start='1050' end='1051' name='x'/>
+                    </Variable>
+                    <Quote start='1054' end='1209' type='HEREDOC'>
+                        <Expressions>
+                            <Scalar start='1070' end='1133' type='STRING' value='    This is another heredoc test.\n    With another line in it. '/>
+                            <ReflectionVariable start='1133' end='1140'>
+                                <Variable start='1134' end='1139' isDollared='true'>
+                                    <Identifier start='1135' end='1139' name='test'/>
+                                </Variable>
+                            </ReflectionVariable>
+                            <Scalar start='1140' end='1141' type='STRING' value=' '/>
+                            <Variable start='1141' end='1146' isDollared='true'>
+                                <Identifier start='1142' end='1146' name='test'/>
+                            </Variable>
+                            <Scalar start='1146' end='1147' type='STRING' value=' '/>
+                            <ReflectionVariable start='1147' end='1154'>
+                                <Scalar start='1149' end='1153' type='STRING' value='test'/>
+                            </ReflectionVariable>
+                            <Scalar start='1154' end='1180' type='STRING' value=' variable test.\n    test. '/>
+                            <FieldAccess start='1180' end='1194'>
+                                <Variable start='1180' end='1187' isDollared='true'>
+                                    <Identifier start='1181' end='1187' name='object'/>
+                                </Variable>
+                                <Field>
+                                    <Variable start='1189' end='1194' isDollared='false'>
+                                        <Identifier start='1189' end='1194' name='field'/>
+                                    </Variable>
+                                </Field>
+                            </FieldAccess>
+                            <Scalar start='1194' end='1197' type='STRING' value='\n\t\t'/>
+                        </Expressions>
+                    </Quote>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1248' end='1405'>
+                <Assignment start='1248' end='1404' operator='EQUAL'>
+                    <Variable start='1248' end='1250' isDollared='true'>
+                        <Identifier start='1249' end='1250' name='y'/>
+                    </Variable>
+                    <Quote start='1253' end='1404' type='HEREDOC'>
+                        <Expressions>
+                            <Scalar start='1269' end='1328' type='STRING' value='\t\tThis is another heredoc test.\n\t\tWith another line in it. '/>
+                            <ReflectionVariable start='1328' end='1335'>
+                                <Variable start='1329' end='1334' isDollared='true'>
+                                    <Identifier start='1330' end='1334' name='test'/>
+                                </Variable>
+                            </ReflectionVariable>
+                            <Scalar start='1335' end='1336' type='STRING' value=' '/>
+                            <Variable start='1336' end='1341' isDollared='true'>
+                                <Identifier start='1337' end='1341' name='test'/>
+                            </Variable>
+                            <Scalar start='1341' end='1342' type='STRING' value=' '/>
+                            <ReflectionVariable start='1342' end='1349'>
+                                <Scalar start='1344' end='1348' type='STRING' value='test'/>
+                            </ReflectionVariable>
+                            <Scalar start='1349' end='1373' type='STRING' value=' variable test.\n\t\ttest. '/>
+                            <FieldAccess start='1373' end='1387'>
+                                <Variable start='1373' end='1380' isDollared='true'>
+                                    <Identifier start='1374' end='1380' name='object'/>
+                                </Variable>
+                                <Field>
+                                    <Variable start='1382' end='1387' isDollared='false'>
+                                        <Identifier start='1382' end='1387' name='field'/>
+                                    </Variable>
+                                </Field>
+                            </FieldAccess>
+                            <Scalar start='1387' end='1392' type='STRING' value='\n    '/>
+                        </Expressions>
+                    </Quote>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_03.pass
new file mode 100644
index 0000000000..6e1e372a5d
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_mixed_03.pass
@@ -0,0 +1,149 @@
+<testresult testFile='heredoc_mixed_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='825' end='833'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='833' end='837'>
+            <text>    </text>
+        </token>
+        <token id='T_VARIABLE' start='837' end='842'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='842' end='854'>
+            <text>\n    spaces </text>
+        </token>
+        <token id='T_VARIABLE' start='854' end='859'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='859' end='866'>
+            <text>\n\ttabs </text>
+        </token>
+        <token id='T_CURLY_OPEN_WITH_DOLAR' start='866' end='867'>
+            <text>{</text>
+        </token>
+        <token id='T_VARIABLE' start='867' end='872'>
+            <text>$test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='872' end='873'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='873' end='902'>
+            <text>\n                spaces tabs </text>
+        </token>
+        <token id='T_DOLLAR_OPEN_CURLY_BRACES' start='902' end='904'>
+            <text>${</text>
+        </token>
+        <token id='T_STRING_VARNAME' start='904' end='908'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='908' end='909'>
+            <text>}</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='909' end='910'>
+            <text>\n</text>
+        </token>
+        <token id='T_VARIABLE' start='910' end='915'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='915' end='956'>
+            <text>\n\t\t        tabs spaces\nnospaces test\n    </text>
+        </token>
+        <token id='T_END_HEREDOC' start='956' end='959'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='959' end='960'>
+            <text>,</text>
+        </token>
+        <token id='T_DOLLAR' start='961' end='962'>
+            <text>$</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='962' end='963'>
+            <text>{</text>
+        </token>
+        <token id='T_STRING' start='963' end='967'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='967' end='968'>
+            <text>}</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='968' end='969'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='969' end='970'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='971' end='971'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='970'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='970'>
+                <Assignment start='815' end='969' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='969' type='NEW'>
+                        <ArrayElement start='825' end='959'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='825' end='959' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='833' end='837' type='STRING' value='    '/>
+                                        <Variable start='837' end='842' isDollared='true'>
+                                            <Identifier start='838' end='842' name='test'/>
+                                        </Variable>
+                                        <Scalar start='842' end='854' type='STRING' value='\n    spaces '/>
+                                        <Variable start='854' end='859' isDollared='true'>
+                                            <Identifier start='855' end='859' name='test'/>
+                                        </Variable>
+                                        <Scalar start='859' end='866' type='STRING' value='\n\ttabs '/>
+                                        <ReflectionVariable start='866' end='873'>
+                                            <Variable start='867' end='872' isDollared='true'>
+                                                <Identifier start='868' end='872' name='test'/>
+                                            </Variable>
+                                        </ReflectionVariable>
+                                        <Scalar start='873' end='902' type='STRING' value='\n                spaces tabs '/>
+                                        <ReflectionVariable start='902' end='909'>
+                                            <Scalar start='904' end='908' type='STRING' value='test'/>
+                                        </ReflectionVariable>
+                                        <Scalar start='909' end='910' type='STRING' value='\n'/>
+                                        <Variable start='910' end='915' isDollared='true'>
+                                            <Identifier start='911' end='915' name='test'/>
+                                        </Variable>
+                                        <Scalar start='915' end='956' type='STRING' value='\n\t\t        tabs spaces\nnospaces test\n    '/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='961' end='968'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <ReflectionVariable start='961' end='968'>
+                                    <NamespaceName start='963' end='967' isCurrent='false' isGlobal='false'>
+                                        <Identifier start='963' end='967' name='test'/>
+                                    </NamespaceName>
+                                </ReflectionVariable>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_01.pass
new file mode 100644
index 0000000000..c77830a612
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_01.pass
@@ -0,0 +1,109 @@
+<testresult testFile='heredoc_new_line_01.php'>
+    <scanner>
+        <token id='T_STRING' start='815' end='819'>
+            <text>test</text>
+        </token>
+        <token id='T_OPEN_PARENTHESE' start='819' end='820'>
+            <text>(</text>
+        </token>
+        <token id='T_START_HEREDOC' start='820' end='832'>
+            <text>&lt;&lt;&lt; HEREDOC\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='832' end='850'>
+            <text>    foo\n  bar\nqux\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='850' end='857'>
+            <text>HEREDOC</text>
+        </token>
+        <token id='T_CLOSE_PARENTHESE' start='857' end='858'>
+            <text>)</text>
+        </token>
+        <token id='T_SEMICOLON' start='858' end='859'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='861' end='867'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='868' end='869'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='870' end='871'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='871' end='879'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='879' end='891'>
+            <text>foo\nbar\nbaz\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='891' end='894'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='894' end='895'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='896' end='901'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='901' end='902'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='902' end='903'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='904' end='904'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='904'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='859'>
+                <FunctionInvocation start='815' end='858'>
+                    <FucntionName start='815' end='819'>
+                        <NamespaceName start='815' end='819' isCurrent='false' isGlobal='false'>
+                            <Identifier start='815' end='819' name='test'/>
+                        </NamespaceName>
+                    </FucntionName>
+                    <Parameters>
+                        <Quote start='820' end='857' type='HEREDOC'>
+                            <Expressions>
+                                <Scalar start='832' end='850' type='STRING' value='    foo\n  bar\nqux\n'/>
+                            </Expressions>
+                        </Quote>
+                    </Parameters>
+                </FunctionInvocation>
+            </ExpressionStatement>
+            <ExpressionStatement start='861' end='903'>
+                <Assignment start='861' end='902' operator='EQUAL'>
+                    <Variable start='861' end='867' isDollared='true'>
+                        <Identifier start='862' end='867' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='870' end='902' type='NEW'>
+                        <ArrayElement start='871' end='894'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='871' end='894' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='879' end='891' type='STRING' value='foo\nbar\nbaz\n'/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='896' end='901'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='896' end='901' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_02.pass
new file mode 100644
index 0000000000..6f2cfc64c3
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_02.pass
@@ -0,0 +1,72 @@
+<testresult testFile='heredoc_new_line_02.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='825' end='833'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='833' end='848'>
+            <text>foo\nbar\nENDING\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='848' end='851'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='851' end='852'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='853' end='858'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='858' end='859'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='859' end='860'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='861' end='861'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='861'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='860'>
+                <Assignment start='815' end='859' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='859' type='NEW'>
+                        <ArrayElement start='825' end='851'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='825' end='851' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='833' end='848' type='STRING' value='foo\nbar\nENDING\n'/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='853' end='858'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='853' end='858' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_03.pass
new file mode 100644
index 0000000000..10c07890e3
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_03.pass
@@ -0,0 +1,72 @@
+<testresult testFile='heredoc_new_line_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='825' end='833'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='833' end='868'>
+            <text>    foo END\n    bar\n        ENDING\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='868' end='871'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='871' end='872'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='873' end='878'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='878' end='879'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='879' end='880'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='881' end='881'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='881'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='880'>
+                <Assignment start='815' end='879' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='879' type='NEW'>
+                        <ArrayElement start='825' end='871'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='825' end='871' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='833' end='868' type='STRING' value='    foo END\n    bar\n        ENDING\n'/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='873' end='878'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='873' end='878' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_04.pass
new file mode 100644
index 0000000000..fec91b2a52
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/heredoc_new_line_04.pass
@@ -0,0 +1,82 @@
+<testresult testFile='heredoc_new_line_04.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_HEREDOC' start='825' end='833'>
+            <text>&lt;&lt;&lt; END\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='833' end='849'>
+            <text>    foo END\n    </text>
+        </token>
+        <token id='T_VARIABLE' start='849' end='854'>
+            <text>$test</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='854' end='874'>
+            <text> bar\n        ENDING\n</text>
+        </token>
+        <token id='T_END_HEREDOC' start='874' end='877'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='877' end='878'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='879' end='884'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='884' end='885'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='885' end='886'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='887' end='887'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='887'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='886'>
+                <Assignment start='815' end='885' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='885' type='NEW'>
+                        <ArrayElement start='825' end='877'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Quote start='825' end='877' type='HEREDOC'>
+                                    <Expressions>
+                                        <Scalar start='833' end='849' type='STRING' value='    foo END\n    '/>
+                                        <Variable start='849' end='854' isDollared='true'>
+                                            <Identifier start='850' end='854' name='test'/>
+                                        </Variable>
+                                        <Scalar start='854' end='874' type='STRING' value=' bar\n        ENDING\n'/>
+                                    </Expressions>
+                                </Quote>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='879' end='884'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='879' end='884' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/listReferenceAssignment_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/listReferenceAssignment_01.pass
similarity index 100%
rename from php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/listReferenceAssignment_01.pass
rename to php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/listReferenceAssignment_01.pass
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_01.pass
new file mode 100644
index 0000000000..29aa83e0aa
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_01.pass
@@ -0,0 +1,69 @@
+<testresult testFile='nowdoc_indent_spaces_01.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='846' end='859'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='859' end='882'>
+            <text>    spaces indentation\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='882' end='892'>
+            <text>    NOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='892' end='893'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='894' end='895'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='896' end='896'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='896'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='895' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='895' isCurly='true'>
+                    <FieldsDeclaration start='831' end='893' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Scalar start='846' end='892' type='STRING' value='    spaces indentation\n'/>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_02.pass
new file mode 100644
index 0000000000..e817ad9f20
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_02.pass
@@ -0,0 +1,66 @@
+<testresult testFile='nowdoc_indent_spaces_02.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='846' end='859'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='859' end='869'>
+            <text>    NOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='869' end='870'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='871' end='872'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='873' end='873'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='873'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='872' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='872' isCurly='true'>
+                    <FieldsDeclaration start='831' end='870' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Scalar start='846' end='869' type='STRING' value=''/>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_03.pass
new file mode 100644
index 0000000000..c737e957d7
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_03.pass
@@ -0,0 +1,65 @@
+<testresult testFile='nowdoc_indent_spaces_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='826' end='839'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='839' end='849'>
+            <text>    NOWDOC</text>
+        </token>
+        <token id='T_COMMA' start='849' end='850'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='851' end='856'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='856' end='857'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='857' end='858'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='859' end='859'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='859'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='858'>
+                <Assignment start='815' end='857' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='857' type='NEW'>
+                        <ArrayElement start='826' end='849'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='826' end='849' type='STRING' value=''/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='851' end='856'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='851' end='856' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_04.pass
new file mode 100644
index 0000000000..ade3ba72e5
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_spaces_04.pass
@@ -0,0 +1,65 @@
+<testresult testFile='nowdoc_indent_spaces_04.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='826' end='839'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='839' end='849'>
+            <text>    NOWDOC</text>
+        </token>
+        <token id='T_COMMA' start='849' end='850'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='851' end='856'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='856' end='857'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='857' end='858'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='859' end='859'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='858'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='858'>
+                <Assignment start='815' end='857' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='857' type='NEW'>
+                        <ArrayElement start='826' end='849'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='826' end='849' type='STRING' value=''/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='851' end='856'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='851' end='856' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_01.pass
new file mode 100644
index 0000000000..0d533e46af
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_01.pass
@@ -0,0 +1,69 @@
+<testresult testFile='nowdoc_indent_tabs_01.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='846' end='859'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='859' end='876'>
+            <text>\ttab indentation\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='876' end='883'>
+            <text>\tNOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='883' end='884'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='885' end='886'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='887' end='887'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='887'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='886' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='886' isCurly='true'>
+                    <FieldsDeclaration start='831' end='884' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Scalar start='846' end='883' type='STRING' value='\ttab indentation\n'/>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_02.pass
new file mode 100644
index 0000000000..1d38aa040e
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_02.pass
@@ -0,0 +1,66 @@
+<testresult testFile='nowdoc_indent_tabs_02.php'>
+    <scanner>
+        <token id='T_CLASS' start='815' end='820'>
+            <text>class</text>
+        </token>
+        <token id='T_STRING' start='821' end='824'>
+            <text>Foo</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='825' end='826'>
+            <text>{</text>
+        </token>
+        <token id='T_PUBLIC' start='831' end='837'>
+            <text>public</text>
+        </token>
+        <token id='T_VARIABLE' start='838' end='843'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='844' end='845'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='846' end='859'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='859' end='866'>
+            <text>\tNOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='866' end='867'>
+            <text>;</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='868' end='869'>
+            <text>}</text>
+        </token>
+        <token id='EOF' start='870' end='870'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='870'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ClassDeclaration start='815' end='869' modifier='NONE'>
+                <ClassName>
+                    <Identifier start='821' end='824' name='Foo'/>
+                </ClassName>
+                <SuperClassName>
+                </SuperClassName>
+                <Interfaces>
+                </Interfaces>
+                <Block start='825' end='869' isCurly='true'>
+                    <FieldsDeclaration start='831' end='867' modifier='public'>
+                        <VariableNames>
+                            <Variable start='838' end='843' isDollared='true'>
+                                <Identifier start='839' end='843' name='test'/>
+                            </Variable>
+                        </VariableNames>
+                        <InitialValues>
+                            <Scalar start='846' end='866' type='STRING' value=''/>
+                        </InitialValues>
+                    </FieldsDeclaration>
+                </Block>
+            </ClassDeclaration>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_03.pass
new file mode 100644
index 0000000000..a1160e0637
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_indent_tabs_03.pass
@@ -0,0 +1,65 @@
+<testresult testFile='nowdoc_indent_tabs_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='826' end='839'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='839' end='846'>
+            <text>\tNOWDOC</text>
+        </token>
+        <token id='T_COMMA' start='846' end='847'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='848' end='853'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='853' end='854'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='854' end='855'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='856' end='856'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='856'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='855'>
+                <Assignment start='815' end='854' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='854' type='NEW'>
+                        <ArrayElement start='826' end='846'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='826' end='846' type='STRING' value=''/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='848' end='853'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='848' end='853' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_01.pass
new file mode 100644
index 0000000000..0fae0d3f8b
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_01.pass
@@ -0,0 +1,239 @@
+<testresult testFile='nowdoc_mixed_01.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='869' end='875'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='876' end='877'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='878' end='879'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='879' end='889'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='889' end='958'>
+            <text>    spaces\n\ttabs\nnospaces\n        \tspaces tabs\n\t\t        tabs spaces\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='958' end='961'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='961' end='962'>
+            <text>,</text>
+        </token>
+        <token id='T_VARIABLE' start='963' end='968'>
+            <text>$test</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='968' end='969'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='969' end='970'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='972' end='979'>
+            <text>$array2</text>
+        </token>
+        <token id='T_EQUAL' start='980' end='981'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='982' end='983'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='983' end='993'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='993' end='1053'>
+            <text>    spaces\n\ttabs\n        \tspaces tabs\n\t\t        tabs spaces\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='1053' end='1060'>
+            <text>    END</text>
+        </token>
+        <token id='T_COMMA' start='1060' end='1061'>
+            <text>,</text>
+        </token>
+        <token id='T_VARIABLE' start='1062' end='1067'>
+            <text>$test</text>
+        </token>
+        <token id='T_OPEN_RECT' start='1067' end='1068'>
+            <text>[</text>
+        </token>
+        <token id='T_LNUMBER' start='1068' end='1069'>
+            <text>0</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='1069' end='1070'>
+            <text>]</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='1070' end='1071'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='1071' end='1072'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1074' end='1081'>
+            <text>$array3</text>
+        </token>
+        <token id='T_EQUAL' start='1082' end='1083'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='1084' end='1085'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='1085' end='1095'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1095' end='1214'>
+            <text>    $test\n    spaces $test\n\ttabs {$test}\n                spaces tabs ${test}\n$test\n\t\t        tabs spaces\nnospaces test\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='1214' end='1221'>
+            <text>    END</text>
+        </token>
+        <token id='T_COMMA' start='1221' end='1222'>
+            <text>,</text>
+        </token>
+        <token id='T_DOLLAR' start='1223' end='1224'>
+            <text>$</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='1224' end='1225'>
+            <text>{</text>
+        </token>
+        <token id='T_STRING' start='1225' end='1229'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='1229' end='1230'>
+            <text>}</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='1230' end='1231'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='1231' end='1232'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1234' end='1239'>
+            <text>$test</text>
+        </token>
+        <token id='T_EQUAL' start='1240' end='1241'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='1242' end='1252'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1252' end='1280'>
+            <text>    \t    spaces tabs spaces\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='1280' end='1292'>
+            <text>        \tEND</text>
+        </token>
+        <token id='T_SEMICOLON' start='1292' end='1293'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='1309' end='1309'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='1294'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='815' end='869' commentType='singleLine'/>
+            <Comment start='1294' end='1309' commentType='singleLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='815' end='869' commentType='singleLine'/>
+            <Comment start='1294' end='1309' commentType='singleLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='869' end='970'>
+                <Assignment start='869' end='969' operator='EQUAL'>
+                    <Variable start='869' end='875' isDollared='true'>
+                        <Identifier start='870' end='875' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='878' end='969' type='NEW'>
+                        <ArrayElement start='879' end='961'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='879' end='961' type='STRING' value='    spaces\n\ttabs\nnospaces\n        \tspaces tabs\n\t\t        tabs spaces\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='963' end='968'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Variable start='963' end='968' isDollared='true'>
+                                    <Identifier start='964' end='968' name='test'/>
+                                </Variable>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='972' end='1072'>
+                <Assignment start='972' end='1071' operator='EQUAL'>
+                    <Variable start='972' end='979' isDollared='true'>
+                        <Identifier start='973' end='979' name='array2'/>
+                    </Variable>
+                    <ArrayCreation start='982' end='1071' type='NEW'>
+                        <ArrayElement start='983' end='1060'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='983' end='1060' type='STRING' value='    spaces\n\ttabs\n        \tspaces tabs\n\t\t        tabs spaces\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='1062' end='1070'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <ArrayAccess start='1062' end='1070' type='VARIABLE_ARRAY' isDollared='false'>
+                                    <ArrayDimension start='1067' end='1070'>
+                                        <Index>
+                                            <Scalar start='1068' end='1069' type='INT' value='0'/>
+                                        </Index>
+                                    </ArrayDimension>
+                                    <Name>
+                                        <Variable start='1062' end='1067' isDollared='true'>
+                                            <Identifier start='1063' end='1067' name='test'/>
+                                        </Variable>
+                                    </Name>
+                                </ArrayAccess>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1074' end='1232'>
+                <Assignment start='1074' end='1231' operator='EQUAL'>
+                    <Variable start='1074' end='1081' isDollared='true'>
+                        <Identifier start='1075' end='1081' name='array3'/>
+                    </Variable>
+                    <ArrayCreation start='1084' end='1231' type='NEW'>
+                        <ArrayElement start='1085' end='1221'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='1085' end='1221' type='STRING' value='    $test\n    spaces $test\n\ttabs {$test}\n                spaces tabs ${test}\n$test\n\t\t        tabs spaces\nnospaces test\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='1223' end='1230'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <ReflectionVariable start='1223' end='1230'>
+                                    <NamespaceName start='1225' end='1229' isCurrent='false' isGlobal='false'>
+                                        <Identifier start='1225' end='1229' name='test'/>
+                                    </NamespaceName>
+                                </ReflectionVariable>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1234' end='1293'>
+                <Assignment start='1234' end='1292' operator='EQUAL'>
+                    <Variable start='1234' end='1239' isDollared='true'>
+                        <Identifier start='1235' end='1239' name='test'/>
+                    </Variable>
+                    <Scalar start='1242' end='1292' type='STRING' value='    \t    spaces tabs spaces\n'/>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_02.pass
new file mode 100644
index 0000000000..489b3f13dd
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_02.pass
@@ -0,0 +1,151 @@
+<testresult testFile='nowdoc_mixed_02.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='820'>
+            <text>$name</text>
+        </token>
+        <token id='T_EQUAL' start='820' end='821'>
+            <text>=</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='821' end='830'>
+            <text>"Junichi"</text>
+        </token>
+        <token id='T_SEMICOLON' start='830' end='831'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='832' end='836'>
+            <text>$age</text>
+        </token>
+        <token id='T_EQUAL' start='836' end='837'>
+            <text>=</text>
+        </token>
+        <token id='T_LNUMBER' start='837' end='840'>
+            <text>100</text>
+        </token>
+        <token id='T_SEMICOLON' start='840' end='841'>
+            <text>;</text>
+        </token>
+        <token id='T_ECHO' start='842' end='846'>
+            <text>echo</text>
+        </token>
+        <token id='T_START_NOWDOC' start='847' end='859'>
+            <text>&lt;&lt;&lt;&apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='859' end='895'>
+            <text>Name: $name&lt;br&gt;\nMy age is: $age&lt;br&gt;\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='895' end='901'>
+            <text>NOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='901' end='902'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='903' end='908'>
+            <text>$name</text>
+        </token>
+        <token id='T_EQUAL' start='908' end='909'>
+            <text>=</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='909' end='914'>
+            <text>"Jun"</text>
+        </token>
+        <token id='T_SEMICOLON' start='914' end='915'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1049' end='1051'>
+            <text>$x</text>
+        </token>
+        <token id='T_EQUAL' start='1052' end='1053'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='1054' end='1071'>
+            <text>&lt;&lt;&lt;&apos;ENDOFNOWDOC&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1071' end='1195'>
+            <text>    This is another nowdoc test.\n    With another line in it. {$test} $test ${test} variable test.\n    test. $object-&gt;field\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='1195' end='1208'>
+            <text>\t\tENDOFNOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='1208' end='1209'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='1247' end='1249'>
+            <text>$y</text>
+        </token>
+        <token id='T_EQUAL' start='1250' end='1251'>
+            <text>=</text>
+        </token>
+        <token id='T_START_NOWDOC' start='1252' end='1269'>
+            <text>&lt;&lt;&lt;&apos;ENDOFNOWDOC&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='1269' end='1387'>
+            <text>\t\tThis is another nowdoc test.\n\t\tWith another line in it. {$test} $test ${test} variable test.\n\t\ttest. $object-&gt;field\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='1387' end='1402'>
+            <text>    ENDOFNOWDOC</text>
+        </token>
+        <token id='T_SEMICOLON' start='1402' end='1403'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='1404' end='1404'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='1404'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='917' end='979' commentType='singleLine'/>
+            <Comment start='979' end='1049' commentType='singleLine'/>
+            <Comment start='1211' end='1247' commentType='singleLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='917' end='979' commentType='singleLine'/>
+            <Comment start='979' end='1049' commentType='singleLine'/>
+            <Comment start='1211' end='1247' commentType='singleLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='831'>
+                <Assignment start='815' end='830' operator='EQUAL'>
+                    <Variable start='815' end='820' isDollared='true'>
+                        <Identifier start='816' end='820' name='name'/>
+                    </Variable>
+                    <Scalar start='821' end='830' type='STRING' value='"Junichi"'/>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='832' end='841'>
+                <Assignment start='832' end='840' operator='EQUAL'>
+                    <Variable start='832' end='836' isDollared='true'>
+                        <Identifier start='833' end='836' name='age'/>
+                    </Variable>
+                    <Scalar start='837' end='840' type='INT' value='100'/>
+                </Assignment>
+            </ExpressionStatement>
+            <EchoStatement start='842' end='902'>
+                <Scalar start='847' end='901' type='STRING' value='Name: $name&lt;br&gt;\nMy age is: $age&lt;br&gt;\n'/>
+            </EchoStatement>
+            <ExpressionStatement start='903' end='915'>
+                <Assignment start='903' end='914' operator='EQUAL'>
+                    <Variable start='903' end='908' isDollared='true'>
+                        <Identifier start='904' end='908' name='name'/>
+                    </Variable>
+                    <Scalar start='909' end='914' type='STRING' value='"Jun"'/>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1049' end='1209'>
+                <Assignment start='1049' end='1208' operator='EQUAL'>
+                    <Variable start='1049' end='1051' isDollared='true'>
+                        <Identifier start='1050' end='1051' name='x'/>
+                    </Variable>
+                    <Scalar start='1054' end='1208' type='STRING' value='    This is another nowdoc test.\n    With another line in it. {$test} $test ${test} variable test.\n    test. $object-&gt;field\n'/>
+                </Assignment>
+            </ExpressionStatement>
+            <ExpressionStatement start='1247' end='1403'>
+                <Assignment start='1247' end='1402' operator='EQUAL'>
+                    <Variable start='1247' end='1249' isDollared='true'>
+                        <Identifier start='1248' end='1249' name='y'/>
+                    </Variable>
+                    <Scalar start='1252' end='1402' type='STRING' value='\t\tThis is another nowdoc test.\n\t\tWith another line in it. {$test} $test ${test} variable test.\n\t\ttest. $object-&gt;field\n'/>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_03.pass
new file mode 100644
index 0000000000..578fb2b5d4
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_mixed_03.pass
@@ -0,0 +1,81 @@
+<testresult testFile='nowdoc_mixed_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='825' end='835'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='835' end='954'>
+            <text>    $test\n    spaces $test\n\ttabs {$test}\n                spaces tabs ${test}\n$test\n\t\t        tabs spaces\nnospaces test\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='954' end='961'>
+            <text>    END</text>
+        </token>
+        <token id='T_COMMA' start='961' end='962'>
+            <text>,</text>
+        </token>
+        <token id='T_DOLLAR' start='963' end='964'>
+            <text>$</text>
+        </token>
+        <token id='T_CURLY_OPEN' start='964' end='965'>
+            <text>{</text>
+        </token>
+        <token id='T_STRING' start='965' end='969'>
+            <text>test</text>
+        </token>
+        <token id='T_CURLY_CLOSE' start='969' end='970'>
+            <text>}</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='970' end='971'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='971' end='972'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='973' end='973'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='972'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='972'>
+                <Assignment start='815' end='971' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='971' type='NEW'>
+                        <ArrayElement start='825' end='961'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='825' end='961' type='STRING' value='    $test\n    spaces $test\n\ttabs {$test}\n                spaces tabs ${test}\n$test\n\t\t        tabs spaces\nnospaces test\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='963' end='970'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <ReflectionVariable start='963' end='970'>
+                                    <NamespaceName start='965' end='969' isCurrent='false' isGlobal='false'>
+                                        <Identifier start='965' end='969' name='test'/>
+                                    </NamespaceName>
+                                </ReflectionVariable>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_01.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_01.pass
new file mode 100644
index 0000000000..4b40d141af
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_01.pass
@@ -0,0 +1,101 @@
+<testresult testFile='nowdoc_new_line_01.php'>
+    <scanner>
+        <token id='T_STRING' start='815' end='819'>
+            <text>test</text>
+        </token>
+        <token id='T_OPEN_PARENTHESE' start='819' end='820'>
+            <text>(</text>
+        </token>
+        <token id='T_START_NOWDOC' start='820' end='833'>
+            <text>&lt;&lt;&lt; &apos;NOWDOC&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='833' end='851'>
+            <text>    foo\n  bar\nqux\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='851' end='857'>
+            <text>NOWDOC</text>
+        </token>
+        <token id='T_CLOSE_PARENTHESE' start='857' end='858'>
+            <text>)</text>
+        </token>
+        <token id='T_SEMICOLON' start='858' end='859'>
+            <text>;</text>
+        </token>
+        <token id='T_VARIABLE' start='861' end='867'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='868' end='869'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='870' end='871'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='871' end='881'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='881' end='893'>
+            <text>foo\nbar\nbaz\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='893' end='896'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='896' end='897'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='898' end='903'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='903' end='904'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='904' end='905'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='906' end='906'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='906'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='859'>
+                <FunctionInvocation start='815' end='858'>
+                    <FucntionName start='815' end='819'>
+                        <NamespaceName start='815' end='819' isCurrent='false' isGlobal='false'>
+                            <Identifier start='815' end='819' name='test'/>
+                        </NamespaceName>
+                    </FucntionName>
+                    <Parameters>
+                        <Scalar start='820' end='857' type='STRING' value='    foo\n  bar\nqux\n'/>
+                    </Parameters>
+                </FunctionInvocation>
+            </ExpressionStatement>
+            <ExpressionStatement start='861' end='905'>
+                <Assignment start='861' end='904' operator='EQUAL'>
+                    <Variable start='861' end='867' isDollared='true'>
+                        <Identifier start='862' end='867' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='870' end='904' type='NEW'>
+                        <ArrayElement start='871' end='896'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='871' end='896' type='STRING' value='foo\nbar\nbaz\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='898' end='903'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='898' end='903' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_02.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_02.pass
new file mode 100644
index 0000000000..7b96f772cc
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_02.pass
@@ -0,0 +1,68 @@
+<testresult testFile='nowdoc_new_line_02.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='825' end='835'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='835' end='850'>
+            <text>foo\nbar\nENDING\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='850' end='853'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='853' end='854'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='855' end='860'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='860' end='861'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='861' end='862'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='863' end='863'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='863'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='862'>
+                <Assignment start='815' end='861' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='861' type='NEW'>
+                        <ArrayElement start='825' end='853'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='825' end='853' type='STRING' value='foo\nbar\nENDING\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='855' end='860'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='855' end='860' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_03.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_03.pass
new file mode 100644
index 0000000000..a64601897e
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_03.pass
@@ -0,0 +1,68 @@
+<testresult testFile='nowdoc_new_line_03.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='825' end='835'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='835' end='870'>
+            <text>    foo END\n    bar\n        ENDING\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='870' end='873'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='873' end='874'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='875' end='880'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='880' end='881'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='881' end='882'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='883' end='883'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='883'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='882'>
+                <Assignment start='815' end='881' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='881' type='NEW'>
+                        <ArrayElement start='825' end='873'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='825' end='873' type='STRING' value='    foo END\n    bar\n        ENDING\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='875' end='880'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='875' end='880' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_04.pass b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_04.pass
new file mode 100644
index 0000000000..2d5198d630
--- /dev/null
+++ b/php/php.editor/test/unit/data/goldenfiles/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest/parser/php73/nowdoc_new_line_04.pass
@@ -0,0 +1,68 @@
+<testresult testFile='nowdoc_new_line_04.php'>
+    <scanner>
+        <token id='T_VARIABLE' start='815' end='821'>
+            <text>$array</text>
+        </token>
+        <token id='T_EQUAL' start='822' end='823'>
+            <text>=</text>
+        </token>
+        <token id='T_OPEN_RECT' start='824' end='825'>
+            <text>[</text>
+        </token>
+        <token id='T_START_NOWDOC' start='825' end='835'>
+            <text>&lt;&lt;&lt; &apos;END&apos;\n</text>
+        </token>
+        <token id='T_ENCAPSED_AND_WHITESPACE' start='835' end='876'>
+            <text>    foo END\n    $test bar\n        ENDING\n</text>
+        </token>
+        <token id='T_END_NOWDOC' start='876' end='879'>
+            <text>END</text>
+        </token>
+        <token id='T_COMMA' start='879' end='880'>
+            <text>,</text>
+        </token>
+        <token id='T_CONSTANT_ENCAPSED_STRING' start='881' end='886'>
+            <text>&apos;qux&apos;</text>
+        </token>
+        <token id='T_CLOSE_RECT' start='886' end='887'>
+            <text>]</text>
+        </token>
+        <token id='T_SEMICOLON' start='887' end='888'>
+            <text>;</text>
+        </token>
+        <token id='EOF' start='889' end='889'>
+            <text></text>
+        </token>
+    </scanner>
+    <Program start='0' end='889'>
+        <Comments>
+            <Comment start='6' end='813' commentType='multiLine'/>
+            <Comment start='6' end='813' commentType='multiLine'/>
+        </Comments>
+        <Statements>
+            <ExpressionStatement start='815' end='888'>
+                <Assignment start='815' end='887' operator='EQUAL'>
+                    <Variable start='815' end='821' isDollared='true'>
+                        <Identifier start='816' end='821' name='array'/>
+                    </Variable>
+                    <ArrayCreation start='824' end='887' type='NEW'>
+                        <ArrayElement start='825' end='879'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='825' end='879' type='STRING' value='    foo END\n    $test bar\n        ENDING\n'/>
+                            </Value>
+                        </ArrayElement>
+                        <ArrayElement start='881' end='886'>
+                            <Key>
+                            </Key>
+                            <Value>
+                                <Scalar start='881' end='886' type='STRING' value='&apos;qux&apos;'/>
+                            </Value>
+                        </ArrayElement>
+                    </ArrayCreation>
+                </Assignment>
+            </ExpressionStatement>
+        </Statements>
+    </Program>
+</testresult>
diff --git a/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php b/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php
new file mode 100644
index 0000000000..fcdc5331bf
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+   $array = [   <<< END
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END,    $test];
+
+$array2 = [<<< END
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< END
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END,    ${test}];
+
+    $test = <<< END
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php.formatted b/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php.formatted
new file mode 100644
index 0000000000..11f62a9300
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/formatting/flexibleHeredoc_01.php.formatted
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+$array = [<<< END
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END, $test];
+
+$array2 = [<<< END
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< END
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
+
+$test = <<< END
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/formatting/flexibleNowdoc_01.php b/php/php.editor/test/unit/data/testfiles/formatting/flexibleNowdoc_01.php
new file mode 100644
index 0000000000..907aff1e36
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/formatting/flexibleNowdoc_01.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+   $array = [   <<< 'END'
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END,    $test];
+
+$array2 = [<<< 'END'
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [   <<< 'END'
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END,    ${test}];
+
+    $test =     <<< 'END'
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/formatting/flexibleNowdoc_01.php.formatted b/php/php.editor/test/unit/data/testfiles/formatting/flexibleNowdoc_01.php.formatted
new file mode 100644
index 0000000000..5b5adcc069
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/formatting/flexibleNowdoc_01.php.formatted
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+$array = [<<< 'END'
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END, $test];
+
+$array2 = [<<< 'END'
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< 'END'
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
+
+$test = <<< 'END'
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_01.php
new file mode 100644
index 0000000000..eaa2308a7a
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+    spaces indentation
+    HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_02.php
new file mode 100644
index 0000000000..97546b05dd
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+    HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_03.php
new file mode 100644
index 0000000000..d4f17c9d2e
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< HEREDOC
+    HEREDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_04.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_04.php
new file mode 100644
index 0000000000..e408266d87
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_spaces_04.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< HEREDOC
+    HEREDOC, 'qux'];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_01.php
new file mode 100644
index 0000000000..7857ccd999
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+	tab indentation
+	HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_02.php
new file mode 100644
index 0000000000..c23c6e483f
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+	HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_03.php
new file mode 100644
index 0000000000..0f5e6f36a8
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_indent_tabs_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< HEREDOC
+	HEREDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_01.php
new file mode 100644
index 0000000000..1d58d920eb
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_01.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+$array = [<<< END
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END, $test];
+
+$array2 = [<<< END
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< END
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
+
+$test = <<< END
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_02.php
new file mode 100644
index 0000000000..b63c18b3df
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_02.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$name="Junichi";
+$age=100;
+echo <<<HEREDOC
+Name: $name<br>
+My age is: $age<br>
+HEREDOC;
+$name="Jun";
+
+// defferent indentation for body(spaces) ending marker(tabs)
+// allow this in the lexer but spaces and tabs MUST NOT be intermixed
+$x = <<<ENDOFHEREDOC
+    This is another heredoc test.
+    With another line in it. {$test} $test ${test} variable test.
+    test. $object->field
+		ENDOFHEREDOC;
+
+// body(tabs) ending marker(spaces)
+$y = <<<ENDOFHEREDOC
+		This is another heredoc test.
+		With another line in it. {$test} $test ${test} variable test.
+		test. $object->field
+    ENDOFHEREDOC;
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_03.php
new file mode 100644
index 0000000000..21eb41e7bc
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_mixed_03.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_01.php
new file mode 100644
index 0000000000..509e8a59ca
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_01.php
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+test(<<< HEREDOC
+    foo
+  bar
+qux
+HEREDOC);
+
+$array = [<<< END
+foo
+bar
+baz
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_02.php
new file mode 100644
index 0000000000..97059238c5
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+foo
+bar
+ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_03.php
new file mode 100644
index 0000000000..07db7dbc75
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_03.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    foo END
+    bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_04.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_04.php
new file mode 100644
index 0000000000..2c65996595
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/heredoc_new_line_04.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    foo END
+    $test bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_01.php
new file mode 100644
index 0000000000..eb89827d19
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+    spaces indentation
+    NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_02.php
new file mode 100644
index 0000000000..930ad64a02
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+    NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_03.php
new file mode 100644
index 0000000000..6a6a4dd45e
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< 'NOWDOC'
+    NOWDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_04.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_04.php
new file mode 100644
index 0000000000..f64b66aa51
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_spaces_04.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< 'NOWDOC'
+    NOWDOC, 'qux'];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_01.php
new file mode 100644
index 0000000000..7080d79380
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+	tab indentation
+	NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_02.php
new file mode 100644
index 0000000000..3fded31ccd
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+	NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_03.php
new file mode 100644
index 0000000000..59fc8f6446
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_indent_tabs_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< 'NOWDOC'
+	NOWDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_01.php
new file mode 100644
index 0000000000..50e6a531df
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_01.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+$array = [<<< 'END'
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END, $test];
+
+$array2 = [<<< 'END'
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< 'END'
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
+
+$test = <<< 'END'
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_02.php
new file mode 100644
index 0000000000..b6d23092b9
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_02.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$name="Junichi";
+$age=100;
+echo <<<'NOWDOC'
+Name: $name<br>
+My age is: $age<br>
+NOWDOC;
+$name="Jun";
+
+// defferent indentation for body(spaces) ending marker(tabs)
+// allow this in the lexer but spaces and tabs MUST NOT be intermixed
+$x = <<<'ENDOFNOWDOC'
+    This is another nowdoc test.
+    With another line in it. {$test} $test ${test} variable test.
+    test. $object->field
+		ENDOFNOWDOC;
+
+// body(tabs) ending marker(spaces)
+$y = <<<'ENDOFNOWDOC'
+		This is another nowdoc test.
+		With another line in it. {$test} $test ${test} variable test.
+		test. $object->field
+    ENDOFNOWDOC;
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_03.php
new file mode 100644
index 0000000000..2c60e758c8
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_mixed_03.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_01.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_01.php
new file mode 100644
index 0000000000..c4ee7dd48b
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_01.php
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+test(<<< 'NOWDOC'
+    foo
+  bar
+qux
+NOWDOC);
+
+$array = [<<< 'END'
+foo
+bar
+baz
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_02.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_02.php
new file mode 100644
index 0000000000..afe8493462
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+foo
+bar
+ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_03.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_03.php
new file mode 100644
index 0000000000..6663b33cba
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_03.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    foo END
+    bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_04.php b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_04.php
new file mode 100644
index 0000000000..61a034f1cb
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/lexer/php73/nowdoc_new_line_04.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    foo END
+    $test bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/heredoc_009.php b/php/php.editor/test/unit/data/testfiles/parser/heredoc_009.php
deleted file mode 100644
index 38f5d282f0..0000000000
--- a/php/php.editor/test/unit/data/testfiles/parser/heredoc_009.php
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-Torture the T_END_HEREDOC rules (heredoc)
---FILE--
-<?php
-
-require_once 'nowdoc.inc';
-
-print <<<ENDOFHEREDOC
-ENDOFHEREDOC    ;
-    ENDOFHEREDOC;
-ENDOFHEREDOC    
-    ENDOFHEREDOC
-$ENDOFHEREDOC;
-
-ENDOFHEREDOC;
-
-$x = <<<ENDOFHEREDOC
-ENDOFHEREDOC    ;
-    ENDOFHEREDOC;
-ENDOFHEREDOC    
-    ENDOFHEREDOC
-$ENDOFHEREDOC;
-
-ENDOFHEREDOC;
-
-print "{$x}";
-
-?>
---EXPECTF--
-Notice: Undefined variable: ENDOFHEREDOC in %s on line %d
-ENDOFHEREDOC    ;
-    ENDOFHEREDOC;
-ENDOFHEREDOC    
-    ENDOFHEREDOC
-;
-
-Notice: Undefined variable: ENDOFHEREDOC in %s on line %d
-ENDOFHEREDOC    ;
-    ENDOFHEREDOC;
-ENDOFHEREDOC    
-    ENDOFHEREDOC
-;
diff --git a/php/php.editor/test/unit/data/testfiles/parser/heredoc_010.php b/php/php.editor/test/unit/data/testfiles/parser/heredoc_010.php
deleted file mode 100644
index 5aa0433bcf..0000000000
--- a/php/php.editor/test/unit/data/testfiles/parser/heredoc_010.php
+++ /dev/null
@@ -1,32 +0,0 @@
---TEST--
-Torture the T_END_HEREDOC rules with variable expansions (heredoc)
---FILE--
-<?php
-
-require_once 'nowdoc.inc';
-$fooledYou = '';
-
-print <<<ENDOFHEREDOC
-{$fooledYou}ENDOFHEREDOC{$fooledYou}
-ENDOFHEREDOC{$fooledYou}
-{$fooledYou}ENDOFHEREDOC
-
-ENDOFHEREDOC;
-
-$x = <<<ENDOFHEREDOC
-{$fooledYou}ENDOFHEREDOC{$fooledYou}
-ENDOFHEREDOC{$fooledYou}
-{$fooledYou}ENDOFHEREDOC
-
-ENDOFHEREDOC;
-
-print "{$x}";
-
-?>
---EXPECT--
-ENDOFHEREDOC
-ENDOFHEREDOC
-ENDOFHEREDOC
-ENDOFHEREDOC
-ENDOFHEREDOC
-ENDOFHEREDOC
diff --git a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_009.php b/php/php.editor/test/unit/data/testfiles/parser/nowdoc_009.php
deleted file mode 100644
index ec8b78f010..0000000000
--- a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_009.php
+++ /dev/null
@@ -1,40 +0,0 @@
---TEST--
-Torture the T_END_NOWDOC rules (nowdoc)
---FILE--
-<?php
-
-require_once 'nowdoc.inc';
-
-print <<<'ENDOFNOWDOC'
-ENDOFNOWDOC    ;
-    ENDOFNOWDOC;
-ENDOFNOWDOC    
-    ENDOFNOWDOC
-$ENDOFNOWDOC;
-
-ENDOFNOWDOC;
-
-$x = <<<'ENDOFNOWDOC'
-ENDOFNOWDOC    ;
-    ENDOFNOWDOC;
-ENDOFNOWDOC    
-    ENDOFNOWDOC
-$ENDOFNOWDOC;
-
-ENDOFNOWDOC;
-
-print "{$x}";
-
-?>
---EXPECT--
-ENDOFNOWDOC    ;
-    ENDOFNOWDOC;
-ENDOFNOWDOC    
-    ENDOFNOWDOC
-$ENDOFNOWDOC;
-ENDOFNOWDOC    ;
-    ENDOFNOWDOC;
-ENDOFNOWDOC    
-    ENDOFNOWDOC
-$ENDOFNOWDOC;
-
diff --git a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_010.php b/php/php.editor/test/unit/data/testfiles/parser/nowdoc_010.php
deleted file mode 100644
index 6f288151ce..0000000000
--- a/php/php.editor/test/unit/data/testfiles/parser/nowdoc_010.php
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Torture the T_END_NOWDOC rules with variable expansions (nowdoc)
---FILE--
-<?php
-
-require_once 'nowdoc.inc';
-$fooledYou = '';
-
-print <<<'ENDOFNOWDOC'
-{$fooledYou}ENDOFNOWDOC{$fooledYou}
-ENDOFNOWDOC{$fooledYou}
-{$fooledYou}ENDOFNOWDOC
-
-ENDOFNOWDOC;
-
-$x = <<<'ENDOFNOWDOC'
-{$fooledYou}ENDOFNOWDOC{$fooledYou}
-ENDOFNOWDOC{$fooledYou}
-{$fooledYou}ENDOFNOWDOC
-
-ENDOFNOWDOC;
-
-print "{$x}";
-
-?>
---EXPECT--
-{$fooledYou}ENDOFNOWDOC{$fooledYou}
-ENDOFNOWDOC{$fooledYou}
-{$fooledYou}ENDOFNOWDOC
-{$fooledYou}ENDOFNOWDOC{$fooledYou}
-ENDOFNOWDOC{$fooledYou}
-{$fooledYou}ENDOFNOWDOC
-
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php.errors
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_01.php.errors
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_01.php.errors
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php.errors
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_02.php.errors
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_02.php.errors
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php.errors
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_03.php.errors
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_03.php.errors
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php
diff --git a/php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php.errors
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/functionCallTrailingCommas_04.php.errors
rename to php/php.editor/test/unit/data/testfiles/parser/php73/functionCallTrailingCommas_04.php.errors
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php
new file mode 100644
index 0000000000..eaa2308a7a
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+    spaces indentation
+    HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/listReferenceAssignment_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php.errors
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/listReferenceAssignment_01.php.errors
rename to php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_01.php.errors
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_02.php
new file mode 100644
index 0000000000..97546b05dd
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+    HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_03.php
new file mode 100644
index 0000000000..d4f17c9d2e
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< HEREDOC
+    HEREDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_04.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_04.php
new file mode 100644
index 0000000000..e408266d87
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_04.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< HEREDOC
+    HEREDOC, 'qux'];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_04.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_04.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_spaces_04.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_01.php
new file mode 100644
index 0000000000..7857ccd999
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+	tab indentation
+	HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_02.php
new file mode 100644
index 0000000000..c23c6e483f
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< HEREDOC
+	HEREDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_03.php
new file mode 100644
index 0000000000..0f5e6f36a8
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< HEREDOC
+	HEREDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_indent_tabs_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_01.php
new file mode 100644
index 0000000000..1d58d920eb
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_01.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+$array = [<<< END
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END, $test];
+
+$array2 = [<<< END
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< END
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
+
+$test = <<< END
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php
new file mode 100644
index 0000000000..b63c18b3df
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$name="Junichi";
+$age=100;
+echo <<<HEREDOC
+Name: $name<br>
+My age is: $age<br>
+HEREDOC;
+$name="Jun";
+
+// defferent indentation for body(spaces) ending marker(tabs)
+// allow this in the lexer but spaces and tabs MUST NOT be intermixed
+$x = <<<ENDOFHEREDOC
+    This is another heredoc test.
+    With another line in it. {$test} $test ${test} variable test.
+    test. $object->field
+		ENDOFHEREDOC;
+
+// body(tabs) ending marker(spaces)
+$y = <<<ENDOFHEREDOC
+		This is another heredoc test.
+		With another line in it. {$test} $test ${test} variable test.
+		test. $object->field
+    ENDOFHEREDOC;
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php
new file mode 100644
index 0000000000..21eb41e7bc
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_mixed_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_01.php
new file mode 100644
index 0000000000..509e8a59ca
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_01.php
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+test(<<< HEREDOC
+    foo
+  bar
+qux
+HEREDOC);
+
+$array = [<<< END
+foo
+bar
+baz
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_02.php
new file mode 100644
index 0000000000..97059238c5
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+foo
+bar
+ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_03.php
new file mode 100644
index 0000000000..07db7dbc75
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_03.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    foo END
+    bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_04.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_04.php
new file mode 100644
index 0000000000..2c65996595
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_04.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    foo END
+    $test bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_04.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_04.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_04.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_01.php
new file mode 100644
index 0000000000..e3fc863591
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_01.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    foo END
+    bar
+        END ING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_01.php.errors
new file mode 100644
index 0000000000..3d002594f3
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_01.php.errors
@@ -0,0 +1,16 @@
+[[865,868]-Syntax error
+ unexpected:	identifier 'ING'
+ after:	END_HEREDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 865-868:Syntax error
+ unexpected:	identifier 'ING'
+ after:	END_HEREDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??
+[[869,872]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	identifier 'END'] 869-872:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	identifier 'END'
+[[872,873]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','] 872-873:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','
+[[879,880]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]] 879-880:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php
new file mode 100644
index 0000000000..f2891f02f7
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< END
+    foo END
+    bar
+        END{$test}
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php.errors
new file mode 100644
index 0000000000..8ee22efc09
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/heredoc_new_line_error_02.php.errors
@@ -0,0 +1,16 @@
+[[864,865]-Syntax error
+ unexpected:	{
+ after:	END_HEREDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 864-865:Syntax error
+ unexpected:	{
+ after:	END_HEREDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??
+[[870,871]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	}] 870-871:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	}
+[[875,876]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','] 875-876:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','
+[[882,883]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]] 882-883:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]
diff --git a/php/php.editor/test/unit/data/testfiles/parser/listReferenceAssignment_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php
similarity index 100%
rename from php/php.editor/test/unit/data/testfiles/parser/listReferenceAssignment_01.php
rename to php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/listReferenceAssignment_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php
new file mode 100644
index 0000000000..eb89827d19
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+    spaces indentation
+    NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_02.php
new file mode 100644
index 0000000000..930ad64a02
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+    NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_03.php
new file mode 100644
index 0000000000..6a6a4dd45e
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< 'NOWDOC'
+    NOWDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_04.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_04.php
new file mode 100644
index 0000000000..f64b66aa51
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_04.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< 'NOWDOC'
+    NOWDOC, 'qux'];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_04.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_04.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_spaces_04.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_01.php
new file mode 100644
index 0000000000..7080d79380
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_01.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+	tab indentation
+	NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_02.php
new file mode 100644
index 0000000000..3fded31ccd
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class Foo
+{
+    public $test = <<< 'NOWDOC'
+	NOWDOC;
+}
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_03.php
new file mode 100644
index 0000000000..59fc8f6446
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_03.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [ <<< 'NOWDOC'
+	NOWDOC, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_indent_tabs_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_01.php
new file mode 100644
index 0000000000..50e6a531df
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_01.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// allow these in lexer but ParseError will be thrown
+$array = [<<< 'END'
+    spaces
+	tabs
+nospaces
+        	spaces tabs
+		        tabs spaces
+END, $test];
+
+$array2 = [<<< 'END'
+    spaces
+	tabs
+        	spaces tabs
+		        tabs spaces
+    END, $test[0]];
+
+$array3 = [<<< 'END'
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
+
+$test = <<< 'END'
+    	    spaces tabs spaces
+        	END; // spaces tabs
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php
new file mode 100644
index 0000000000..b6d23092b9
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$name="Junichi";
+$age=100;
+echo <<<'NOWDOC'
+Name: $name<br>
+My age is: $age<br>
+NOWDOC;
+$name="Jun";
+
+// defferent indentation for body(spaces) ending marker(tabs)
+// allow this in the lexer but spaces and tabs MUST NOT be intermixed
+$x = <<<'ENDOFNOWDOC'
+    This is another nowdoc test.
+    With another line in it. {$test} $test ${test} variable test.
+    test. $object->field
+		ENDOFNOWDOC;
+
+// body(tabs) ending marker(spaces)
+$y = <<<'ENDOFNOWDOC'
+		This is another nowdoc test.
+		With another line in it. {$test} $test ${test} variable test.
+		test. $object->field
+    ENDOFNOWDOC;
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php
new file mode 100644
index 0000000000..2c60e758c8
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    $test
+    spaces $test
+	tabs {$test}
+                spaces tabs ${test}
+$test
+		        tabs spaces
+nospaces test
+    END, ${test}];
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_mixed_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_01.php
new file mode 100644
index 0000000000..c4ee7dd48b
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_01.php
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+test(<<< 'NOWDOC'
+    foo
+  bar
+qux
+NOWDOC);
+
+$array = [<<< 'END'
+foo
+bar
+baz
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_01.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_01.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_02.php
new file mode 100644
index 0000000000..afe8493462
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+foo
+bar
+ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_02.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_02.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_03.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_03.php
new file mode 100644
index 0000000000..6663b33cba
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_03.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    foo END
+    bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_03.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_03.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_03.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_04.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_04.php
new file mode 100644
index 0000000000..61a034f1cb
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_04.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    foo END
+    $test bar
+        ENDING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_04.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_04.php.errors
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_04.php.errors
@@ -0,0 +1 @@
+
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_01.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_01.php
new file mode 100644
index 0000000000..f3902668b4
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_01.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    foo END
+    bar
+        END ING
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_01.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_01.php.errors
new file mode 100644
index 0000000000..7ad808c4e7
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_01.php.errors
@@ -0,0 +1,16 @@
+[[867,870]-Syntax error
+ unexpected:	identifier 'ING'
+ after:	END_NOWDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 867-870:Syntax error
+ unexpected:	identifier 'ING'
+ after:	END_NOWDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??
+[[871,874]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	identifier 'END'] 871-874:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	identifier 'END'
+[[874,875]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','] 874-875:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','
+[[881,882]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]] 881-882:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php
new file mode 100644
index 0000000000..05d5139efa
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+$array = [<<< 'END'
+    foo END
+    bar
+        END{$test}
+END, 'qux'];
diff --git a/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php.errors b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php.errors
new file mode 100644
index 0000000000..f964d901df
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/parser/php73/nowdoc_new_line_error_02.php.errors
@@ -0,0 +1,16 @@
+[[866,867]-Syntax error
+ unexpected:	{
+ after:	END_NOWDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??] 866-867:Syntax error
+ unexpected:	{
+ after:	END_NOWDOC
+ expected:	instanceof, as, =>, }, ',', OR, XOR, &&, ?, ;, ||, &&, |, ^, &, ==, !=, ===, !==, <=, >=, <=>, <, >, <<, >>, +, -, *, /, %, '.', ], ), :, ??
+[[872,873]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	}] 872-873:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	}
+[[877,878]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','] 877-878:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	','
+[[884,885]-POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]] 884-885:POSSIBLE Syntax Error (check preceding valid syntax error)
+ unexpected:	]
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java
index cb2ef9afab..642974c48f 100644
--- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/indent/PHPFormatterTest.java
@@ -780,4 +780,15 @@ public void testIssue271062() throws Exception {
         reformatFileContents("testfiles/formatting/issue271062.php", options);
     }
 
+    // PHP 7.3
+    public void testFlexibleHeredoc_01() throws Exception {
+        HashMap<String, Object> options = new HashMap<>(FmtOptions.getDefaults());
+        reformatFileContents("testfiles/formatting/flexibleHeredoc_01.php", options);
+    }
+
+    public void testFlexibleNowdoc_01() throws Exception {
+        HashMap<String, Object> options = new HashMap<>(FmtOptions.getDefaults());
+        reformatFileContents("testfiles/formatting/flexibleNowdoc_01.php", options);
+    }
+
 }
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java
index 845a83926b..00edfc3c2b 100644
--- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP53FeaturesTest.java
@@ -127,13 +127,9 @@ public void testNowDoc_08() throws Exception {
         performTest("lexer/nowdoc_008");
     }
 
-    public void testNowDoc_09() throws Exception {
-        performTest("lexer/nowdoc_009");
-    }
-
-    public void testNowDoc_10() throws Exception {
-        performTest("lexer/nowdoc_010");
-    }
+    // 09, 10: old syntax tests
+    // we don't provide support for them any longer
+    // we can use the new syntax since PHP 7.3
 
     public void testNowDoc_11() throws Exception {
         performTest("lexer/nowdoc_011");
@@ -187,13 +183,9 @@ public void testHereDoc53_08() throws Exception {
         performTest("lexer/heredoc_008");
     }
 
-    public void testHereDoc53_09() throws Exception {
-        performTest("lexer/heredoc_009");
-    }
-
-    public void testHereDoc53_10() throws Exception {
-        performTest("lexer/heredoc_010");
-    }
+    // 09, 10: old syntax tests
+    // we don't provide support for them any longer
+    // we can use the new syntax since PHP 7.3
 
     public void testHereDoc53_11() throws Exception {
         performTest("lexer/heredoc_011");
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest.java
new file mode 100644
index 0000000000..a18bcf4304
--- /dev/null
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/lexer/PHP73FeaturesTest.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.php.editor.lexer;
+
+public class PHP73FeaturesTest extends PHPLexerTestBase {
+
+    public PHP73FeaturesTest(String testName) {
+        super(testName);
+    }
+
+    // HEREDOC Closing Marker Indentation
+    public void testFlexibleHeredocIndentationSpaces_01() throws Exception {
+        performTest("lexer/php73/heredoc_indent_spaces_01");
+    }
+
+    public void testFlexibleHeredocIndentationSpaces_02() throws Exception {
+        performTest("lexer/php73/heredoc_indent_spaces_02");
+    }
+
+    public void testFlexibleHeredocIndentationSpaces_03() throws Exception {
+        performTest("lexer/php73/heredoc_indent_spaces_03");
+    }
+
+    public void testFlexibleHeredocIndentationSpaces_04() throws Exception {
+        // no newline at EOF
+        performTest("lexer/php73/heredoc_indent_spaces_04");
+    }
+
+    public void testFlexibleHeredocIndentationTabs_01() throws Exception {
+        performTest("lexer/php73/heredoc_indent_tabs_01");
+    }
+
+    public void testFlexibleHeredocIndentationTabs_02() throws Exception {
+        performTest("lexer/php73/heredoc_indent_tabs_02");
+    }
+
+    public void testFlexibleHeredocIndentationTabs_03() throws Exception {
+        performTest("lexer/php73/heredoc_indent_tabs_03");
+    }
+
+    // HEREDOC Closing Marker New Line
+    public void testFlexibleHeredocNewLine_01() throws Exception {
+        performTest("lexer/php73/heredoc_new_line_01");
+    }
+
+    public void testFlexibleHeredocNewLine_02() throws Exception {
+        performTest("lexer/php73/heredoc_new_line_02");
+    }
+
+    public void testFlexibleHeredocNewLine_03() throws Exception {
+        performTest("lexer/php73/heredoc_new_line_03");
+    }
+
+    public void testFlexibleHeredocNewLine_04() throws Exception {
+        performTest("lexer/php73/heredoc_new_line_04");
+    }
+
+    // HEREDOC Mixed
+    public void testFlexibleHeredocMixed_01() throws Exception {
+        performTest("lexer/php73/heredoc_mixed_01");
+    }
+
+    public void testFlexibleHeredocMixed_02() throws Exception {
+        performTest("lexer/php73/heredoc_mixed_02");
+    }
+
+    public void testFlexibleHeredocMixed_03() throws Exception {
+        // no new line at EOF
+        performTest("lexer/php73/heredoc_mixed_03");
+    }
+
+    // NOWDOC Closing Marker Indentation
+    public void testFlexibleNowdocIndentationSpaces_01() throws Exception {
+        performTest("lexer/php73/nowdoc_indent_spaces_01");
+    }
+
+    public void testFlexibleNowdocIndentationSpaces_02() throws Exception {
+        performTest("lexer/php73/nowdoc_indent_spaces_02");
+    }
+
+    public void testFlexibleNowdocIndentationSpaces_03() throws Exception {
+        performTest("lexer/php73/nowdoc_indent_spaces_03");
+    }
+
+    public void testFlexibleNowdocIndentationSpaces_04() throws Exception {
+        // no newline at EOF
+        performTest("lexer/php73/nowdoc_indent_spaces_04");
+    }
+
+    public void testFlexibleNowdocIndentationTabs_01() throws Exception {
+        performTest("lexer/php73/nowdoc_indent_tabs_01");
+    }
+
+    public void testFlexibleNowdocIndentationTabs_02() throws Exception {
+        performTest("lexer/php73/nowdoc_indent_tabs_02");
+    }
+
+    public void testFlexibleNowdocIndentationTabs_03() throws Exception {
+        performTest("lexer/php73/nowdoc_indent_tabs_03");
+    }
+
+    // NOWDOC Closing Marker New Line
+    public void testFlexibleNowdocNewLine_01() throws Exception {
+        performTest("lexer/php73/nowdoc_new_line_01");
+    }
+
+    public void testFlexibleNowdocNewLine_02() throws Exception {
+        performTest("lexer/php73/nowdoc_new_line_02");
+    }
+
+    public void testFlexibleNowdocNewLine_03() throws Exception {
+        performTest("lexer/php73/nowdoc_new_line_03");
+    }
+
+    public void testFlexibleNowdocNewLine_04() throws Exception {
+        performTest("lexer/php73/nowdoc_new_line_04");
+    }
+
+    // NOWDOC Mixed
+    public void testFlexibleNowdocMixed_01() throws Exception {
+        performTest("lexer/php73/nowdoc_mixed_01");
+    }
+
+    public void testFlexibleNowdocMixed_02() throws Exception {
+        performTest("lexer/php73/nowdoc_mixed_02");
+    }
+
+    public void testFlexibleNowdocMixed_03() throws Exception {
+        // no new line at EOF
+        performTest("lexer/php73/nowdoc_mixed_03");
+    }
+
+}
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java
index 09d7fd3d17..8c5cf7888b 100644
--- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/ASTPHP5ParserTest.java
@@ -161,13 +161,9 @@ public void testNowdoc_11() throws Exception {
         performTest("parser/nowdoc_008");
     }
 
-    public void testNowdoc_12() throws Exception {
-        performTest("parser/nowdoc_009");
-    }
-
-    public void testNowdoc_13() throws Exception {
-        performTest("parser/nowdoc_010");
-    }
+    // 12(nowdoc_009), 13(nowdoc_010): old syntax tests
+    // we don't provide support for them any longer
+    // we can use the new syntax since PHP 7.3
 
     public void testNowdoc_14() throws Exception {
         performTest("parser/nowdoc_011");
@@ -229,13 +225,9 @@ public void testHereDoc_10() throws Exception {
         performTest("parser/heredoc_008");
     }
 
-    public void testHereDoc_11() throws Exception {
-        performTest("parser/heredoc_009");
-    }
-
-    public void testHereDoc_12() throws Exception {
-        performTest("parser/heredoc_010");
-    }
+    // 11(heredoc_009), 12(heredoc_010): old syntax tests
+    // we don't provide support for them any longer
+    // we can use the new syntax since PHP 7.3
 
     public void testHereDoc_13() throws Exception {
         performTest("parser/heredoc_011");
@@ -873,11 +865,127 @@ public void testGroupUseTrailingCommas_04() throws Exception {
 
     // PHP 7.3
     public void testFunctionCallTrailingCommas_01() throws Exception {
-        performTest("parser/functionCallTrailingCommas_01");
+        performTest("parser/php73/functionCallTrailingCommas_01");
     }
 
     public void testListReferenceAssignment_01() throws Exception {
-        performTest("parser/listReferenceAssignment_01");
+        performTest("parser/php73/listReferenceAssignment_01");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_01() throws Exception {
+        performTest("parser/php73/heredoc_indent_spaces_01");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_02() throws Exception {
+        performTest("parser/php73/heredoc_indent_spaces_02");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_03() throws Exception {
+        performTest("parser/php73/heredoc_indent_spaces_03");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_04() throws Exception {
+        // no new line at EOF
+        performTest("parser/php73/heredoc_indent_spaces_04");
+    }
+
+    public void testFlexibleHeredocIndentTabs_01() throws Exception {
+        performTest("parser/php73/heredoc_indent_tabs_01");
+    }
+
+    public void testFlexibleHeredocIndentTabs_02() throws Exception {
+        performTest("parser/php73/heredoc_indent_tabs_02");
+    }
+
+    public void testFlexibleHeredocIndentTabs_03() throws Exception {
+        performTest("parser/php73/heredoc_indent_tabs_03");
+    }
+
+    public void testFlexibleHeredocNewLine_01() throws Exception {
+        performTest("parser/php73/heredoc_new_line_01");
+    }
+
+    public void testFlexibleHeredocNewLine_02() throws Exception {
+        performTest("parser/php73/heredoc_new_line_02");
+    }
+
+    public void testFlexibleHeredocNewLine_03() throws Exception {
+        performTest("parser/php73/heredoc_new_line_03");
+    }
+
+    public void testFlexibleHeredocNewLine_04() throws Exception {
+        performTest("parser/php73/heredoc_new_line_04");
+    }
+
+    public void testFlexibleHeredocMixed_01() throws Exception {
+        performTest("parser/php73/heredoc_mixed_01");
+    }
+
+    public void testFlexibleHeredocMixed_02() throws Exception {
+        performTest("parser/php73/heredoc_mixed_02");
+    }
+
+    public void testFlexibleHeredocMixed_03() throws Exception {
+        // no new line at EOF
+        performTest("parser/php73/heredoc_mixed_03");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_01() throws Exception {
+        performTest("parser/php73/nowdoc_indent_spaces_01");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_02() throws Exception {
+        performTest("parser/php73/nowdoc_indent_spaces_02");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_03() throws Exception {
+        performTest("parser/php73/nowdoc_indent_spaces_03");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_04() throws Exception {
+        // no new line at EOF
+        performTest("parser/php73/nowdoc_indent_spaces_04");
+    }
+
+    public void testFlexibleNowdocIndentTabs_01() throws Exception {
+        performTest("parser/php73/nowdoc_indent_tabs_01");
+    }
+
+    public void testFlexibleNowdocIndentTabs_02() throws Exception {
+        performTest("parser/php73/nowdoc_indent_tabs_02");
+    }
+
+    public void testFlexibleNowdocIndentTabs_03() throws Exception {
+        performTest("parser/php73/nowdoc_indent_tabs_03");
+    }
+
+    public void testFlexibleNowdocNewLine_01() throws Exception {
+        performTest("parser/php73/nowdoc_new_line_01");
+    }
+
+    public void testFlexibleNowdocNewLine_02() throws Exception {
+        performTest("parser/php73/nowdoc_new_line_02");
+    }
+
+    public void testFlexibleNowdocNewLine_03() throws Exception {
+        performTest("parser/php73/nowdoc_new_line_03");
+    }
+
+    public void testFlexibleNowdocNewLine_04() throws Exception {
+        performTest("parser/php73/nowdoc_new_line_04");
+    }
+
+    public void testFlexibleNowdocMixed_01() throws Exception {
+        performTest("parser/php73/nowdoc_mixed_01");
+    }
+
+    public void testFlexibleNowdocMixed_02() throws Exception {
+        performTest("parser/php73/nowdoc_mixed_02");
+    }
+
+    public void testFlexibleNowdocMixed_03() throws Exception {
+        // no new line at EOF
+        performTest("parser/php73/nowdoc_mixed_03");
     }
 
     @Override
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java
index 7b9c8de215..e984c35507 100644
--- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/parser/PhpParserErrorTest.java
@@ -781,23 +781,155 @@ public void testGroupUseTrailingCommas_04() throws Exception {
 
     // PHP 7.3
     public void testFunctionCallTrailingCommas_01() throws Exception {
-        checkErrors("testfiles/parser/functionCallTrailingCommas_01.php");
+        checkErrors("testfiles/parser/php73/functionCallTrailingCommas_01.php");
     }
 
     public void testFunctionCallTrailingCommas_02() throws Exception {
-        checkErrors("testfiles/parser/functionCallTrailingCommas_02.php");
+        checkErrors("testfiles/parser/php73/functionCallTrailingCommas_02.php");
     }
 
     public void testFunctionCallTrailingCommas_03() throws Exception {
-        checkErrors("testfiles/parser/functionCallTrailingCommas_03.php");
+        checkErrors("testfiles/parser/php73/functionCallTrailingCommas_03.php");
     }
 
     public void testFunctionCallTrailingCommas_04() throws Exception {
-        checkErrors("testfiles/parser/functionCallTrailingCommas_04.php");
+        checkErrors("testfiles/parser/php73/functionCallTrailingCommas_04.php");
     }
 
     public void testListReferenceAssignment_01() throws Exception {
-        checkErrors("testfiles/parser/listReferenceAssignment_01.php");
+        checkErrors("testfiles/parser/php73/listReferenceAssignment_01.php");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_01() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_indent_spaces_01.php");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_02() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_indent_spaces_02.php");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_03() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_indent_spaces_03.php");
+    }
+
+    public void testFlexibleHeredocIndentSpaces_04() throws Exception {
+        // no new line at EOF
+        checkErrors("testfiles/parser/php73/heredoc_indent_spaces_04.php");
+    }
+
+    public void testFlexibleHeredocIndentTabs_01() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_indent_tabs_01.php");
+    }
+
+    public void testFlexibleHeredocIndentTabs_02() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_indent_tabs_02.php");
+    }
+
+    public void testFlexibleHeredocIndentTabs_03() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_indent_tabs_03.php");
+    }
+
+    public void testFlexibleHeredocNewLine_01() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_new_line_01.php");
+    }
+
+    public void testFlexibleHeredocNewLine_02() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_new_line_02.php");
+    }
+
+    public void testFlexibleHeredocNewLine_03() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_new_line_03.php");
+    }
+
+    public void testFlexibleHeredocNewLine_04() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_new_line_04.php");
+    }
+
+    public void testFlexibleHeredocNewLineError_01() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_new_line_error_01.php");
+    }
+
+    public void testFlexibleHeredocNewLineError_02() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_new_line_error_02.php");
+    }
+
+    public void testFlexibleHeredocMixed_01() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_mixed_01.php");
+    }
+
+    public void testFlexibleHeredocMixed_02() throws Exception {
+        checkErrors("testfiles/parser/php73/heredoc_mixed_02.php");
+    }
+
+    public void testFlexibleHeredocMixed_03() throws Exception {
+        // no new line at EOF
+        checkErrors("testfiles/parser/php73/heredoc_mixed_03.php");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_01() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_01.php");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_02() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_02.php");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_03() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_03.php");
+    }
+
+    public void testFlexibleNowdocIndentSpaces_04() throws Exception {
+        // no new line at EOF
+        checkErrors("testfiles/parser/php73/nowdoc_indent_spaces_04.php");
+    }
+
+    public void testFlexibleNowdocIndentTabs_01() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_indent_tabs_01.php");
+    }
+
+    public void testFlexibleNowdocIndentTabs_02() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_indent_tabs_02.php");
+    }
+
+    public void testFlexibleNowdocIndentTabs_03() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_indent_tabs_03.php");
+    }
+
+    public void testFlexibleNowdocNewLine_01() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_new_line_01.php");
+    }
+
+    public void testFlexibleNowdocNewLine_02() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_new_line_02.php");
+    }
+
+    public void testFlexibleNowdocNewLine_03() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_new_line_03.php");
+    }
+
+    public void testFlexibleNowdocNewLine_04() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_new_line_04.php");
+    }
+
+    public void testFlexibleNowdocNewLineError_01() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_new_line_error_01.php");
+    }
+
+    public void testFlexibleNowdocNewLineError_02() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_new_line_error_02.php");
+    }
+
+    public void testFlexibleNowdocMixed_01() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_mixed_01.php");
+    }
+
+    public void testFlexibleNowdocMixed_02() throws Exception {
+        checkErrors("testfiles/parser/php73/nowdoc_mixed_02.php");
+    }
+
+    public void testFlexibleNowdocMixed_03() throws Exception {
+        // no new line at EOF
+        checkErrors("testfiles/parser/php73/nowdoc_mixed_03.php");
     }
 
 }
diff --git a/php/php.editor/tools/ASTPHP5Scanner.flex b/php/php.editor/tools/ASTPHP5Scanner.flex
index a2618c0e99..78165c345e 100644
--- a/php/php.editor/tools/ASTPHP5Scanner.flex
+++ b/php/php.editor/tools/ASTPHP5Scanner.flex
@@ -264,6 +264,32 @@ import org.netbeans.modules.web.common.api.ByteStack;
         return symbol;
     }
 
+    private boolean isLabelChar(char c) {
+        return c == '_'
+                || (c >= 'a' && c <= 'z')
+                || (c >= 'A' && c <= 'Z')
+                || (c >= 0x7f && c <= 0xff);
+    }
+
+    private boolean isEndHereOrNowdoc(String hereOrNowdoc) {
+        // check whether ID exists
+        String trimedText = yytext().trim();
+        boolean isEnd = false;
+        if (trimedText.startsWith(hereOrNowdoc)) {
+            if (trimedText.length() == hereOrNowdoc.length()) {
+                isEnd = true;
+            } else if (trimedText.length() > hereOrNowdoc.length()
+                    && !isLabelChar(trimedText.charAt(hereOrNowdoc.length()))) {
+                // e.g.
+                // $test = <<< END
+                // ENDING
+                // END
+                isEnd = true;
+            }
+        }
+        return isEnd;
+    }
+
     public int[] getParamenters(){
     	return new int[]{zzMarkedPos, zzPushbackPos, zzCurrentPos, zzStartRead, zzEndRead, yyline};
     }
@@ -1167,51 +1193,55 @@ yybegin(ST_DOCBLOCK);
 	yybegin(ST_NOWDOC);
 }
 
-<ST_START_NOWDOC>{LABEL}";"?[\r\n] {
-    int length = yylength() - 1;
-    yypushback(1);
-
-    if (yytext().charAt(length - 1) == ';') {
-        length--;
-        yypushback(1);
-    }
-    if (length == nowdoc.length() && yytext().substring(0, length).equals(nowdoc)) {
+<ST_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? {
+    /* <ST_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+    // there is no [\r\n] if it is the last line
+    // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]?
+    if (isEndHereOrNowdoc(nowdoc)) {
+        int indexOfNowdocId = yytext().indexOf(nowdoc);
+        int back = yylength() - indexOfNowdocId - nowdoc.length();
+        yypushback(back);
         nowdoc = null;
+        nowdoc_len = 0;
+        nowdocBody.delete(0, nowdocBody.length());
+        nowdocBodyStart = -1;
+        nowdocBodyLength = 0;
         yybegin(ST_IN_SCRIPTING);
         return createSymbol(ASTPHP5Symbols.T_END_NOWDOC);
     } else {
+        yypushback(1); // [\r\n] length
         yybegin(ST_NOWDOC);
         updateNowdocBodyInfo();
     }
 }
 
 
-<ST_NOWDOC>{NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] {
-    /* <ST_NOWDOC>{NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] */
-    String text = yytext();
-
-    if (text.charAt(text.length() - 2)== ';') {
-        text = text.substring(0, text.length() - 2);
-        yypushback(1);
-    } else {
-        text = text.substring(0, text.length() - 1);
+<ST_NOWDOC> {
+    {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? {
+        /* <ST_NOWDOC>{NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+        if (isEndHereOrNowdoc(nowdoc)) {
+            String yytext = yytext();
+            int newlineLength = yytext.startsWith("\r\n") ? 2 : 1;
+            int back = yylength() - newlineLength;
+            yypushback(back);
+            updateNowdocBodyInfo();
+            yybegin(ST_END_NOWDOC);
+            if (nowdocBodyLength > 0) {
+                return createFullNowdocBodySymbol();
+            }
+        } else {
+            yypushback(1);
+            updateNowdocBodyInfo();
+        }
     }
 
-    int textLength = text.length();
-    if (textLength > nowdoc_len && text.substring(textLength - nowdoc_len, textLength).equals(nowdoc)) {
-        yypushback(nowdoc_len + 1);
-        updateNowdocBodyInfo();
-        yybegin(ST_END_NOWDOC);
-        if (nowdocBodyLength > 0) {
-            return createFullNowdocBodySymbol();
-        }
-    } else {
-        yypushback(1);
+    {NOWDOC_CHARS}|{NEWLINE} {
+        /* <ST_NOWDOC>{NOWDOC_CHARS}|{NEWLINE} */
         updateNowdocBodyInfo();
     }
 }
 
-<ST_END_NOWDOC>{LABEL}";"?[\n\r] {
+<ST_END_NOWDOC>{TABS_AND_SPACES}{LABEL}";"? {
     /* <ST_END_NOWDOC>{LABEL}";"?[\n\r] */
     nowdoc=null;
     nowdoc_len=0;
@@ -1219,8 +1249,8 @@ yybegin(ST_DOCBLOCK);
     nowdocBodyStart = -1;
     nowdocBodyLength = 0;
     yybegin(ST_IN_SCRIPTING);
-    int back = 1;
-    if (yytext().charAt(yylength() - 2)==';') {
+    int back = 0;
+    if (yytext().charAt(yylength() - 1)==';') {
         back++;
     }
     yypushback(back);
@@ -1247,8 +1277,8 @@ yybegin(ST_DOCBLOCK);
 	yybegin(ST_HEREDOC);
 }
 
-<ST_START_HEREDOC>{LABEL}";"?[\n\r] {
-    /* <ST_START_HEREDOC>{LABEL}";"?[\n\r] */
+<ST_START_HEREDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? {
+    /* <ST_START_HEREDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
     int trailingNewLineLength = 1;
     int labelLength = yylength() - trailingNewLineLength;
     int back = trailingNewLineLength;
@@ -1258,9 +1288,10 @@ yybegin(ST_DOCBLOCK);
         labelLength--;
         back++;
     }
-    if (labelLength == heredoc.length()
-            && yytext.substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) {
-        back = back + heredoc.length();
+
+    if (isEndHereOrNowdoc(heredoc)) {
+        int indexOfHeredocId = yytext().indexOf(heredoc);
+        back += labelLength - indexOfHeredocId;
         yypushback(back);
         yybegin(ST_END_HEREDOC);
     } else {
@@ -1270,8 +1301,8 @@ yybegin(ST_DOCBLOCK);
 }
 
 <ST_HEREDOC> {
-    {NEWLINE}{LABEL}";"?[\n\r] {
-        /* <ST_HEREDOC> {NEWLINE}{LABEL}";"?[\n\r] */
+    {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? {
+        /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
         int trailingNewLineLength = 1;
         int labelLength = yylength() - trailingNewLineLength;
         int back = trailingNewLineLength;
@@ -1280,13 +1311,30 @@ yybegin(ST_DOCBLOCK);
            labelLength--;
            back++;
         }
-        if (labelLength > heredoc.length()
-                && yytext().substring(labelLength - heredoc.length(), labelLength).equals(heredoc)) {
-            back += heredoc.length();
+
+        if (isEndHereOrNowdoc(heredoc)) {
+            int indexOfHeredocId = yytext().indexOf(heredoc);
+            back += labelLength - indexOfHeredocId;
             yypushback(back);
             yybegin(ST_END_HEREDOC);
         } else {
-            yypushback(trailingNewLineLength);
+            int indexOfVariable1 = yytext().indexOf("$");
+            int indexOfVariable2 = yytext().indexOf("{$");
+            if (indexOfVariable1 > 0 && indexOfVariable2 == -1) {
+                yypushback(yylength() - indexOfVariable1);
+                updateHeredocBodyInfo();
+                return createFullHeredocBodySymbol();
+            } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) {
+                yypushback(yylength() - indexOfVariable2);
+                updateHeredocBodyInfo();
+                return createFullHeredocBodySymbol();
+            } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) {
+                yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2));
+                updateHeredocBodyInfo();
+                return createFullHeredocBodySymbol();
+            } else {
+                yypushback(trailingNewLineLength);
+            }
         }
         updateHeredocBodyInfo();
         if (yystate() == ST_END_HEREDOC) {
@@ -1321,14 +1369,14 @@ yybegin(ST_DOCBLOCK);
     }
 }
 
-<ST_END_HEREDOC>{LABEL}";"?[\n\r] {
-    /* <ST_END_HEREDOC>{LABEL}";"?[\n\r] { */
+<ST_END_HEREDOC>{TABS_AND_SPACES}{LABEL}";"? {
+    /* <ST_END_HEREDOC>{TABS_AND_SPACES}{LABEL}";"? */
     heredoc=null;
     resetHeredocBodyInfo();
     yybegin(ST_IN_SCRIPTING);
-    int back = 1;
+    int back = 0;
     // mark just the label
-    if (yytext().charAt(yylength() - 2)==';') {
+    if (yytext().charAt(yylength() - 1)==';') {
         back++;
     }
     yypushback(back);
diff --git a/php/php.editor/tools/Php5ColoringScanner.flex b/php/php.editor/tools/Php5ColoringScanner.flex
index 44dcea3412..23879167a3 100644
--- a/php/php.editor/tools/Php5ColoringScanner.flex
+++ b/php/php.editor/tools/Php5ColoringScanner.flex
@@ -211,6 +211,47 @@ import org.netbeans.modules.web.common.api.ByteStack;
         yybegin(state);
     }
 
+    private boolean isLabelChar(char c) {
+        return c == '_'
+                || (c >= 'a' && c <= 'z')
+                || (c >= 'A' && c <= 'Z')
+                || (c >= 0x7f && c <= 0xff);
+    }
+
+    private boolean isEndNowdoc() {
+        String yytext = yytext().trim();
+        int lastIndexOfNewline = yytext.lastIndexOf('\n');
+        if (lastIndexOfNewline == -1) {
+            lastIndexOfNewline = yytext.lastIndexOf('\r');
+        }
+        if (lastIndexOfNewline != -1) {
+            yytext = yytext.substring(lastIndexOfNewline);
+        }
+        return isEndHereOrNowdoc(yytext);
+    }
+
+    private boolean isEndHeredoc() {
+        return isEndHereOrNowdoc(yytext());
+    }
+
+    private boolean isEndHereOrNowdoc(String text) {
+        // check whether ID exists
+        String trimedText = text.trim();
+        boolean isEnd = false;
+        if (trimedText.startsWith(heredoc)) {
+            if (trimedText.length() == heredoc.length()) {
+                isEnd = true;
+            } else if (trimedText.length() > heredoc.length()
+                    && !isLabelChar(trimedText.charAt(heredoc.length()))) {
+                // e.g.
+                // $test = <<< END
+                // ENDING
+                // END
+                isEnd = true;
+            }
+        }
+        return isEnd;
+    }
 
  // End user code
 
@@ -1095,49 +1136,55 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t]
     yybegin(ST_PHP_NOWDOC);
 }
 
-<ST_PHP_START_NOWDOC>{LABEL}";"?[\r\n] {
-    int label_len = yylength() - 1;
-
-    if (yytext().charAt(label_len-1)==';') {
-        label_len--;
-    }
-
-    if (label_len==hereocLength && yytext().substring(0,label_len).equals(heredoc)) {
+<ST_PHP_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? {
+    /* <ST_START_NOWDOC>{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+    // there is no [\r\n] if it is the last line
+    // i.e. not [\r\n] but EOF, so check not [\r\n] but [\r\n]?
+    if (isEndNowdoc()) {
+        int indexOfNowdocId = yytext().indexOf(heredoc);
+        int back = yylength() - indexOfNowdocId - heredoc.length();
+        yypushback(back);
         heredoc=null;
         hereocLength=0;
         yybegin(ST_PHP_IN_SCRIPTING);
         return PHPTokenId.PHP_NOWDOC_TAG_END;
     } else {
-        return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
+        yypushback(1);
+        yybegin(ST_PHP_NOWDOC);
     }
 }
 
-
-<ST_PHP_NOWDOC>{NOWDOC_CHARS}*{NEWLINE}+{LABEL}";"?[\n\r] {
-    int label_len = yylength() - 1;
-    int back = 1;
-
-    if (yytext().charAt(label_len-1)==';') {
-       label_len--;
-           back++;
-    }
-    if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) {
-        back = back + hereocLength;
-        yypushback(back);
-        yybegin(ST_PHP_END_NOWDOC);
+<ST_PHP_NOWDOC> {
+    {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? {
+        /* <ST_PHP_NOWDOC>{NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\r\n]? */
+        if (isEndNowdoc()) {
+            String yytext = yytext();
+            int trailingNewlineOffset = (yytext.endsWith("\n") || yytext.endsWith("\r")) ? 2 : 0;
+            int lastIndexOfNewline = yytext.lastIndexOf('\n', yylength() - trailingNewlineOffset);
+            if (lastIndexOfNewline == -1) {
+                lastIndexOfNewline = yytext.lastIndexOf('\r', yylength() - trailingNewlineOffset);
+            }
+            int back = yylength() - lastIndexOfNewline - 1; // -1 [\r\n] length
+            yypushback(back);
+            yybegin(ST_PHP_END_NOWDOC);
+            return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
+        } else {
+            yypushback(1); // [\r\n] length
+        }
     }
-    else {
-        yypushback(1);
+
+    {NOWDOC_CHARS}|{NEWLINE} {
+        /* <ST_PHP_NOWDOC>{NOWDOC_CHARS}|{NEWLINE} */
+        // retrun PHPTokenId when the closing marker is found
     }
-    return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
 }
 
-<ST_PHP_END_NOWDOC>{LABEL}";"?[\n\r] {
+<ST_PHP_END_NOWDOC>{NEWLINE}*{TABS_AND_SPACES}{LABEL}";"? {
     heredoc=null; hereocLength=0;
     yybegin(ST_PHP_IN_SCRIPTING);
-    int back = 1;
+    int back = 0;
     // mark just the label
-    if (yytext().charAt(yylength() - 2)==';') {
+    if (yytext().charAt(yylength() - 1)==';') {
         back++;
     }
     yypushback(back);
@@ -1163,17 +1210,19 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t]
 }
 
 <ST_PHP_START_HEREDOC> {
-    {LABEL}";"?[\n\r] {
+    {TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? {
         int trailingNewLineLength = 1;
         int label_len = yylength() - trailingNewLineLength;
         int back = trailingNewLineLength;
 
-        if (yytext().charAt(label_len-1)==';') {
+        if (yytext().charAt(label_len - 1)==';') {
            label_len--;
            back++;
         }
-        if (label_len == hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) {
-            back = back + hereocLength;
+
+        if (isEndHeredoc()) {
+            int indexOfHeredocId = yytext().indexOf(heredoc);
+            back += label_len - indexOfHeredocId;
             yypushback(back);
             yybegin(ST_PHP_END_HEREDOC);
         } else {
@@ -1188,23 +1237,32 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t]
 }
 
 <ST_PHP_HEREDOC> {
-    {NEWLINE}{LABEL}";"?[\n\r] {
+    {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? {
+        /* {NEWLINE}{TABS_AND_SPACES}{LABEL}";"?[^\n\r]*[\n\r]? */
         int trailingNewLineLength = 1;
-        int label_len = yylength() - trailingNewLineLength;
-        int back = trailingNewLineLength;
-
-        if (yytext().charAt(label_len-1)==';') {
-           label_len--;
-           back++;
-        }
-        if (label_len > hereocLength && yytext().substring(label_len - hereocLength,label_len).equals(heredoc)) {
-            back = back + hereocLength;
+        if (isEndHeredoc()) {
+            String yytext = yytext();
+            int newlineLength = yytext.startsWith("\r\n") ? 2 : 1;
+            int back = yylength() - newlineLength;
             yypushback(back);
             yybegin(ST_PHP_END_HEREDOC);
         } else {
-            yypushback(trailingNewLineLength);
-            return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
+            int indexOfVariable1 = yytext().indexOf("$");
+            int indexOfVariable2 = yytext().indexOf("{$");
+            if (indexOfVariable1 > 0 && indexOfVariable2 == -1) {
+                yypushback(yylength() - indexOfVariable1);
+                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
+            } else if (indexOfVariable2 > 0 && indexOfVariable1 == -1) {
+                yypushback(yylength() - indexOfVariable2);
+                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
+            } else if (indexOfVariable1 > 0 && indexOfVariable2 > 0) {
+                yypushback(yylength() - Math.min(indexOfVariable1, indexOfVariable2));
+                return PHPTokenId.PHP_ENCAPSED_AND_WHITESPACE;
+            } else {
+                yypushback(trailingNewLineLength);
+            }
         }
+        return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
     }
 
     {HEREDOC_CHARS} {
@@ -1233,13 +1291,13 @@ PHP_TYPE_OBJECT=[o][b][j][e][c][t]
     return PHPTokenId.PHP_CONSTANT_ENCAPSED_STRING;
 }
 
-<ST_PHP_END_HEREDOC>{LABEL}";"?[\n\r] {
+<ST_PHP_END_HEREDOC>{TABS_AND_SPACES}{LABEL}";"? {
     heredoc=null;
     hereocLength=0;
     yybegin(ST_PHP_IN_SCRIPTING);
-    int back = 1;
+    int back = 0;
     // mark just the label
-    if (yytext().charAt(yylength() - 2)==';') {
+    if (yytext().charAt(yylength() - 1)==';') {
         back++;
     }
     yypushback(back);


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@netbeans.apache.org
For additional commands, e-mail: notifications-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists