Browse Source

[8.19] ESQL: Extend `RENAME` syntax to allow a `new = old` syntax (#129212) (#129254)

* ESQL: Extend `RENAME` syntax to allow a `new = old` syntax (#129212)

This extends RENAME's grammar to allow a new syntax: `| RENAME new_name
= old_name` This is supported along the existing `... old_name AS
new_name` syntax.

Closes #129208

(cherry picked from commit 6c7730d1c908ab6c93f6d4046cb3671505bef6d8)

* Fix merging
Bogdan Pintea 4 months ago
parent
commit
30cb238223

+ 9 - 0
docs/reference/esql/processing-commands/rename.asciidoc

@@ -11,6 +11,15 @@ The `RENAME` processing command renames one or more columns.
 RENAME old_name1 AS new_name1[, ..., old_nameN AS new_nameN]
 ----
 
+The following syntax is also supported:
+
+[source,esql]
+----
+RENAME new_name1 = old_name1[, ..., new_nameN = old_nameN]
+----
+
+TIP: Both syntax options can be used interchangeably but we recommend sticking to one for consistency and readability.
+
 *Parameters*
 
 `old_nameX`::

+ 47 - 0
x-pack/plugin/esql/qa/testFixtures/src/main/resources/rename.csv-spec

@@ -296,3 +296,50 @@ ROW a="keyword", b=5, c=null
 a:integer
 5
 ;
+
+useAssignmentOnly
+required_capability: rename_allow_assignment
+
+ROW a = 1, b = "two"
+| RENAME aa = a, bb = b
+;
+
+aa:integer | bb:keyword
+1          | two
+;
+
+useAssignmentAndASKeyword
+required_capability: rename_allow_assignment
+
+ROW a = 1, b = "two", c = null
+| RENAME aa = a, b AS bb, cc = c
+;
+
+aa:integer | bb:keyword | cc:null
+1          | two        | null
+;
+
+shadowWithAssignment
+required_capability: rename_allow_assignment
+
+ROW a = 1, b = "two"
+| RENAME a = b
+;
+
+a:keyword
+two
+;
+
+multipleRenamesWithAssignment
+required_capability: rename_sequential_processing
+required_capability: rename_allow_assignment
+
+ROW a="keyword", b=5, c=null
+| RENAME c = a, a = b
+| RENAME b = c
+| RENAME b = a, a = b
+;
+
+a:integer
+5
+;

+ 1 - 0
x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.g4

@@ -269,6 +269,7 @@ renameCommand
 
 renameClause:
     oldName=qualifiedNamePattern AS newName=qualifiedNamePattern
+    | newName=qualifiedNamePattern ASSIGN oldName=qualifiedNamePattern
     ;
 
 dissectCommand

+ 5 - 0
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java

@@ -307,6 +307,11 @@ public class EsqlCapabilities {
          */
         RENAME_SEQUENTIAL_PROCESSING,
 
+        /**
+         * Support for assignment in RENAME, besides the use of `AS` keyword.
+         */
+        RENAME_ALLOW_ASSIGNMENT,
+
         /**
          * Support for removing empty attribute in merging output.
          * See <a href="https://github.com/elastic/elasticsearch/issues/126392"> EVAL after STATS produces an empty column #126392 </a>

File diff suppressed because it is too large
+ 0 - 0
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.interp


+ 401 - 380
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.java

@@ -4674,6 +4674,7 @@ public class EsqlBaseParser extends ParserConfig {
     public QualifiedNamePatternContext qualifiedNamePattern(int i) {
       return getRuleContext(QualifiedNamePatternContext.class,i);
     }
+    public TerminalNode ASSIGN() { return getToken(EsqlBaseParser.ASSIGN, 0); }
     @SuppressWarnings("this-escape")
     public RenameClauseContext(ParserRuleContext parent, int invokingState) {
       super(parent, invokingState);
@@ -4698,14 +4699,31 @@ public class EsqlBaseParser extends ParserConfig {
     RenameClauseContext _localctx = new RenameClauseContext(_ctx, getState());
     enterRule(_localctx, 94, RULE_renameClause);
     try {
-      enterOuterAlt(_localctx, 1);
-      {
-      setState(562);
-      ((RenameClauseContext)_localctx).oldName = qualifiedNamePattern();
-      setState(563);
-      match(AS);
-      setState(564);
-      ((RenameClauseContext)_localctx).newName = qualifiedNamePattern();
+      setState(570);
+      _errHandler.sync(this);
+      switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) {
+      case 1:
+        enterOuterAlt(_localctx, 1);
+        {
+        setState(562);
+        ((RenameClauseContext)_localctx).oldName = qualifiedNamePattern();
+        setState(563);
+        match(AS);
+        setState(564);
+        ((RenameClauseContext)_localctx).newName = qualifiedNamePattern();
+        }
+        break;
+      case 2:
+        enterOuterAlt(_localctx, 2);
+        {
+        setState(566);
+        ((RenameClauseContext)_localctx).newName = qualifiedNamePattern();
+        setState(567);
+        match(ASSIGN);
+        setState(568);
+        ((RenameClauseContext)_localctx).oldName = qualifiedNamePattern();
+        }
+        break;
       }
     }
     catch (RecognitionException re) {
@@ -4757,18 +4775,18 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(566);
+      setState(572);
       match(DISSECT);
-      setState(567);
+      setState(573);
       primaryExpression(0);
-      setState(568);
+      setState(574);
       string();
-      setState(570);
+      setState(576);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) {
       case 1:
         {
-        setState(569);
+        setState(575);
         commandOptions();
         }
         break;
@@ -4821,11 +4839,11 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(572);
+      setState(578);
       match(GROK);
-      setState(573);
+      setState(579);
       primaryExpression(0);
-      setState(574);
+      setState(580);
       string();
       }
     }
@@ -4872,9 +4890,9 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(576);
+      setState(582);
       match(MV_EXPAND);
-      setState(577);
+      setState(583);
       qualifiedName();
       }
     }
@@ -4928,25 +4946,25 @@ public class EsqlBaseParser extends ParserConfig {
       int _alt;
       enterOuterAlt(_localctx, 1);
       {
-      setState(579);
+      setState(585);
       commandOption();
-      setState(584);
+      setState(590);
       _errHandler.sync(this);
-      _alt = getInterpreter().adaptivePredict(_input,55,_ctx);
+      _alt = getInterpreter().adaptivePredict(_input,56,_ctx);
       while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
         if ( _alt==1 ) {
           {
           {
-          setState(580);
+          setState(586);
           match(COMMA);
-          setState(581);
+          setState(587);
           commandOption();
           }
           } 
         }
-        setState(586);
+        setState(592);
         _errHandler.sync(this);
-        _alt = getInterpreter().adaptivePredict(_input,55,_ctx);
+        _alt = getInterpreter().adaptivePredict(_input,56,_ctx);
       }
       }
     }
@@ -4996,11 +5014,11 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(587);
+      setState(593);
       identifier();
-      setState(588);
+      setState(594);
       match(ASSIGN);
-      setState(589);
+      setState(595);
       constant();
       }
     }
@@ -5046,7 +5064,7 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(591);
+      setState(597);
       _la = _input.LA(1);
       if ( !(_la==FALSE || _la==TRUE) ) {
       _errHandler.recoverInline(this);
@@ -5101,20 +5119,20 @@ public class EsqlBaseParser extends ParserConfig {
     NumericValueContext _localctx = new NumericValueContext(_ctx, getState());
     enterRule(_localctx, 108, RULE_numericValue);
     try {
-      setState(595);
+      setState(601);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) {
       case 1:
         enterOuterAlt(_localctx, 1);
         {
-        setState(593);
+        setState(599);
         decimalValue();
         }
         break;
       case 2:
         enterOuterAlt(_localctx, 2);
         {
-        setState(594);
+        setState(600);
         integerValue();
         }
         break;
@@ -5163,12 +5181,12 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(598);
+      setState(604);
       _errHandler.sync(this);
       _la = _input.LA(1);
       if (_la==PLUS || _la==MINUS) {
         {
-        setState(597);
+        setState(603);
         _la = _input.LA(1);
         if ( !(_la==PLUS || _la==MINUS) ) {
         _errHandler.recoverInline(this);
@@ -5181,7 +5199,7 @@ public class EsqlBaseParser extends ParserConfig {
         }
       }
 
-      setState(600);
+      setState(606);
       match(DECIMAL_LITERAL);
       }
     }
@@ -5228,12 +5246,12 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(603);
+      setState(609);
       _errHandler.sync(this);
       _la = _input.LA(1);
       if (_la==PLUS || _la==MINUS) {
         {
-        setState(602);
+        setState(608);
         _la = _input.LA(1);
         if ( !(_la==PLUS || _la==MINUS) ) {
         _errHandler.recoverInline(this);
@@ -5246,7 +5264,7 @@ public class EsqlBaseParser extends ParserConfig {
         }
       }
 
-      setState(605);
+      setState(611);
       match(INTEGER_LITERAL);
       }
     }
@@ -5290,7 +5308,7 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(607);
+      setState(613);
       match(QUOTED_STRING);
       }
     }
@@ -5340,7 +5358,7 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(609);
+      setState(615);
       _la = _input.LA(1);
       if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & -432345564227567616L) != 0)) ) {
       _errHandler.recoverInline(this);
@@ -5395,9 +5413,9 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(611);
+      setState(617);
       match(EXPLAIN);
-      setState(612);
+      setState(618);
       subqueryExpression();
       }
     }
@@ -5445,11 +5463,11 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(614);
+      setState(620);
       match(OPENING_BRACKET);
-      setState(615);
+      setState(621);
       query(0);
-      setState(616);
+      setState(622);
       match(CLOSING_BRACKET);
       }
     }
@@ -5506,9 +5524,9 @@ public class EsqlBaseParser extends ParserConfig {
       _localctx = new ShowInfoContext(_localctx);
       enterOuterAlt(_localctx, 1);
       {
-      setState(618);
+      setState(624);
       match(SHOW);
-      setState(619);
+      setState(625);
       match(INFO);
       }
     }
@@ -5571,48 +5589,48 @@ public class EsqlBaseParser extends ParserConfig {
       int _alt;
       enterOuterAlt(_localctx, 1);
       {
-      setState(621);
+      setState(627);
       match(ENRICH);
-      setState(622);
+      setState(628);
       ((EnrichCommandContext)_localctx).policyName = match(ENRICH_POLICY_NAME);
-      setState(625);
+      setState(631);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
       case 1:
         {
-        setState(623);
+        setState(629);
         match(ON);
-        setState(624);
+        setState(630);
         ((EnrichCommandContext)_localctx).matchField = qualifiedNamePattern();
         }
         break;
       }
-      setState(636);
+      setState(642);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) {
       case 1:
         {
-        setState(627);
+        setState(633);
         match(WITH);
-        setState(628);
+        setState(634);
         enrichWithClause();
-        setState(633);
+        setState(639);
         _errHandler.sync(this);
-        _alt = getInterpreter().adaptivePredict(_input,60,_ctx);
+        _alt = getInterpreter().adaptivePredict(_input,61,_ctx);
         while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
           if ( _alt==1 ) {
             {
             {
-            setState(629);
+            setState(635);
             match(COMMA);
-            setState(630);
+            setState(636);
             enrichWithClause();
             }
             } 
           }
-          setState(635);
+          setState(641);
           _errHandler.sync(this);
-          _alt = getInterpreter().adaptivePredict(_input,60,_ctx);
+          _alt = getInterpreter().adaptivePredict(_input,61,_ctx);
         }
         }
         break;
@@ -5667,19 +5685,19 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(641);
+      setState(647);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,62,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) {
       case 1:
         {
-        setState(638);
+        setState(644);
         ((EnrichWithClauseContext)_localctx).newName = qualifiedNamePattern();
-        setState(639);
+        setState(645);
         match(ASSIGN);
         }
         break;
       }
-      setState(643);
+      setState(649);
       ((EnrichWithClauseContext)_localctx).enrichField = qualifiedNamePattern();
       }
     }
@@ -5736,34 +5754,34 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(645);
+      setState(651);
       match(CHANGE_POINT);
-      setState(646);
+      setState(652);
       ((ChangePointCommandContext)_localctx).value = qualifiedName();
-      setState(649);
+      setState(655);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
       case 1:
         {
-        setState(647);
+        setState(653);
         match(ON);
-        setState(648);
+        setState(654);
         ((ChangePointCommandContext)_localctx).key = qualifiedName();
         }
         break;
       }
-      setState(656);
+      setState(662);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) {
       case 1:
         {
-        setState(651);
+        setState(657);
         match(AS);
-        setState(652);
+        setState(658);
         ((ChangePointCommandContext)_localctx).targetType = qualifiedName();
-        setState(653);
+        setState(659);
         match(COMMA);
-        setState(654);
+        setState(660);
         ((ChangePointCommandContext)_localctx).targetPvalue = qualifiedName();
         }
         break;
@@ -5819,13 +5837,13 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(658);
+      setState(664);
       match(DEV_LOOKUP);
-      setState(659);
+      setState(665);
       ((LookupCommandContext)_localctx).tableName = indexPattern();
-      setState(660);
+      setState(666);
       match(ON);
-      setState(661);
+      setState(667);
       ((LookupCommandContext)_localctx).matchFields = qualifiedNamePatterns();
       }
     }
@@ -5878,18 +5896,18 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(663);
+      setState(669);
       match(DEV_INLINESTATS);
-      setState(664);
+      setState(670);
       ((InlinestatsCommandContext)_localctx).stats = aggFields();
-      setState(667);
+      setState(673);
       _errHandler.sync(this);
-      switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) {
+      switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) {
       case 1:
         {
-        setState(665);
+        setState(671);
         match(BY);
-        setState(666);
+        setState(672);
         ((InlinestatsCommandContext)_localctx).grouping = fields();
         }
         break;
@@ -5947,7 +5965,7 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(669);
+      setState(675);
       ((JoinCommandContext)_localctx).type = _input.LT(1);
       _la = _input.LA(1);
       if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 25296896L) != 0)) ) {
@@ -5958,11 +5976,11 @@ public class EsqlBaseParser extends ParserConfig {
         _errHandler.reportMatch(this);
         consume();
       }
-      setState(670);
+      setState(676);
       match(JOIN);
-      setState(671);
+      setState(677);
       joinTarget();
-      setState(672);
+      setState(678);
       joinCondition();
       }
     }
@@ -6009,7 +6027,7 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(674);
+      setState(680);
       ((JoinTargetContext)_localctx).index = indexPattern();
       }
     }
@@ -6064,27 +6082,27 @@ public class EsqlBaseParser extends ParserConfig {
       int _alt;
       enterOuterAlt(_localctx, 1);
       {
-      setState(676);
+      setState(682);
       match(ON);
-      setState(677);
+      setState(683);
       joinPredicate();
-      setState(682);
+      setState(688);
       _errHandler.sync(this);
-      _alt = getInterpreter().adaptivePredict(_input,66,_ctx);
+      _alt = getInterpreter().adaptivePredict(_input,67,_ctx);
       while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
         if ( _alt==1 ) {
           {
           {
-          setState(678);
+          setState(684);
           match(COMMA);
-          setState(679);
+          setState(685);
           joinPredicate();
           }
           } 
         }
-        setState(684);
+        setState(690);
         _errHandler.sync(this);
-        _alt = getInterpreter().adaptivePredict(_input,66,_ctx);
+        _alt = getInterpreter().adaptivePredict(_input,67,_ctx);
       }
       }
     }
@@ -6130,7 +6148,7 @@ public class EsqlBaseParser extends ParserConfig {
     try {
       enterOuterAlt(_localctx, 1);
       {
-      setState(685);
+      setState(691);
       valueExpression();
       }
     }
@@ -6212,7 +6230,7 @@ public class EsqlBaseParser extends ParserConfig {
   }
 
   public static final String _serializedATN =
-    "\u0004\u0001\u0088\u02b0\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+
+    "\u0004\u0001\u0088\u02b6\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+
     "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+
     "\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007"+
     "\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b"+
@@ -6289,211 +6307,211 @@ public class EsqlBaseParser extends ParserConfig {
     "\b*\n*\f*\u021a\t*\u0001+\u0001+\u0003+\u021e\b+\u0001+\u0001+\u0003+"+
     "\u0222\b+\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001"+
     ".\u0001.\u0005.\u022e\b.\n.\f.\u0231\t.\u0001/\u0001/\u0001/\u0001/\u0001"+
-    "0\u00010\u00010\u00010\u00030\u023b\b0\u00011\u00011\u00011\u00011\u0001"+
-    "2\u00012\u00012\u00013\u00013\u00013\u00053\u0247\b3\n3\f3\u024a\t3\u0001"+
-    "4\u00014\u00014\u00014\u00015\u00015\u00016\u00016\u00036\u0254\b6\u0001"+
-    "7\u00037\u0257\b7\u00017\u00017\u00018\u00038\u025c\b8\u00018\u00018\u0001"+
-    "9\u00019\u0001:\u0001:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001"+
-    "<\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0003>\u0272\b>\u0001"+
-    ">\u0001>\u0001>\u0001>\u0005>\u0278\b>\n>\f>\u027b\t>\u0003>\u027d\b>"+
-    "\u0001?\u0001?\u0001?\u0003?\u0282\b?\u0001?\u0001?\u0001@\u0001@\u0001"+
-    "@\u0001@\u0003@\u028a\b@\u0001@\u0001@\u0001@\u0001@\u0001@\u0003@\u0291"+
-    "\b@\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0003"+
-    "B\u029c\bB\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001E\u0001"+
-    "E\u0001E\u0001E\u0005E\u02a9\bE\nE\fE\u02ac\tE\u0001F\u0001F\u0001F\u0000"+
-    "\u0004\u0002\n\u0012\u0014G\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010"+
-    "\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPR"+
-    "TVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u0000"+
-    "\t\u0001\u0000@A\u0001\u0000BD\u0002\u0000\u001e\u001eUU\u0001\u0000L"+
-    "M\u0002\u0000##((\u0002\u0000++..\u0002\u0000**88\u0002\u000099;?\u0002"+
-    "\u0000\u0011\u0011\u0017\u0018\u02cd\u0000\u008e\u0001\u0000\u0000\u0000"+
-    "\u0002\u0091\u0001\u0000\u0000\u0000\u0004\u00a2\u0001\u0000\u0000\u0000"+
-    "\u0006\u00b6\u0001\u0000\u0000\u0000\b\u00b8\u0001\u0000\u0000\u0000\n"+
-    "\u00d8\u0001\u0000\u0000\u0000\f\u00f3\u0001\u0000\u0000\u0000\u000e\u00f5"+
-    "\u0001\u0000\u0000\u0000\u0010\u0102\u0001\u0000\u0000\u0000\u0012\u0108"+
-    "\u0001\u0000\u0000\u0000\u0014\u011d\u0001\u0000\u0000\u0000\u0016\u0127"+
-    "\u0001\u0000\u0000\u0000\u0018\u013a\u0001\u0000\u0000\u0000\u001a\u013c"+
-    "\u0001\u0000\u0000\u0000\u001c\u0147\u0001\u0000\u0000\u0000\u001e\u014b"+
-    "\u0001\u0000\u0000\u0000 \u014d\u0001\u0000\u0000\u0000\"\u0150\u0001"+
-    "\u0000\u0000\u0000$\u015b\u0001\u0000\u0000\u0000&\u015f\u0001\u0000\u0000"+
-    "\u0000(\u0176\u0001\u0000\u0000\u0000*\u0178\u0001\u0000\u0000\u0000,"+
-    "\u017a\u0001\u0000\u0000\u0000.\u017c\u0001\u0000\u0000\u00000\u0180\u0001"+
-    "\u0000\u0000\u00002\u0182\u0001\u0000\u0000\u00004\u018b\u0001\u0000\u0000"+
-    "\u00006\u018f\u0001\u0000\u0000\u00008\u019f\u0001\u0000\u0000\u0000:"+
-    "\u01a2\u0001\u0000\u0000\u0000<\u01aa\u0001\u0000\u0000\u0000>\u01b2\u0001"+
-    "\u0000\u0000\u0000@\u01b7\u0001\u0000\u0000\u0000B\u01bf\u0001\u0000\u0000"+
-    "\u0000D\u01c7\u0001\u0000\u0000\u0000F\u01cf\u0001\u0000\u0000\u0000H"+
-    "\u01d4\u0001\u0000\u0000\u0000J\u0200\u0001\u0000\u0000\u0000L\u0204\u0001"+
-    "\u0000\u0000\u0000N\u0208\u0001\u0000\u0000\u0000P\u020d\u0001\u0000\u0000"+
-    "\u0000R\u020f\u0001\u0000\u0000\u0000T\u0212\u0001\u0000\u0000\u0000V"+
-    "\u021b\u0001\u0000\u0000\u0000X\u0223\u0001\u0000\u0000\u0000Z\u0226\u0001"+
-    "\u0000\u0000\u0000\\\u0229\u0001\u0000\u0000\u0000^\u0232\u0001\u0000"+
-    "\u0000\u0000`\u0236\u0001\u0000\u0000\u0000b\u023c\u0001\u0000\u0000\u0000"+
-    "d\u0240\u0001\u0000\u0000\u0000f\u0243\u0001\u0000\u0000\u0000h\u024b"+
-    "\u0001\u0000\u0000\u0000j\u024f\u0001\u0000\u0000\u0000l\u0253\u0001\u0000"+
-    "\u0000\u0000n\u0256\u0001\u0000\u0000\u0000p\u025b\u0001\u0000\u0000\u0000"+
-    "r\u025f\u0001\u0000\u0000\u0000t\u0261\u0001\u0000\u0000\u0000v\u0263"+
-    "\u0001\u0000\u0000\u0000x\u0266\u0001\u0000\u0000\u0000z\u026a\u0001\u0000"+
-    "\u0000\u0000|\u026d\u0001\u0000\u0000\u0000~\u0281\u0001\u0000\u0000\u0000"+
-    "\u0080\u0285\u0001\u0000\u0000\u0000\u0082\u0292\u0001\u0000\u0000\u0000"+
-    "\u0084\u0297\u0001\u0000\u0000\u0000\u0086\u029d\u0001\u0000\u0000\u0000"+
-    "\u0088\u02a2\u0001\u0000\u0000\u0000\u008a\u02a4\u0001\u0000\u0000\u0000"+
-    "\u008c\u02ad\u0001\u0000\u0000\u0000\u008e\u008f\u0003\u0002\u0001\u0000"+
-    "\u008f\u0090\u0005\u0000\u0000\u0001\u0090\u0001\u0001\u0000\u0000\u0000"+
-    "\u0091\u0092\u0006\u0001\uffff\uffff\u0000\u0092\u0093\u0003\u0004\u0002"+
-    "\u0000\u0093\u0099\u0001\u0000\u0000\u0000\u0094\u0095\n\u0001\u0000\u0000"+
-    "\u0095\u0096\u0005\u001d\u0000\u0000\u0096\u0098\u0003\u0006\u0003\u0000"+
-    "\u0097\u0094\u0001\u0000\u0000\u0000\u0098\u009b\u0001\u0000\u0000\u0000"+
-    "\u0099\u0097\u0001\u0000\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000"+
-    "\u009a\u0003\u0001\u0000\u0000\u0000\u009b\u0099\u0001\u0000\u0000\u0000"+
-    "\u009c\u00a3\u0003v;\u0000\u009d\u00a3\u0003&\u0013\u0000\u009e\u00a3"+
-    "\u0003 \u0010\u0000\u009f\u00a3\u0003z=\u0000\u00a0\u00a1\u0004\u0002"+
-    "\u0001\u0000\u00a1\u00a3\u00036\u001b\u0000\u00a2\u009c\u0001\u0000\u0000"+
-    "\u0000\u00a2\u009d\u0001\u0000\u0000\u0000\u00a2\u009e\u0001\u0000\u0000"+
-    "\u0000\u00a2\u009f\u0001\u0000\u0000\u0000\u00a2\u00a0\u0001\u0000\u0000"+
-    "\u0000\u00a3\u0005\u0001\u0000\u0000\u0000\u00a4\u00b7\u00038\u001c\u0000"+
-    "\u00a5\u00b7\u0003\b\u0004\u0000\u00a6\u00b7\u0003X,\u0000\u00a7\u00b7"+
-    "\u0003R)\u0000\u00a8\u00b7\u0003:\u001d\u0000\u00a9\u00b7\u0003T*\u0000"+
-    "\u00aa\u00b7\u0003Z-\u0000\u00ab\u00b7\u0003\\.\u0000\u00ac\u00b7\u0003"+
-    "`0\u0000\u00ad\u00b7\u0003b1\u0000\u00ae\u00b7\u0003|>\u0000\u00af\u00b7"+
-    "\u0003d2\u0000\u00b0\u00b7\u0003\u0086C\u0000\u00b1\u00b7\u0003\u0080"+
-    "@\u0000\u00b2\u00b3\u0004\u0003\u0002\u0000\u00b3\u00b7\u0003\u0084B\u0000"+
-    "\u00b4\u00b5\u0004\u0003\u0003\u0000\u00b5\u00b7\u0003\u0082A\u0000\u00b6"+
-    "\u00a4\u0001\u0000\u0000\u0000\u00b6\u00a5\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00a6\u0001\u0000\u0000\u0000\u00b6\u00a7\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00a8\u0001\u0000\u0000\u0000\u00b6\u00a9\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00aa\u0001\u0000\u0000\u0000\u00b6\u00ab\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00ac\u0001\u0000\u0000\u0000\u00b6\u00ad\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00ae\u0001\u0000\u0000\u0000\u00b6\u00af\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00b0\u0001\u0000\u0000\u0000\u00b6\u00b1\u0001\u0000\u0000\u0000\u00b6"+
-    "\u00b2\u0001\u0000\u0000\u0000\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7"+
-    "\u0007\u0001\u0000\u0000\u0000\u00b8\u00b9\u0005\u0010\u0000\u0000\u00b9"+
-    "\u00ba\u0003\n\u0005\u0000\u00ba\t\u0001\u0000\u0000\u0000\u00bb\u00bc"+
-    "\u0006\u0005\uffff\uffff\u0000\u00bc\u00bd\u00051\u0000\u0000\u00bd\u00d9"+
-    "\u0003\n\u0005\b\u00be\u00d9\u0003\u0010\b\u0000\u00bf\u00d9\u0003\f\u0006"+
-    "\u0000\u00c0\u00c2\u0003\u0010\b\u0000\u00c1\u00c3\u00051\u0000\u0000"+
-    "\u00c2\u00c1\u0001\u0000\u0000\u0000\u00c2\u00c3\u0001\u0000\u0000\u0000"+
-    "\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c5\u0005,\u0000\u0000\u00c5"+
-    "\u00c6\u00050\u0000\u0000\u00c6\u00cb\u0003\u0010\b\u0000\u00c7\u00c8"+
-    "\u0005\'\u0000\u0000\u00c8\u00ca\u0003\u0010\b\u0000\u00c9\u00c7\u0001"+
-    "\u0000\u0000\u0000\u00ca\u00cd\u0001\u0000\u0000\u0000\u00cb\u00c9\u0001"+
-    "\u0000\u0000\u0000\u00cb\u00cc\u0001\u0000\u0000\u0000\u00cc\u00ce\u0001"+
-    "\u0000\u0000\u0000\u00cd\u00cb\u0001\u0000\u0000\u0000\u00ce\u00cf\u0005"+
-    "7\u0000\u0000\u00cf\u00d9\u0001\u0000\u0000\u0000\u00d0\u00d1\u0003\u0010"+
-    "\b\u0000\u00d1\u00d3\u0005-\u0000\u0000\u00d2\u00d4\u00051\u0000\u0000"+
-    "\u00d3\u00d2\u0001\u0000\u0000\u0000\u00d3\u00d4\u0001\u0000\u0000\u0000"+
-    "\u00d4\u00d5\u0001\u0000\u0000\u0000\u00d5\u00d6\u00052\u0000\u0000\u00d6"+
-    "\u00d9\u0001\u0000\u0000\u0000\u00d7\u00d9\u0003\u000e\u0007\u0000\u00d8"+
-    "\u00bb\u0001\u0000\u0000\u0000\u00d8\u00be\u0001\u0000\u0000\u0000\u00d8"+
-    "\u00bf\u0001\u0000\u0000\u0000\u00d8\u00c0\u0001\u0000\u0000\u0000\u00d8"+
-    "\u00d0\u0001\u0000\u0000\u0000\u00d8\u00d7\u0001\u0000\u0000\u0000\u00d9"+
-    "\u00e2\u0001\u0000\u0000\u0000\u00da\u00db\n\u0005\u0000\u0000\u00db\u00dc"+
-    "\u0005\"\u0000\u0000\u00dc\u00e1\u0003\n\u0005\u0006\u00dd\u00de\n\u0004"+
-    "\u0000\u0000\u00de\u00df\u00054\u0000\u0000\u00df\u00e1\u0003\n\u0005"+
-    "\u0005\u00e0\u00da\u0001\u0000\u0000\u0000\u00e0\u00dd\u0001\u0000\u0000"+
-    "\u0000\u00e1\u00e4\u0001\u0000\u0000\u0000\u00e2\u00e0\u0001\u0000\u0000"+
-    "\u0000\u00e2\u00e3\u0001\u0000\u0000\u0000\u00e3\u000b\u0001\u0000\u0000"+
-    "\u0000\u00e4\u00e2\u0001\u0000\u0000\u0000\u00e5\u00e7\u0003\u0010\b\u0000"+
-    "\u00e6\u00e8\u00051\u0000\u0000\u00e7\u00e6\u0001\u0000\u0000\u0000\u00e7"+
-    "\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001\u0000\u0000\u0000\u00e9"+
-    "\u00ea\u0005/\u0000\u0000\u00ea\u00eb\u0003r9\u0000\u00eb\u00f4\u0001"+
-    "\u0000\u0000\u0000\u00ec\u00ee\u0003\u0010\b\u0000\u00ed\u00ef\u00051"+
-    "\u0000\u0000\u00ee\u00ed\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000"+
-    "\u0000\u0000\u00ef\u00f0\u0001\u0000\u0000\u0000\u00f0\u00f1\u00056\u0000"+
-    "\u0000\u00f1\u00f2\u0003r9\u0000\u00f2\u00f4\u0001\u0000\u0000\u0000\u00f3"+
-    "\u00e5\u0001\u0000\u0000\u0000\u00f3\u00ec\u0001\u0000\u0000\u0000\u00f4"+
-    "\r\u0001\u0000\u0000\u0000\u00f5\u00f8\u0003@ \u0000\u00f6\u00f7\u0005"+
-    "%\u0000\u0000\u00f7\u00f9\u0003\u001e\u000f\u0000\u00f8\u00f6\u0001\u0000"+
-    "\u0000\u0000\u00f8\u00f9\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001\u0000"+
-    "\u0000\u0000\u00fa\u00fb\u0005&\u0000\u0000\u00fb\u00fc\u0003J%\u0000"+
-    "\u00fc\u000f\u0001\u0000\u0000\u0000\u00fd\u0103\u0003\u0012\t\u0000\u00fe"+
-    "\u00ff\u0003\u0012\t\u0000\u00ff\u0100\u0003t:\u0000\u0100\u0101\u0003"+
-    "\u0012\t\u0000\u0101\u0103\u0001\u0000\u0000\u0000\u0102\u00fd\u0001\u0000"+
-    "\u0000\u0000\u0102\u00fe\u0001\u0000\u0000\u0000\u0103\u0011\u0001\u0000"+
-    "\u0000\u0000\u0104\u0105\u0006\t\uffff\uffff\u0000\u0105\u0109\u0003\u0014"+
-    "\n\u0000\u0106\u0107\u0007\u0000\u0000\u0000\u0107\u0109\u0003\u0012\t"+
-    "\u0003\u0108\u0104\u0001\u0000\u0000\u0000\u0108\u0106\u0001\u0000\u0000"+
-    "\u0000\u0109\u0112\u0001\u0000\u0000\u0000\u010a\u010b\n\u0002\u0000\u0000"+
-    "\u010b\u010c\u0007\u0001\u0000\u0000\u010c\u0111\u0003\u0012\t\u0003\u010d"+
-    "\u010e\n\u0001\u0000\u0000\u010e\u010f\u0007\u0000\u0000\u0000\u010f\u0111"+
-    "\u0003\u0012\t\u0002\u0110\u010a\u0001\u0000\u0000\u0000\u0110\u010d\u0001"+
-    "\u0000\u0000\u0000\u0111\u0114\u0001\u0000\u0000\u0000\u0112\u0110\u0001"+
-    "\u0000\u0000\u0000\u0112\u0113\u0001\u0000\u0000\u0000\u0113\u0013\u0001"+
-    "\u0000\u0000\u0000\u0114\u0112\u0001\u0000\u0000\u0000\u0115\u0116\u0006"+
-    "\n\uffff\uffff\u0000\u0116\u011e\u0003J%\u0000\u0117\u011e\u0003@ \u0000"+
-    "\u0118\u011e\u0003\u0016\u000b\u0000\u0119\u011a\u00050\u0000\u0000\u011a"+
-    "\u011b\u0003\n\u0005\u0000\u011b\u011c\u00057\u0000\u0000\u011c\u011e"+
-    "\u0001\u0000\u0000\u0000\u011d\u0115\u0001\u0000\u0000\u0000\u011d\u0117"+
-    "\u0001\u0000\u0000\u0000\u011d\u0118\u0001\u0000\u0000\u0000\u011d\u0119"+
-    "\u0001\u0000\u0000\u0000\u011e\u0124\u0001\u0000\u0000\u0000\u011f\u0120"+
-    "\n\u0001\u0000\u0000\u0120\u0121\u0005%\u0000\u0000\u0121\u0123\u0003"+
-    "\u001e\u000f\u0000\u0122\u011f\u0001\u0000\u0000\u0000\u0123\u0126\u0001"+
-    "\u0000\u0000\u0000\u0124\u0122\u0001\u0000\u0000\u0000\u0124\u0125\u0001"+
-    "\u0000\u0000\u0000\u0125\u0015\u0001\u0000\u0000\u0000\u0126\u0124\u0001"+
-    "\u0000\u0000\u0000\u0127\u0128\u0003\u0018\f\u0000\u0128\u0136\u00050"+
-    "\u0000\u0000\u0129\u0137\u0005B\u0000\u0000\u012a\u012f\u0003\n\u0005"+
-    "\u0000\u012b\u012c\u0005\'\u0000\u0000\u012c\u012e\u0003\n\u0005\u0000"+
-    "\u012d\u012b\u0001\u0000\u0000\u0000\u012e\u0131\u0001\u0000\u0000\u0000"+
-    "\u012f\u012d\u0001\u0000\u0000\u0000\u012f\u0130\u0001\u0000\u0000\u0000"+
-    "\u0130\u0134\u0001\u0000\u0000\u0000\u0131\u012f\u0001\u0000\u0000\u0000"+
-    "\u0132\u0133\u0005\'\u0000\u0000\u0133\u0135\u0003\u001a\r\u0000\u0134"+
-    "\u0132\u0001\u0000\u0000\u0000\u0134\u0135\u0001\u0000\u0000\u0000\u0135"+
-    "\u0137\u0001\u0000\u0000\u0000\u0136\u0129\u0001\u0000\u0000\u0000\u0136"+
-    "\u012a\u0001\u0000\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137"+
-    "\u0138\u0001\u0000\u0000\u0000\u0138\u0139\u00057\u0000\u0000\u0139\u0017"+
-    "\u0001\u0000\u0000\u0000\u013a\u013b\u0003P(\u0000\u013b\u0019\u0001\u0000"+
-    "\u0000\u0000\u013c\u013d\u0005E\u0000\u0000\u013d\u0142\u0003\u001c\u000e"+
-    "\u0000\u013e\u013f\u0005\'\u0000\u0000\u013f\u0141\u0003\u001c\u000e\u0000"+
-    "\u0140\u013e\u0001\u0000\u0000\u0000\u0141\u0144\u0001\u0000\u0000\u0000"+
-    "\u0142\u0140\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000\u0000\u0000"+
-    "\u0143\u0145\u0001\u0000\u0000\u0000\u0144\u0142\u0001\u0000\u0000\u0000"+
-    "\u0145\u0146\u0005F\u0000\u0000\u0146\u001b\u0001\u0000\u0000\u0000\u0147"+
-    "\u0148\u0003r9\u0000\u0148\u0149\u0005&\u0000\u0000\u0149\u014a\u0003"+
-    "J%\u0000\u014a\u001d\u0001\u0000\u0000\u0000\u014b\u014c\u0003F#\u0000"+
-    "\u014c\u001f\u0001\u0000\u0000\u0000\u014d\u014e\u0005\f\u0000\u0000\u014e"+
-    "\u014f\u0003\"\u0011\u0000\u014f!\u0001\u0000\u0000\u0000\u0150\u0155"+
-    "\u0003$\u0012\u0000\u0151\u0152\u0005\'\u0000\u0000\u0152\u0154\u0003"+
-    "$\u0012\u0000\u0153\u0151\u0001\u0000\u0000\u0000\u0154\u0157\u0001\u0000"+
-    "\u0000\u0000\u0155\u0153\u0001\u0000\u0000\u0000\u0155\u0156\u0001\u0000"+
-    "\u0000\u0000\u0156#\u0001\u0000\u0000\u0000\u0157\u0155\u0001\u0000\u0000"+
-    "\u0000\u0158\u0159\u0003@ \u0000\u0159\u015a\u0005$\u0000\u0000\u015a"+
-    "\u015c\u0001\u0000\u0000\u0000\u015b\u0158\u0001\u0000\u0000\u0000\u015b"+
-    "\u015c\u0001\u0000\u0000\u0000\u015c\u015d\u0001\u0000\u0000\u0000\u015d"+
-    "\u015e\u0003\n\u0005\u0000\u015e%\u0001\u0000\u0000\u0000\u015f\u0160"+
-    "\u0005\u0006\u0000\u0000\u0160\u0165\u0003(\u0014\u0000\u0161\u0162\u0005"+
-    "\'\u0000\u0000\u0162\u0164\u0003(\u0014\u0000\u0163\u0161\u0001\u0000"+
-    "\u0000\u0000\u0164\u0167\u0001\u0000\u0000\u0000\u0165\u0163\u0001\u0000"+
-    "\u0000\u0000\u0165\u0166\u0001\u0000\u0000\u0000\u0166\u0169\u0001\u0000"+
-    "\u0000\u0000\u0167\u0165\u0001\u0000\u0000\u0000\u0168\u016a\u00030\u0018"+
-    "\u0000\u0169\u0168\u0001\u0000\u0000\u0000\u0169\u016a\u0001\u0000\u0000"+
-    "\u0000\u016a\'\u0001\u0000\u0000\u0000\u016b\u016c\u0003*\u0015\u0000"+
-    "\u016c\u016d\u0005&\u0000\u0000\u016d\u016f\u0001\u0000\u0000\u0000\u016e"+
-    "\u016b\u0001\u0000\u0000\u0000\u016e\u016f\u0001\u0000\u0000\u0000\u016f"+
-    "\u0170\u0001\u0000\u0000\u0000\u0170\u0177\u0003.\u0017\u0000\u0171\u0174"+
-    "\u0003.\u0017\u0000\u0172\u0173\u0005%\u0000\u0000\u0173\u0175\u0003,"+
-    "\u0016\u0000\u0174\u0172\u0001\u0000\u0000\u0000\u0174\u0175\u0001\u0000"+
-    "\u0000\u0000\u0175\u0177\u0001\u0000\u0000\u0000\u0176\u016e\u0001\u0000"+
-    "\u0000\u0000\u0176\u0171\u0001\u0000\u0000\u0000\u0177)\u0001\u0000\u0000"+
-    "\u0000\u0178\u0179\u0007\u0002\u0000\u0000\u0179+\u0001\u0000\u0000\u0000"+
-    "\u017a\u017b\u0007\u0002\u0000\u0000\u017b-\u0001\u0000\u0000\u0000\u017c"+
-    "\u017d\u0007\u0002\u0000\u0000\u017d/\u0001\u0000\u0000\u0000\u017e\u0181"+
-    "\u00032\u0019\u0000\u017f\u0181\u00034\u001a\u0000\u0180\u017e\u0001\u0000"+
-    "\u0000\u0000\u0180\u017f\u0001\u0000\u0000\u0000\u01811\u0001\u0000\u0000"+
-    "\u0000\u0182\u0183\u0005T\u0000\u0000\u0183\u0188\u0005U\u0000\u0000\u0184"+
-    "\u0185\u0005\'\u0000\u0000\u0185\u0187\u0005U\u0000\u0000\u0186\u0184"+
-    "\u0001\u0000\u0000\u0000\u0187\u018a\u0001\u0000\u0000\u0000\u0188\u0186"+
-    "\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000\u0000\u0000\u01893\u0001"+
-    "\u0000\u0000\u0000\u018a\u0188\u0001\u0000\u0000\u0000\u018b\u018c\u0005"+
-    "J\u0000\u0000\u018c\u018d\u00032\u0019\u0000\u018d\u018e\u0005K\u0000"+
-    "\u0000\u018e5\u0001\u0000\u0000\u0000\u018f\u0190\u0005\u0015\u0000\u0000"+
-    "\u0190\u0195\u0003(\u0014\u0000\u0191\u0192\u0005\'\u0000\u0000\u0192"+
-    "\u0194\u0003(\u0014\u0000\u0193\u0191\u0001\u0000\u0000\u0000\u0194\u0197"+
-    "\u0001\u0000\u0000\u0000\u0195\u0193\u0001\u0000\u0000\u0000\u0195\u0196"+
-    "\u0001\u0000\u0000\u0000\u0196\u0199\u0001\u0000\u0000\u0000\u0197\u0195"+
-    "\u0001\u0000\u0000\u0000\u0198\u019a\u0003<\u001e\u0000\u0199\u0198\u0001"+
-    "\u0000\u0000\u0000\u0199\u019a\u0001\u0000\u0000\u0000\u019a\u019d\u0001"+
-    "\u0000\u0000\u0000\u019b\u019c\u0005!\u0000\u0000\u019c\u019e\u0003\""+
-    "\u0011\u0000\u019d\u019b\u0001\u0000\u0000\u0000\u019d\u019e\u0001\u0000"+
+    "/\u0001/\u0001/\u0001/\u0003/\u023b\b/\u00010\u00010\u00010\u00010\u0003"+
+    "0\u0241\b0\u00011\u00011\u00011\u00011\u00012\u00012\u00012\u00013\u0001"+
+    "3\u00013\u00053\u024d\b3\n3\f3\u0250\t3\u00014\u00014\u00014\u00014\u0001"+
+    "5\u00015\u00016\u00016\u00036\u025a\b6\u00017\u00037\u025d\b7\u00017\u0001"+
+    "7\u00018\u00038\u0262\b8\u00018\u00018\u00019\u00019\u0001:\u0001:\u0001"+
+    ";\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001"+
+    ">\u0001>\u0001>\u0001>\u0003>\u0278\b>\u0001>\u0001>\u0001>\u0001>\u0005"+
+    ">\u027e\b>\n>\f>\u0281\t>\u0003>\u0283\b>\u0001?\u0001?\u0001?\u0003?"+
+    "\u0288\b?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0003@\u0290\b@\u0001"+
+    "@\u0001@\u0001@\u0001@\u0001@\u0003@\u0297\b@\u0001A\u0001A\u0001A\u0001"+
+    "A\u0001A\u0001B\u0001B\u0001B\u0001B\u0003B\u02a2\bB\u0001C\u0001C\u0001"+
+    "C\u0001C\u0001C\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0005E\u02af"+
+    "\bE\nE\fE\u02b2\tE\u0001F\u0001F\u0001F\u0000\u0004\u0002\n\u0012\u0014"+
+    "G\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a"+
+    "\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082"+
+    "\u0084\u0086\u0088\u008a\u008c\u0000\t\u0001\u0000@A\u0001\u0000BD\u0002"+
+    "\u0000\u001e\u001eUU\u0001\u0000LM\u0002\u0000##((\u0002\u0000++..\u0002"+
+    "\u0000**88\u0002\u000099;?\u0002\u0000\u0011\u0011\u0017\u0018\u02d4\u0000"+
+    "\u008e\u0001\u0000\u0000\u0000\u0002\u0091\u0001\u0000\u0000\u0000\u0004"+
+    "\u00a2\u0001\u0000\u0000\u0000\u0006\u00b6\u0001\u0000\u0000\u0000\b\u00b8"+
+    "\u0001\u0000\u0000\u0000\n\u00d8\u0001\u0000\u0000\u0000\f\u00f3\u0001"+
+    "\u0000\u0000\u0000\u000e\u00f5\u0001\u0000\u0000\u0000\u0010\u0102\u0001"+
+    "\u0000\u0000\u0000\u0012\u0108\u0001\u0000\u0000\u0000\u0014\u011d\u0001"+
+    "\u0000\u0000\u0000\u0016\u0127\u0001\u0000\u0000\u0000\u0018\u013a\u0001"+
+    "\u0000\u0000\u0000\u001a\u013c\u0001\u0000\u0000\u0000\u001c\u0147\u0001"+
+    "\u0000\u0000\u0000\u001e\u014b\u0001\u0000\u0000\u0000 \u014d\u0001\u0000"+
+    "\u0000\u0000\"\u0150\u0001\u0000\u0000\u0000$\u015b\u0001\u0000\u0000"+
+    "\u0000&\u015f\u0001\u0000\u0000\u0000(\u0176\u0001\u0000\u0000\u0000*"+
+    "\u0178\u0001\u0000\u0000\u0000,\u017a\u0001\u0000\u0000\u0000.\u017c\u0001"+
+    "\u0000\u0000\u00000\u0180\u0001\u0000\u0000\u00002\u0182\u0001\u0000\u0000"+
+    "\u00004\u018b\u0001\u0000\u0000\u00006\u018f\u0001\u0000\u0000\u00008"+
+    "\u019f\u0001\u0000\u0000\u0000:\u01a2\u0001\u0000\u0000\u0000<\u01aa\u0001"+
+    "\u0000\u0000\u0000>\u01b2\u0001\u0000\u0000\u0000@\u01b7\u0001\u0000\u0000"+
+    "\u0000B\u01bf\u0001\u0000\u0000\u0000D\u01c7\u0001\u0000\u0000\u0000F"+
+    "\u01cf\u0001\u0000\u0000\u0000H\u01d4\u0001\u0000\u0000\u0000J\u0200\u0001"+
+    "\u0000\u0000\u0000L\u0204\u0001\u0000\u0000\u0000N\u0208\u0001\u0000\u0000"+
+    "\u0000P\u020d\u0001\u0000\u0000\u0000R\u020f\u0001\u0000\u0000\u0000T"+
+    "\u0212\u0001\u0000\u0000\u0000V\u021b\u0001\u0000\u0000\u0000X\u0223\u0001"+
+    "\u0000\u0000\u0000Z\u0226\u0001\u0000\u0000\u0000\\\u0229\u0001\u0000"+
+    "\u0000\u0000^\u023a\u0001\u0000\u0000\u0000`\u023c\u0001\u0000\u0000\u0000"+
+    "b\u0242\u0001\u0000\u0000\u0000d\u0246\u0001\u0000\u0000\u0000f\u0249"+
+    "\u0001\u0000\u0000\u0000h\u0251\u0001\u0000\u0000\u0000j\u0255\u0001\u0000"+
+    "\u0000\u0000l\u0259\u0001\u0000\u0000\u0000n\u025c\u0001\u0000\u0000\u0000"+
+    "p\u0261\u0001\u0000\u0000\u0000r\u0265\u0001\u0000\u0000\u0000t\u0267"+
+    "\u0001\u0000\u0000\u0000v\u0269\u0001\u0000\u0000\u0000x\u026c\u0001\u0000"+
+    "\u0000\u0000z\u0270\u0001\u0000\u0000\u0000|\u0273\u0001\u0000\u0000\u0000"+
+    "~\u0287\u0001\u0000\u0000\u0000\u0080\u028b\u0001\u0000\u0000\u0000\u0082"+
+    "\u0298\u0001\u0000\u0000\u0000\u0084\u029d\u0001\u0000\u0000\u0000\u0086"+
+    "\u02a3\u0001\u0000\u0000\u0000\u0088\u02a8\u0001\u0000\u0000\u0000\u008a"+
+    "\u02aa\u0001\u0000\u0000\u0000\u008c\u02b3\u0001\u0000\u0000\u0000\u008e"+
+    "\u008f\u0003\u0002\u0001\u0000\u008f\u0090\u0005\u0000\u0000\u0001\u0090"+
+    "\u0001\u0001\u0000\u0000\u0000\u0091\u0092\u0006\u0001\uffff\uffff\u0000"+
+    "\u0092\u0093\u0003\u0004\u0002\u0000\u0093\u0099\u0001\u0000\u0000\u0000"+
+    "\u0094\u0095\n\u0001\u0000\u0000\u0095\u0096\u0005\u001d\u0000\u0000\u0096"+
+    "\u0098\u0003\u0006\u0003\u0000\u0097\u0094\u0001\u0000\u0000\u0000\u0098"+
+    "\u009b\u0001\u0000\u0000\u0000\u0099\u0097\u0001\u0000\u0000\u0000\u0099"+
+    "\u009a\u0001\u0000\u0000\u0000\u009a\u0003\u0001\u0000\u0000\u0000\u009b"+
+    "\u0099\u0001\u0000\u0000\u0000\u009c\u00a3\u0003v;\u0000\u009d\u00a3\u0003"+
+    "&\u0013\u0000\u009e\u00a3\u0003 \u0010\u0000\u009f\u00a3\u0003z=\u0000"+
+    "\u00a0\u00a1\u0004\u0002\u0001\u0000\u00a1\u00a3\u00036\u001b\u0000\u00a2"+
+    "\u009c\u0001\u0000\u0000\u0000\u00a2\u009d\u0001\u0000\u0000\u0000\u00a2"+
+    "\u009e\u0001\u0000\u0000\u0000\u00a2\u009f\u0001\u0000\u0000\u0000\u00a2"+
+    "\u00a0\u0001\u0000\u0000\u0000\u00a3\u0005\u0001\u0000\u0000\u0000\u00a4"+
+    "\u00b7\u00038\u001c\u0000\u00a5\u00b7\u0003\b\u0004\u0000\u00a6\u00b7"+
+    "\u0003X,\u0000\u00a7\u00b7\u0003R)\u0000\u00a8\u00b7\u0003:\u001d\u0000"+
+    "\u00a9\u00b7\u0003T*\u0000\u00aa\u00b7\u0003Z-\u0000\u00ab\u00b7\u0003"+
+    "\\.\u0000\u00ac\u00b7\u0003`0\u0000\u00ad\u00b7\u0003b1\u0000\u00ae\u00b7"+
+    "\u0003|>\u0000\u00af\u00b7\u0003d2\u0000\u00b0\u00b7\u0003\u0086C\u0000"+
+    "\u00b1\u00b7\u0003\u0080@\u0000\u00b2\u00b3\u0004\u0003\u0002\u0000\u00b3"+
+    "\u00b7\u0003\u0084B\u0000\u00b4\u00b5\u0004\u0003\u0003\u0000\u00b5\u00b7"+
+    "\u0003\u0082A\u0000\u00b6\u00a4\u0001\u0000\u0000\u0000\u00b6\u00a5\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00a6\u0001\u0000\u0000\u0000\u00b6\u00a7\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00a8\u0001\u0000\u0000\u0000\u00b6\u00a9\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00aa\u0001\u0000\u0000\u0000\u00b6\u00ab\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00ac\u0001\u0000\u0000\u0000\u00b6\u00ad\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00ae\u0001\u0000\u0000\u0000\u00b6\u00af\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00b0\u0001\u0000\u0000\u0000\u00b6\u00b1\u0001"+
+    "\u0000\u0000\u0000\u00b6\u00b2\u0001\u0000\u0000\u0000\u00b6\u00b4\u0001"+
+    "\u0000\u0000\u0000\u00b7\u0007\u0001\u0000\u0000\u0000\u00b8\u00b9\u0005"+
+    "\u0010\u0000\u0000\u00b9\u00ba\u0003\n\u0005\u0000\u00ba\t\u0001\u0000"+
+    "\u0000\u0000\u00bb\u00bc\u0006\u0005\uffff\uffff\u0000\u00bc\u00bd\u0005"+
+    "1\u0000\u0000\u00bd\u00d9\u0003\n\u0005\b\u00be\u00d9\u0003\u0010\b\u0000"+
+    "\u00bf\u00d9\u0003\f\u0006\u0000\u00c0\u00c2\u0003\u0010\b\u0000\u00c1"+
+    "\u00c3\u00051\u0000\u0000\u00c2\u00c1\u0001\u0000\u0000\u0000\u00c2\u00c3"+
+    "\u0001\u0000\u0000\u0000\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c5"+
+    "\u0005,\u0000\u0000\u00c5\u00c6\u00050\u0000\u0000\u00c6\u00cb\u0003\u0010"+
+    "\b\u0000\u00c7\u00c8\u0005\'\u0000\u0000\u00c8\u00ca\u0003\u0010\b\u0000"+
+    "\u00c9\u00c7\u0001\u0000\u0000\u0000\u00ca\u00cd\u0001\u0000\u0000\u0000"+
+    "\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cb\u00cc\u0001\u0000\u0000\u0000"+
+    "\u00cc\u00ce\u0001\u0000\u0000\u0000\u00cd\u00cb\u0001\u0000\u0000\u0000"+
+    "\u00ce\u00cf\u00057\u0000\u0000\u00cf\u00d9\u0001\u0000\u0000\u0000\u00d0"+
+    "\u00d1\u0003\u0010\b\u0000\u00d1\u00d3\u0005-\u0000\u0000\u00d2\u00d4"+
+    "\u00051\u0000\u0000\u00d3\u00d2\u0001\u0000\u0000\u0000\u00d3\u00d4\u0001"+
+    "\u0000\u0000\u0000\u00d4\u00d5\u0001\u0000\u0000\u0000\u00d5\u00d6\u0005"+
+    "2\u0000\u0000\u00d6\u00d9\u0001\u0000\u0000\u0000\u00d7\u00d9\u0003\u000e"+
+    "\u0007\u0000\u00d8\u00bb\u0001\u0000\u0000\u0000\u00d8\u00be\u0001\u0000"+
+    "\u0000\u0000\u00d8\u00bf\u0001\u0000\u0000\u0000\u00d8\u00c0\u0001\u0000"+
+    "\u0000\u0000\u00d8\u00d0\u0001\u0000\u0000\u0000\u00d8\u00d7\u0001\u0000"+
+    "\u0000\u0000\u00d9\u00e2\u0001\u0000\u0000\u0000\u00da\u00db\n\u0005\u0000"+
+    "\u0000\u00db\u00dc\u0005\"\u0000\u0000\u00dc\u00e1\u0003\n\u0005\u0006"+
+    "\u00dd\u00de\n\u0004\u0000\u0000\u00de\u00df\u00054\u0000\u0000\u00df"+
+    "\u00e1\u0003\n\u0005\u0005\u00e0\u00da\u0001\u0000\u0000\u0000\u00e0\u00dd"+
+    "\u0001\u0000\u0000\u0000\u00e1\u00e4\u0001\u0000\u0000\u0000\u00e2\u00e0"+
+    "\u0001\u0000\u0000\u0000\u00e2\u00e3\u0001\u0000\u0000\u0000\u00e3\u000b"+
+    "\u0001\u0000\u0000\u0000\u00e4\u00e2\u0001\u0000\u0000\u0000\u00e5\u00e7"+
+    "\u0003\u0010\b\u0000\u00e6\u00e8\u00051\u0000\u0000\u00e7\u00e6\u0001"+
+    "\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001"+
+    "\u0000\u0000\u0000\u00e9\u00ea\u0005/\u0000\u0000\u00ea\u00eb\u0003r9"+
+    "\u0000\u00eb\u00f4\u0001\u0000\u0000\u0000\u00ec\u00ee\u0003\u0010\b\u0000"+
+    "\u00ed\u00ef\u00051\u0000\u0000\u00ee\u00ed\u0001\u0000\u0000\u0000\u00ee"+
+    "\u00ef\u0001\u0000\u0000\u0000\u00ef\u00f0\u0001\u0000\u0000\u0000\u00f0"+
+    "\u00f1\u00056\u0000\u0000\u00f1\u00f2\u0003r9\u0000\u00f2\u00f4\u0001"+
+    "\u0000\u0000\u0000\u00f3\u00e5\u0001\u0000\u0000\u0000\u00f3\u00ec\u0001"+
+    "\u0000\u0000\u0000\u00f4\r\u0001\u0000\u0000\u0000\u00f5\u00f8\u0003@"+
+    " \u0000\u00f6\u00f7\u0005%\u0000\u0000\u00f7\u00f9\u0003\u001e\u000f\u0000"+
+    "\u00f8\u00f6\u0001\u0000\u0000\u0000\u00f8\u00f9\u0001\u0000\u0000\u0000"+
+    "\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u00fb\u0005&\u0000\u0000\u00fb"+
+    "\u00fc\u0003J%\u0000\u00fc\u000f\u0001\u0000\u0000\u0000\u00fd\u0103\u0003"+
+    "\u0012\t\u0000\u00fe\u00ff\u0003\u0012\t\u0000\u00ff\u0100\u0003t:\u0000"+
+    "\u0100\u0101\u0003\u0012\t\u0000\u0101\u0103\u0001\u0000\u0000\u0000\u0102"+
+    "\u00fd\u0001\u0000\u0000\u0000\u0102\u00fe\u0001\u0000\u0000\u0000\u0103"+
+    "\u0011\u0001\u0000\u0000\u0000\u0104\u0105\u0006\t\uffff\uffff\u0000\u0105"+
+    "\u0109\u0003\u0014\n\u0000\u0106\u0107\u0007\u0000\u0000\u0000\u0107\u0109"+
+    "\u0003\u0012\t\u0003\u0108\u0104\u0001\u0000\u0000\u0000\u0108\u0106\u0001"+
+    "\u0000\u0000\u0000\u0109\u0112\u0001\u0000\u0000\u0000\u010a\u010b\n\u0002"+
+    "\u0000\u0000\u010b\u010c\u0007\u0001\u0000\u0000\u010c\u0111\u0003\u0012"+
+    "\t\u0003\u010d\u010e\n\u0001\u0000\u0000\u010e\u010f\u0007\u0000\u0000"+
+    "\u0000\u010f\u0111\u0003\u0012\t\u0002\u0110\u010a\u0001\u0000\u0000\u0000"+
+    "\u0110\u010d\u0001\u0000\u0000\u0000\u0111\u0114\u0001\u0000\u0000\u0000"+
+    "\u0112\u0110\u0001\u0000\u0000\u0000\u0112\u0113\u0001\u0000\u0000\u0000"+
+    "\u0113\u0013\u0001\u0000\u0000\u0000\u0114\u0112\u0001\u0000\u0000\u0000"+
+    "\u0115\u0116\u0006\n\uffff\uffff\u0000\u0116\u011e\u0003J%\u0000\u0117"+
+    "\u011e\u0003@ \u0000\u0118\u011e\u0003\u0016\u000b\u0000\u0119\u011a\u0005"+
+    "0\u0000\u0000\u011a\u011b\u0003\n\u0005\u0000\u011b\u011c\u00057\u0000"+
+    "\u0000\u011c\u011e\u0001\u0000\u0000\u0000\u011d\u0115\u0001\u0000\u0000"+
+    "\u0000\u011d\u0117\u0001\u0000\u0000\u0000\u011d\u0118\u0001\u0000\u0000"+
+    "\u0000\u011d\u0119\u0001\u0000\u0000\u0000\u011e\u0124\u0001\u0000\u0000"+
+    "\u0000\u011f\u0120\n\u0001\u0000\u0000\u0120\u0121\u0005%\u0000\u0000"+
+    "\u0121\u0123\u0003\u001e\u000f\u0000\u0122\u011f\u0001\u0000\u0000\u0000"+
+    "\u0123\u0126\u0001\u0000\u0000\u0000\u0124\u0122\u0001\u0000\u0000\u0000"+
+    "\u0124\u0125\u0001\u0000\u0000\u0000\u0125\u0015\u0001\u0000\u0000\u0000"+
+    "\u0126\u0124\u0001\u0000\u0000\u0000\u0127\u0128\u0003\u0018\f\u0000\u0128"+
+    "\u0136\u00050\u0000\u0000\u0129\u0137\u0005B\u0000\u0000\u012a\u012f\u0003"+
+    "\n\u0005\u0000\u012b\u012c\u0005\'\u0000\u0000\u012c\u012e\u0003\n\u0005"+
+    "\u0000\u012d\u012b\u0001\u0000\u0000\u0000\u012e\u0131\u0001\u0000\u0000"+
+    "\u0000\u012f\u012d\u0001\u0000\u0000\u0000\u012f\u0130\u0001\u0000\u0000"+
+    "\u0000\u0130\u0134\u0001\u0000\u0000\u0000\u0131\u012f\u0001\u0000\u0000"+
+    "\u0000\u0132\u0133\u0005\'\u0000\u0000\u0133\u0135\u0003\u001a\r\u0000"+
+    "\u0134\u0132\u0001\u0000\u0000\u0000\u0134\u0135\u0001\u0000\u0000\u0000"+
+    "\u0135\u0137\u0001\u0000\u0000\u0000\u0136\u0129\u0001\u0000\u0000\u0000"+
+    "\u0136\u012a\u0001\u0000\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000"+
+    "\u0137\u0138\u0001\u0000\u0000\u0000\u0138\u0139\u00057\u0000\u0000\u0139"+
+    "\u0017\u0001\u0000\u0000\u0000\u013a\u013b\u0003P(\u0000\u013b\u0019\u0001"+
+    "\u0000\u0000\u0000\u013c\u013d\u0005E\u0000\u0000\u013d\u0142\u0003\u001c"+
+    "\u000e\u0000\u013e\u013f\u0005\'\u0000\u0000\u013f\u0141\u0003\u001c\u000e"+
+    "\u0000\u0140\u013e\u0001\u0000\u0000\u0000\u0141\u0144\u0001\u0000\u0000"+
+    "\u0000\u0142\u0140\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000\u0000"+
+    "\u0000\u0143\u0145\u0001\u0000\u0000\u0000\u0144\u0142\u0001\u0000\u0000"+
+    "\u0000\u0145\u0146\u0005F\u0000\u0000\u0146\u001b\u0001\u0000\u0000\u0000"+
+    "\u0147\u0148\u0003r9\u0000\u0148\u0149\u0005&\u0000\u0000\u0149\u014a"+
+    "\u0003J%\u0000\u014a\u001d\u0001\u0000\u0000\u0000\u014b\u014c\u0003F"+
+    "#\u0000\u014c\u001f\u0001\u0000\u0000\u0000\u014d\u014e\u0005\f\u0000"+
+    "\u0000\u014e\u014f\u0003\"\u0011\u0000\u014f!\u0001\u0000\u0000\u0000"+
+    "\u0150\u0155\u0003$\u0012\u0000\u0151\u0152\u0005\'\u0000\u0000\u0152"+
+    "\u0154\u0003$\u0012\u0000\u0153\u0151\u0001\u0000\u0000\u0000\u0154\u0157"+
+    "\u0001\u0000\u0000\u0000\u0155\u0153\u0001\u0000\u0000\u0000\u0155\u0156"+
+    "\u0001\u0000\u0000\u0000\u0156#\u0001\u0000\u0000\u0000\u0157\u0155\u0001"+
+    "\u0000\u0000\u0000\u0158\u0159\u0003@ \u0000\u0159\u015a\u0005$\u0000"+
+    "\u0000\u015a\u015c\u0001\u0000\u0000\u0000\u015b\u0158\u0001\u0000\u0000"+
+    "\u0000\u015b\u015c\u0001\u0000\u0000\u0000\u015c\u015d\u0001\u0000\u0000"+
+    "\u0000\u015d\u015e\u0003\n\u0005\u0000\u015e%\u0001\u0000\u0000\u0000"+
+    "\u015f\u0160\u0005\u0006\u0000\u0000\u0160\u0165\u0003(\u0014\u0000\u0161"+
+    "\u0162\u0005\'\u0000\u0000\u0162\u0164\u0003(\u0014\u0000\u0163\u0161"+
+    "\u0001\u0000\u0000\u0000\u0164\u0167\u0001\u0000\u0000\u0000\u0165\u0163"+
+    "\u0001\u0000\u0000\u0000\u0165\u0166\u0001\u0000\u0000\u0000\u0166\u0169"+
+    "\u0001\u0000\u0000\u0000\u0167\u0165\u0001\u0000\u0000\u0000\u0168\u016a"+
+    "\u00030\u0018\u0000\u0169\u0168\u0001\u0000\u0000\u0000\u0169\u016a\u0001"+
+    "\u0000\u0000\u0000\u016a\'\u0001\u0000\u0000\u0000\u016b\u016c\u0003*"+
+    "\u0015\u0000\u016c\u016d\u0005&\u0000\u0000\u016d\u016f\u0001\u0000\u0000"+
+    "\u0000\u016e\u016b\u0001\u0000\u0000\u0000\u016e\u016f\u0001\u0000\u0000"+
+    "\u0000\u016f\u0170\u0001\u0000\u0000\u0000\u0170\u0177\u0003.\u0017\u0000"+
+    "\u0171\u0174\u0003.\u0017\u0000\u0172\u0173\u0005%\u0000\u0000\u0173\u0175"+
+    "\u0003,\u0016\u0000\u0174\u0172\u0001\u0000\u0000\u0000\u0174\u0175\u0001"+
+    "\u0000\u0000\u0000\u0175\u0177\u0001\u0000\u0000\u0000\u0176\u016e\u0001"+
+    "\u0000\u0000\u0000\u0176\u0171\u0001\u0000\u0000\u0000\u0177)\u0001\u0000"+
+    "\u0000\u0000\u0178\u0179\u0007\u0002\u0000\u0000\u0179+\u0001\u0000\u0000"+
+    "\u0000\u017a\u017b\u0007\u0002\u0000\u0000\u017b-\u0001\u0000\u0000\u0000"+
+    "\u017c\u017d\u0007\u0002\u0000\u0000\u017d/\u0001\u0000\u0000\u0000\u017e"+
+    "\u0181\u00032\u0019\u0000\u017f\u0181\u00034\u001a\u0000\u0180\u017e\u0001"+
+    "\u0000\u0000\u0000\u0180\u017f\u0001\u0000\u0000\u0000\u01811\u0001\u0000"+
+    "\u0000\u0000\u0182\u0183\u0005T\u0000\u0000\u0183\u0188\u0005U\u0000\u0000"+
+    "\u0184\u0185\u0005\'\u0000\u0000\u0185\u0187\u0005U\u0000\u0000\u0186"+
+    "\u0184\u0001\u0000\u0000\u0000\u0187\u018a\u0001\u0000\u0000\u0000\u0188"+
+    "\u0186\u0001\u0000\u0000\u0000\u0188\u0189\u0001\u0000\u0000\u0000\u0189"+
+    "3\u0001\u0000\u0000\u0000\u018a\u0188\u0001\u0000\u0000\u0000\u018b\u018c"+
+    "\u0005J\u0000\u0000\u018c\u018d\u00032\u0019\u0000\u018d\u018e\u0005K"+
+    "\u0000\u0000\u018e5\u0001\u0000\u0000\u0000\u018f\u0190\u0005\u0015\u0000"+
+    "\u0000\u0190\u0195\u0003(\u0014\u0000\u0191\u0192\u0005\'\u0000\u0000"+
+    "\u0192\u0194\u0003(\u0014\u0000\u0193\u0191\u0001\u0000\u0000\u0000\u0194"+
+    "\u0197\u0001\u0000\u0000\u0000\u0195\u0193\u0001\u0000\u0000\u0000\u0195"+
+    "\u0196\u0001\u0000\u0000\u0000\u0196\u0199\u0001\u0000\u0000\u0000\u0197"+
+    "\u0195\u0001\u0000\u0000\u0000\u0198\u019a\u0003<\u001e\u0000\u0199\u0198"+
+    "\u0001\u0000\u0000\u0000\u0199\u019a\u0001\u0000\u0000\u0000\u019a\u019d"+
+    "\u0001\u0000\u0000\u0000\u019b\u019c\u0005!\u0000\u0000\u019c\u019e\u0003"+
+    "\"\u0011\u0000\u019d\u019b\u0001\u0000\u0000\u0000\u019d\u019e\u0001\u0000"+
     "\u0000\u0000\u019e7\u0001\u0000\u0000\u0000\u019f\u01a0\u0005\u0004\u0000"+
     "\u0000\u01a0\u01a1\u0003\"\u0011\u0000\u01a19\u0001\u0000\u0000\u0000"+
     "\u01a2\u01a4\u0005\u000f\u0000\u0000\u01a3\u01a5\u0003<\u001e\u0000\u01a4"+
@@ -6576,74 +6594,77 @@ public class EsqlBaseParser extends ParserConfig {
     "\u0000\u022f\u022d\u0001\u0000\u0000\u0000\u022f\u0230\u0001\u0000\u0000"+
     "\u0000\u0230]\u0001\u0000\u0000\u0000\u0231\u022f\u0001\u0000\u0000\u0000"+
     "\u0232\u0233\u0003B!\u0000\u0233\u0234\u0005]\u0000\u0000\u0234\u0235"+
-    "\u0003B!\u0000\u0235_\u0001\u0000\u0000\u0000\u0236\u0237\u0005\u0001"+
-    "\u0000\u0000\u0237\u0238\u0003\u0014\n\u0000\u0238\u023a\u0003r9\u0000"+
-    "\u0239\u023b\u0003f3\u0000\u023a\u0239\u0001\u0000\u0000\u0000\u023a\u023b"+
-    "\u0001\u0000\u0000\u0000\u023ba\u0001\u0000\u0000\u0000\u023c\u023d\u0005"+
-    "\u0007\u0000\u0000\u023d\u023e\u0003\u0014\n\u0000\u023e\u023f\u0003r"+
-    "9\u0000\u023fc\u0001\u0000\u0000\u0000\u0240\u0241\u0005\n\u0000\u0000"+
-    "\u0241\u0242\u0003@ \u0000\u0242e\u0001\u0000\u0000\u0000\u0243\u0248"+
-    "\u0003h4\u0000\u0244\u0245\u0005\'\u0000\u0000\u0245\u0247\u0003h4\u0000"+
-    "\u0246\u0244\u0001\u0000\u0000\u0000\u0247\u024a\u0001\u0000\u0000\u0000"+
-    "\u0248\u0246\u0001\u0000\u0000\u0000\u0248\u0249\u0001\u0000\u0000\u0000"+
-    "\u0249g\u0001\u0000\u0000\u0000\u024a\u0248\u0001\u0000\u0000\u0000\u024b"+
-    "\u024c\u0003F#\u0000\u024c\u024d\u0005$\u0000\u0000\u024d\u024e\u0003"+
-    "J%\u0000\u024ei\u0001\u0000\u0000\u0000\u024f\u0250\u0007\u0006\u0000"+
-    "\u0000\u0250k\u0001\u0000\u0000\u0000\u0251\u0254\u0003n7\u0000\u0252"+
-    "\u0254\u0003p8\u0000\u0253\u0251\u0001\u0000\u0000\u0000\u0253\u0252\u0001"+
-    "\u0000\u0000\u0000\u0254m\u0001\u0000\u0000\u0000\u0255\u0257\u0007\u0000"+
-    "\u0000\u0000\u0256\u0255\u0001\u0000\u0000\u0000\u0256\u0257\u0001\u0000"+
-    "\u0000\u0000\u0257\u0258\u0001\u0000\u0000\u0000\u0258\u0259\u0005 \u0000"+
-    "\u0000\u0259o\u0001\u0000\u0000\u0000\u025a\u025c\u0007\u0000\u0000\u0000"+
-    "\u025b\u025a\u0001\u0000\u0000\u0000\u025b\u025c\u0001\u0000\u0000\u0000"+
-    "\u025c\u025d\u0001\u0000\u0000\u0000\u025d\u025e\u0005\u001f\u0000\u0000"+
-    "\u025eq\u0001\u0000\u0000\u0000\u025f\u0260\u0005\u001e\u0000\u0000\u0260"+
-    "s\u0001\u0000\u0000\u0000\u0261\u0262\u0007\u0007\u0000\u0000\u0262u\u0001"+
-    "\u0000\u0000\u0000\u0263\u0264\u0005\u0005\u0000\u0000\u0264\u0265\u0003"+
-    "x<\u0000\u0265w\u0001\u0000\u0000\u0000\u0266\u0267\u0005J\u0000\u0000"+
-    "\u0267\u0268\u0003\u0002\u0001\u0000\u0268\u0269\u0005K\u0000\u0000\u0269"+
-    "y\u0001\u0000\u0000\u0000\u026a\u026b\u0005\r\u0000\u0000\u026b\u026c"+
-    "\u0005m\u0000\u0000\u026c{\u0001\u0000\u0000\u0000\u026d\u026e\u0005\u0003"+
-    "\u0000\u0000\u026e\u0271\u0005c\u0000\u0000\u026f\u0270\u0005a\u0000\u0000"+
-    "\u0270\u0272\u0003B!\u0000\u0271\u026f\u0001\u0000\u0000\u0000\u0271\u0272"+
-    "\u0001\u0000\u0000\u0000\u0272\u027c\u0001\u0000\u0000\u0000\u0273\u0274"+
-    "\u0005b\u0000\u0000\u0274\u0279\u0003~?\u0000\u0275\u0276\u0005\'\u0000"+
-    "\u0000\u0276\u0278\u0003~?\u0000\u0277\u0275\u0001\u0000\u0000\u0000\u0278"+
-    "\u027b\u0001\u0000\u0000\u0000\u0279\u0277\u0001\u0000\u0000\u0000\u0279"+
-    "\u027a\u0001\u0000\u0000\u0000\u027a\u027d\u0001\u0000\u0000\u0000\u027b"+
-    "\u0279\u0001\u0000\u0000\u0000\u027c\u0273\u0001\u0000\u0000\u0000\u027c"+
-    "\u027d\u0001\u0000\u0000\u0000\u027d}\u0001\u0000\u0000\u0000\u027e\u027f"+
-    "\u0003B!\u0000\u027f\u0280\u0005$\u0000\u0000\u0280\u0282\u0001\u0000"+
-    "\u0000\u0000\u0281\u027e\u0001\u0000\u0000\u0000\u0281\u0282\u0001\u0000"+
-    "\u0000\u0000\u0282\u0283\u0001\u0000\u0000\u0000\u0283\u0284\u0003B!\u0000"+
-    "\u0284\u007f\u0001\u0000\u0000\u0000\u0285\u0286\u0005\u0012\u0000\u0000"+
-    "\u0286\u0289\u0003@ \u0000\u0287\u0288\u0005a\u0000\u0000\u0288\u028a"+
-    "\u0003@ \u0000\u0289\u0287\u0001\u0000\u0000\u0000\u0289\u028a\u0001\u0000"+
-    "\u0000\u0000\u028a\u0290\u0001\u0000\u0000\u0000\u028b\u028c\u0005]\u0000"+
-    "\u0000\u028c\u028d\u0003@ \u0000\u028d\u028e\u0005\'\u0000\u0000\u028e"+
-    "\u028f\u0003@ \u0000\u028f\u0291\u0001\u0000\u0000\u0000\u0290\u028b\u0001"+
-    "\u0000\u0000\u0000\u0290\u0291\u0001\u0000\u0000\u0000\u0291\u0081\u0001"+
-    "\u0000\u0000\u0000\u0292\u0293\u0005\u0014\u0000\u0000\u0293\u0294\u0003"+
-    "(\u0014\u0000\u0294\u0295\u0005a\u0000\u0000\u0295\u0296\u0003D\"\u0000"+
-    "\u0296\u0083\u0001\u0000\u0000\u0000\u0297\u0298\u0005\u0013\u0000\u0000"+
-    "\u0298\u029b\u0003<\u001e\u0000\u0299\u029a\u0005!\u0000\u0000\u029a\u029c"+
-    "\u0003\"\u0011\u0000\u029b\u0299\u0001\u0000\u0000\u0000\u029b\u029c\u0001"+
-    "\u0000\u0000\u0000\u029c\u0085\u0001\u0000\u0000\u0000\u029d\u029e\u0007"+
-    "\b\u0000\u0000\u029e\u029f\u0005{\u0000\u0000\u029f\u02a0\u0003\u0088"+
-    "D\u0000\u02a0\u02a1\u0003\u008aE\u0000\u02a1\u0087\u0001\u0000\u0000\u0000"+
-    "\u02a2\u02a3\u0003(\u0014\u0000\u02a3\u0089\u0001\u0000\u0000\u0000\u02a4"+
-    "\u02a5\u0005a\u0000\u0000\u02a5\u02aa\u0003\u008cF\u0000\u02a6\u02a7\u0005"+
-    "\'\u0000\u0000\u02a7\u02a9\u0003\u008cF\u0000\u02a8\u02a6\u0001\u0000"+
-    "\u0000\u0000\u02a9\u02ac\u0001\u0000\u0000\u0000\u02aa\u02a8\u0001\u0000"+
-    "\u0000\u0000\u02aa\u02ab\u0001\u0000\u0000\u0000\u02ab\u008b\u0001\u0000"+
-    "\u0000\u0000\u02ac\u02aa\u0001\u0000\u0000\u0000\u02ad\u02ae\u0003\u0010"+
-    "\b\u0000\u02ae\u008d\u0001\u0000\u0000\u0000C\u0099\u00a2\u00b6\u00c2"+
-    "\u00cb\u00d3\u00d8\u00e0\u00e2\u00e7\u00ee\u00f3\u00f8\u0102\u0108\u0110"+
-    "\u0112\u011d\u0124\u012f\u0134\u0136\u0142\u0155\u015b\u0165\u0169\u016e"+
-    "\u0174\u0176\u0180\u0188\u0195\u0199\u019d\u01a4\u01a8\u01af\u01b5\u01bc"+
-    "\u01c4\u01cc\u01d4\u01e5\u01f0\u01fb\u0200\u0204\u0208\u020d\u0218\u021d"+
-    "\u0221\u022f\u023a\u0248\u0253\u0256\u025b\u0271\u0279\u027c\u0281\u0289"+
-    "\u0290\u029b\u02aa";
+    "\u0003B!\u0000\u0235\u023b\u0001\u0000\u0000\u0000\u0236\u0237\u0003B"+
+    "!\u0000\u0237\u0238\u0005$\u0000\u0000\u0238\u0239\u0003B!\u0000\u0239"+
+    "\u023b\u0001\u0000\u0000\u0000\u023a\u0232\u0001\u0000\u0000\u0000\u023a"+
+    "\u0236\u0001\u0000\u0000\u0000\u023b_\u0001\u0000\u0000\u0000\u023c\u023d"+
+    "\u0005\u0001\u0000\u0000\u023d\u023e\u0003\u0014\n\u0000\u023e\u0240\u0003"+
+    "r9\u0000\u023f\u0241\u0003f3\u0000\u0240\u023f\u0001\u0000\u0000\u0000"+
+    "\u0240\u0241\u0001\u0000\u0000\u0000\u0241a\u0001\u0000\u0000\u0000\u0242"+
+    "\u0243\u0005\u0007\u0000\u0000\u0243\u0244\u0003\u0014\n\u0000\u0244\u0245"+
+    "\u0003r9\u0000\u0245c\u0001\u0000\u0000\u0000\u0246\u0247\u0005\n\u0000"+
+    "\u0000\u0247\u0248\u0003@ \u0000\u0248e\u0001\u0000\u0000\u0000\u0249"+
+    "\u024e\u0003h4\u0000\u024a\u024b\u0005\'\u0000\u0000\u024b\u024d\u0003"+
+    "h4\u0000\u024c\u024a\u0001\u0000\u0000\u0000\u024d\u0250\u0001\u0000\u0000"+
+    "\u0000\u024e\u024c\u0001\u0000\u0000\u0000\u024e\u024f\u0001\u0000\u0000"+
+    "\u0000\u024fg\u0001\u0000\u0000\u0000\u0250\u024e\u0001\u0000\u0000\u0000"+
+    "\u0251\u0252\u0003F#\u0000\u0252\u0253\u0005$\u0000\u0000\u0253\u0254"+
+    "\u0003J%\u0000\u0254i\u0001\u0000\u0000\u0000\u0255\u0256\u0007\u0006"+
+    "\u0000\u0000\u0256k\u0001\u0000\u0000\u0000\u0257\u025a\u0003n7\u0000"+
+    "\u0258\u025a\u0003p8\u0000\u0259\u0257\u0001\u0000\u0000\u0000\u0259\u0258"+
+    "\u0001\u0000\u0000\u0000\u025am\u0001\u0000\u0000\u0000\u025b\u025d\u0007"+
+    "\u0000\u0000\u0000\u025c\u025b\u0001\u0000\u0000\u0000\u025c\u025d\u0001"+
+    "\u0000\u0000\u0000\u025d\u025e\u0001\u0000\u0000\u0000\u025e\u025f\u0005"+
+    " \u0000\u0000\u025fo\u0001\u0000\u0000\u0000\u0260\u0262\u0007\u0000\u0000"+
+    "\u0000\u0261\u0260\u0001\u0000\u0000\u0000\u0261\u0262\u0001\u0000\u0000"+
+    "\u0000\u0262\u0263\u0001\u0000\u0000\u0000\u0263\u0264\u0005\u001f\u0000"+
+    "\u0000\u0264q\u0001\u0000\u0000\u0000\u0265\u0266\u0005\u001e\u0000\u0000"+
+    "\u0266s\u0001\u0000\u0000\u0000\u0267\u0268\u0007\u0007\u0000\u0000\u0268"+
+    "u\u0001\u0000\u0000\u0000\u0269\u026a\u0005\u0005\u0000\u0000\u026a\u026b"+
+    "\u0003x<\u0000\u026bw\u0001\u0000\u0000\u0000\u026c\u026d\u0005J\u0000"+
+    "\u0000\u026d\u026e\u0003\u0002\u0001\u0000\u026e\u026f\u0005K\u0000\u0000"+
+    "\u026fy\u0001\u0000\u0000\u0000\u0270\u0271\u0005\r\u0000\u0000\u0271"+
+    "\u0272\u0005m\u0000\u0000\u0272{\u0001\u0000\u0000\u0000\u0273\u0274\u0005"+
+    "\u0003\u0000\u0000\u0274\u0277\u0005c\u0000\u0000\u0275\u0276\u0005a\u0000"+
+    "\u0000\u0276\u0278\u0003B!\u0000\u0277\u0275\u0001\u0000\u0000\u0000\u0277"+
+    "\u0278\u0001\u0000\u0000\u0000\u0278\u0282\u0001\u0000\u0000\u0000\u0279"+
+    "\u027a\u0005b\u0000\u0000\u027a\u027f\u0003~?\u0000\u027b\u027c\u0005"+
+    "\'\u0000\u0000\u027c\u027e\u0003~?\u0000\u027d\u027b\u0001\u0000\u0000"+
+    "\u0000\u027e\u0281\u0001\u0000\u0000\u0000\u027f\u027d\u0001\u0000\u0000"+
+    "\u0000\u027f\u0280\u0001\u0000\u0000\u0000\u0280\u0283\u0001\u0000\u0000"+
+    "\u0000\u0281\u027f\u0001\u0000\u0000\u0000\u0282\u0279\u0001\u0000\u0000"+
+    "\u0000\u0282\u0283\u0001\u0000\u0000\u0000\u0283}\u0001\u0000\u0000\u0000"+
+    "\u0284\u0285\u0003B!\u0000\u0285\u0286\u0005$\u0000\u0000\u0286\u0288"+
+    "\u0001\u0000\u0000\u0000\u0287\u0284\u0001\u0000\u0000\u0000\u0287\u0288"+
+    "\u0001\u0000\u0000\u0000\u0288\u0289\u0001\u0000\u0000\u0000\u0289\u028a"+
+    "\u0003B!\u0000\u028a\u007f\u0001\u0000\u0000\u0000\u028b\u028c\u0005\u0012"+
+    "\u0000\u0000\u028c\u028f\u0003@ \u0000\u028d\u028e\u0005a\u0000\u0000"+
+    "\u028e\u0290\u0003@ \u0000\u028f\u028d\u0001\u0000\u0000\u0000\u028f\u0290"+
+    "\u0001\u0000\u0000\u0000\u0290\u0296\u0001\u0000\u0000\u0000\u0291\u0292"+
+    "\u0005]\u0000\u0000\u0292\u0293\u0003@ \u0000\u0293\u0294\u0005\'\u0000"+
+    "\u0000\u0294\u0295\u0003@ \u0000\u0295\u0297\u0001\u0000\u0000\u0000\u0296"+
+    "\u0291\u0001\u0000\u0000\u0000\u0296\u0297\u0001\u0000\u0000\u0000\u0297"+
+    "\u0081\u0001\u0000\u0000\u0000\u0298\u0299\u0005\u0014\u0000\u0000\u0299"+
+    "\u029a\u0003(\u0014\u0000\u029a\u029b\u0005a\u0000\u0000\u029b\u029c\u0003"+
+    "D\"\u0000\u029c\u0083\u0001\u0000\u0000\u0000\u029d\u029e\u0005\u0013"+
+    "\u0000\u0000\u029e\u02a1\u0003<\u001e\u0000\u029f\u02a0\u0005!\u0000\u0000"+
+    "\u02a0\u02a2\u0003\"\u0011\u0000\u02a1\u029f\u0001\u0000\u0000\u0000\u02a1"+
+    "\u02a2\u0001\u0000\u0000\u0000\u02a2\u0085\u0001\u0000\u0000\u0000\u02a3"+
+    "\u02a4\u0007\b\u0000\u0000\u02a4\u02a5\u0005{\u0000\u0000\u02a5\u02a6"+
+    "\u0003\u0088D\u0000\u02a6\u02a7\u0003\u008aE\u0000\u02a7\u0087\u0001\u0000"+
+    "\u0000\u0000\u02a8\u02a9\u0003(\u0014\u0000\u02a9\u0089\u0001\u0000\u0000"+
+    "\u0000\u02aa\u02ab\u0005a\u0000\u0000\u02ab\u02b0\u0003\u008cF\u0000\u02ac"+
+    "\u02ad\u0005\'\u0000\u0000\u02ad\u02af\u0003\u008cF\u0000\u02ae\u02ac"+
+    "\u0001\u0000\u0000\u0000\u02af\u02b2\u0001\u0000\u0000\u0000\u02b0\u02ae"+
+    "\u0001\u0000\u0000\u0000\u02b0\u02b1\u0001\u0000\u0000\u0000\u02b1\u008b"+
+    "\u0001\u0000\u0000\u0000\u02b2\u02b0\u0001\u0000\u0000\u0000\u02b3\u02b4"+
+    "\u0003\u0010\b\u0000\u02b4\u008d\u0001\u0000\u0000\u0000D\u0099\u00a2"+
+    "\u00b6\u00c2\u00cb\u00d3\u00d8\u00e0\u00e2\u00e7\u00ee\u00f3\u00f8\u0102"+
+    "\u0108\u0110\u0112\u011d\u0124\u012f\u0134\u0136\u0142\u0155\u015b\u0165"+
+    "\u0169\u016e\u0174\u0176\u0180\u0188\u0195\u0199\u019d\u01a4\u01a8\u01af"+
+    "\u01b5\u01bc\u01c4\u01cc\u01d4\u01e5\u01f0\u01fb\u0200\u0204\u0208\u020d"+
+    "\u0218\u021d\u0221\u022f\u023a\u0240\u024e\u0259\u025c\u0261\u0277\u027f"+
+    "\u0282\u0287\u028f\u0296\u02a1\u02b0";
   public static final ATN _ATN =
     new ATNDeserializer().deserialize(_serializedATN.toCharArray());
   static {

+ 2 - 1
x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/parser/ExpressionTests.java

@@ -583,7 +583,7 @@ public class ExpressionTests extends ESTestCase {
         String[] oldName = new String[] { "b", "a.c", "x.y", "a" };
         List<?> renamings;
         for (int i = 0; i < newName.length; i++) {
-            Rename r = renameExpression(oldName[i] + " AS " + newName[i]);
+            Rename r = renameExpression(randomBoolean() ? (oldName[i] + " AS " + newName[i]) : (newName[i] + " = " + oldName[i]));
             renamings = r.renamings();
             assertThat(renamings.size(), equalTo(1));
             assertThat(renamings.get(0), instanceOf(Alias.class));
@@ -610,6 +610,7 @@ public class ExpressionTests extends ESTestCase {
 
     public void testForbidWildcardProjectRename() {
         assertParsingException(() -> renameExpression("b* AS a*"), "line 1:17: Using wildcards [*] in RENAME is not allowed [b* AS a*]");
+        assertParsingException(() -> renameExpression("a* = b*"), "line 1:17: Using wildcards [*] in RENAME is not allowed [a* = b*]");
     }
 
     public void testSimplifyInWithSingleElementList() {

Some files were not shown because too many files changed in this diff